Pagina 7 di 8 primaprima ... 5 6 7 8 ultimoultimo
Visualizzazione dei risultati da 61 a 70 su 79
  1. #61
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    550
    Bottaweb

  2. #62
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    550
    Ciao,
    come va ? ho letto i capitoli relativi alla programmazione dei database con ADO e volevo porti alcune domande... :-)

    Volevo realizzare una sub che conti , cosi' come fatto per la frequenza, tutti i numeri che iniziano con 1 con 2 ...8 . insomma le cosiddette decine.Da SQL un' operazione di questo tipo la si ottiene con la sintassi "1%" quindi ho implementato questa routine con i che varia da 0 a 8 ma non riesco a capire come inserire % , difatti non mi funziona


    Private Sub Command5_Click()
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    cn.CursorLocation = adUseServer
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;Jet OLEDBatabase;"
    rs.CursorLocation = adUseServer
    For i = 0 To 8 Step 1
    rs.Open "SELECT COUNT(*) AS TOTALE FROM STORICO WHERE RUOTA='BA' AND PRIMO='" & i & "';", cn ' dove lo metto %?
    ' ho inserito solo primo per esempio
    totale1 = rs(0)
    MsgBox totale1
    rs.Close
    Next
    End Sub


    Volendo sfruttare le query parametriche( leggendo i capitoli ho capito xchè sono + veloci) il problema mi si ripresenta non sapendo combinare % con ?.

    tipo...

    'cmdCalcola.CommandText = "SELECT COUNT(*) AS TOTALE FROM STORICO WHERE PRIMO=? OR SECONDO=? OR TERZO=?.........

    cmdCalcola.Parameters("UNO").Value = stringa + "%"
    ' cmdCalcola.Parameters("DUE").Value = stringa + "%"
    ' cmdCalcola.Parameters("TRE").Value = stringa + "%"
    .....
    ecc ecc ...ma davvero sto andando per intuito ..il libro non dice come fare...

    Ho letto che con il DataEnviroment molte operazioni vengono smplificate . Una volta creata la connection si crea la command che viene richiamata da codice. Ad esempio trascinando la command nel form si creano automaticamte i campi per i record solo che per spostarsi bisogna creare 2 bottoni con eventi del tipo:

    Private Sub Command1_Click()
    DataEnvironment1.rsCommand1.MoveNext
    End Sub
    Private Sub Command2_Click()
    DataEnvironment1.rsCommand1.MovePrevious
    End Sub

    ogni record contiene una singola esrtazione per una ruota . Anche usando dei controlli associati all'oggetto ADO riesco a spostarmi su una singola ruota ...ma io vorrei visualizzare , e magari poter modificare tutte e 10 le estrazioni di una singola data. Cioè 50 Text relative alle 10 ruote . Con ADO vorrei spostarmi di 10 in 10 . Oppure avevo pensato di realizzare una query paramentrica con DataEnv. inserendo nel form:

    Private Sub Form_Load()
    DataEnvironment1.Command3 "12/02/2002"
    Set DataGrid1.DataSource = DataEnvironment1.rsCommand3
    End Sub

    con Command3 in DataEnv. del tipo SELECT * FROM STORICO WHERE data = ? ma mi da errore di sintassi. Come iserire i parametri in Dataenviroment :-(


    Un ultima cosa :-) . Tempo fa ho realizzato un'applicazione di rete con Java per la comunicazione client/server. Il testo che ho parla di VB6 e DHTML ma a me interessa realizzare una semplice applicazione tramite Socket sapresti darmi delle indicazioni al riguardo ..appunti dalla rete eccc


    GRAZIE 100000


    ciao
    Bottaweb

  3. #63
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    550
    Ho provato in questo modo:

    Form3:


    Private Sub Command1_Click()
    Dim de As New DataEnvironment1
    de.Command3 12/5/2002
    Do Until de.rsCommand3.EOF
    Text1(i).Text = de.rsCommand3("primo")
    Text1(i + 1).Text = de.rsCommand3("secondo")
    Text1(i + 2).Text = de.rsCommand3("terzo")
    Text1(i + 3).Text = de.rsCommand3("quarto")
    Text1(i + 4).Text = de.rsCommand3("quinto")
    i = i + 5
    MsgBox Text1(i).Text
    de.rsCommand3.MoveNext
    Loop
    de.rsCommand3.Close
    End Sub

    Private Sub Form_Initialize()
    Dim i As Integer
    i = 0
    End Sub

    con Command3 di Enviroment:

    SELECT * FROM STORICO WHERE data = ?

    mi dice che devo impostare i parametri nella finestra parameter di Enviroment. Ho impostato size scale e tipo e nome come specificato nella finestra proprety di Data View . Ma quando eseguo la routine nelle 10 caselle textBox non mi compaiono i valori e non mi da nemmeno una segnalazione di errore :-(

    P.S x Jupy Preverisci lavorare con i database direttamente da codice o utilizzando il design Enviroment?
    Bottaweb

  4. #64
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, sono di corsa, pertanto ti do soltanto alcune indicazioni con le quali dovresti risolvere i problemi..anche se poi ci sarebbere delle ottimizzazioni da fare per quello che vuoi fare tu..
    Allora, per fare una ricerca usando il carattere jolly "%" devi usare l'istruzione LIKE nella query, riprendo il tuo pezzo di codice
    codice:
    Private Sub Command5_Click() 
       Set cn = New ADODB.Connection 
       Set rs = New ADODB.Recordset 
       cn.CursorLocation = adUseServer 
       cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;Jet OLEDBatabase;" 
       rs.CursorLocation = adUseServer 
       For i = 0 To 8 Step 1 
          rs.Open "SELECT COUNT(*) AS TOTALE FROM STORICO WHERE RUOTA='BA' AND PRIMO LIKE '" & i & "%';", cn    
       totale1 = rs(0) 
       MsgBox totale1 
       rs.Close 
       Next 
    End Sub
    Se vui usare le query parametriche, devi sostituire "=" con LIKE e poi fai una cosa del genere:
    codice:
    stringa=tuoNum & "%"
    cmdCalcola.Parameters("UNO").Value = stringa
    Comunque ricordati che l'operatore LIKE è più lento di un operatore di uguaglianza (=) pertanto vedi sempre se puoi ottimizzare il tutto..senza usare tanti LIKE..

    Per quanto riguarda il DataEnviroment, non ho un buon rapporto, nel senso che non mi è mai piaciuto, questioni di gusti! e comunque penso che appesantisca anche l'applicazione..anche se questo non si nota tanto.

    Il VB per fare programmi client/server c'è l'oggetto winsocket, ora non so darti un link dove andare, ma se hai la guida msdn di vb, guarda li, ci sono anche esempi..vedrai che non è tanto difficile usarli...

    Spero che queste poche indicazioni ti permettano di andare avanti..altrimenti chiedi pure..
    Jupy

  5. #65
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    550
    Grande. Non saprei proprio come ringraziarti :-)
    Dunque... grazie alle tue puntuali delucidazioni ho realizzato queste due sub che funzionano alla grande ..dai un occhio alla forma:

    Private Sub Command5_Click()
    Dim stringa As String
    Dim totale As Integer
    Dim rsCalcola As New ADODB.Recordset, cmdCalcola As New ADODB.Command
    cmdCalcola.CommandText = "SELECT COUNT(*) AS TOTALE FROM STORICO WHERE ruota = 'BA' AND PRIMO LIKE ? OR SECONDO LIKE ? OR TERZO LIKE ? OR QUARTO LIKE ? OR QUINTO LIKE ?;"
    Dim prm As New ADODB.Parameter
    Dim cn As New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;Jet OLEDBatabase;"
    Set cmdCalcola.ActiveConnection = cn
    Set prm = cmdCalcola.CreateParameter("UNO", adChar, adParamInput, 2, "00")
    cmdCalcola.Parameters.Append prm
    Set prm = cmdCalcola.CreateParameter("DUE", adChar, adParamInput, 2, "00")
    cmdCalcola.Parameters.Append prm
    Set prm = cmdCalcola.CreateParameter("TRE", adChar, adParamInput, 2, "00")
    cmdCalcola.Parameters.Append prm
    Set prm = cmdCalcola.CreateParameter("QUATTRO", adChar, adParamInput, 2, "00")
    cmdCalcola.Parameters.Append prm
    Set prm = cmdCalcola.CreateParameter("CINQUE", adChar, adParamInput, 2, "00")
    cmdCalcola.Parameters.Append prm
    Set rsCalcola = cmdCalcola.Execute
    Do Until rsCalcola.EOF
    stringa = 1 & "%"
    cmdCalcola.Parameters("UNO").Value = stringa
    cmdCalcola.Parameters("UNO").Value = stringa
    cmdCalcola.Parameters("DUE").Value = stringa
    cmdCalcola.Parameters("TRE").Value = stringa
    cmdCalcola.Parameters("QUATTRO").Value = stringa
    cmdCalcola.Parameters("CINQUE").Value = stringa
    Set rsCalcola = cmdCalcola.Execute
    totale = rsCalcola("TOTALE")
    rsCalcola.MoveNext
    MsgBox totale
    Loop
    rsCalcola.Close
    End Sub

    Che conta tutti i numeri che iniziamo con 1 per la ruota di BARI. Ovvio che se ora voglio cambiare ruota usando la stessa query non mo resta che creare un altro parametro e passarlo al segnaposto ?

    per la seconda SUB senza usare ADO ho creato 10 TextBox usandole per visualizzare le 10 estrazioni per data :

    Private Sub Command2_Click()
    Dim cmd As New ADODB.Command, rs As New ADODB.Recordset
    cmd.CommandText = " SELECT * FROM STORICO WHERE data = ?"
    Dim param As New ADODB.Parameter
    Dim cn As New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;Jet OLEDBatabase;"
    Set cmd.ActiveConnection = cn
    Set param = cmd.CreateParameter("estrai", adWChar, adParamInput, 10, "")
    cmd.Parameters.Append param
    cmd.Parameters("estrai").Value = "22/05/2002"
    Set rs = cmd.Execute
    Do Until rs.EOF
    Text1(i).Text = rs("primo")
    Text1(i + 1).Text = rs("secondo")
    Text1(i + 2).Text = rs("terzo")
    Text1(i + 3).Text = rs("quarto")
    Text1(i + 4).Text = rs("quinto")
    i = i + 5
    rs.MoveNext
    Loop
    End Sub


    Per questa però volevo fare in modo che con altri due bottoni sia possibile spostarsi sulle 10 succ e cosi' via ..o sulle precedenti alla data corrente (per provare ho passato 22/05/2002). Il recordSet non contiene tutte le estrazioni quindi dovrei ricrearlo oppure fare una SELECT * from Storico e posi spostarmi sul recordset totale.Che mi consigli? :master:

    Ho notato dal testo che l'oggetto REcordSet (anche Connection e Command ) dispongono di molti metodi assovciati Filter, Sort, ecc Quale è miglior approccio in termini di prestazioni ? Lavorare con SQL o sfruttare questi ultimi?

    Sono daccordo per quanto riguarda il Design Ev. ...non ti permette di capire quello che succede. Meglio il codice.

    Grazie per l'indicazione del Winsocket ora faccio una ricerca da interner. Ho una rete a casa con 3 pc e volevo realizzare un semplice software per lo scambio di messaggi ...non tanto perchè mi serve ma per capire come funziona con VB6

    Ultima cosa i miei molti errori in compilazione derivano dal fatto che non riesco ad inserire i carattere & " ' eccc nelle query. Non risco a combinarli in maniera corretta ed il testo stranamente non dice niente o ancora ci devo arrivare

    Thanks a presto
    Bottaweb

  6. #66
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, sempre di corsa ma vediamo alcuni punti
    forse c'è qualcosa che mi sfugge.. tu dici "Che conta tutti i numeri che iniziamo con 1 per la ruota di BARI. "
    non è tanto esatto, quella qery non conta "tutti" i numeri, ma conta quanti record ci sono che contengono almeno un numero che inizia con 1, ad esempio se tu hai due estrazioni sulla ruota di bari:
    10 22 44 19 17
    41 03 57 12 89
    facendo un filtro con la tua query, sui campi che hanno un valore che inizia per 1, in questo caso non ottengo 4, ma 2, in quanto sono due i record che soddisfano le tue condizioni!
    spero di essermi spiegato...

    Per passare da un record all'altro, senza dover immettere ogni volta la data, allora devi caricarti tutta la tabella delle estrazioni e poi ti muovi con i metodi MoveNext/MovePrevious, altrimenti se vuoi immettere la data di volta in volta, ti conviene usare una query, magari parametrica e comunque ti sconsiglio di usare metodi come Filter o Sort, a meno che non sia una cosa sporadica, in quanto sono più lenti di una select

    Il carattere & in vb è il carattere di concatenamento in poche parole è come se usasi il + per concatenare le stringe..solo che il carattere & non equivoco come il + davanti a due stringhe che contengono numeri...

    Jupy

  7. #67
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    550
    afferato :-) mi sono creato un db + semplice per testare i metodi di recordSet ma mi da un errore :

    Private Sub Form_Load()
    cn.Mode = adModeShareDenyRead
    cn.CommandTimeout = 25
    cn.Open Adodc1.ConnectionString
    cn.CursorLocation = adUseServer
    Set rs.ActiveConnection = cn
    rs.Source = " SELECT * FROM CLIENTI"
    rs.Open
    End Sub

    mi da errore 3219 su rs.Moveprevious !! Ho provato tutti i tipi di cursori anche il dymamic ma non funziona :-((

    Private Sub cmdIndietro_Click()
    rs.MovePrevious
    Caricadati
    End Sub

    Private Sub cmdAvanti_Click()
    rs.MoveNext
    Caricadati
    End Sub



    ...ancora

    in fase di progettazione creo una connessione ad un database del tipo:

    Private Sub Form_Load()
    Dim cn As New Connection
    cn.Mode = adModeShareDenyRead
    cn.CommandTimeout = 25
    cn.Open Adodc1.ConnectionString
    End Sub

    Ora però vorrei inserire nel codice le sub relative agli eventi dell'oggetto connection ma dal menu questi non mi compaiono . Ad es se è un oggetto ADO allora a sinistra lo seleziono e a destra mi scelgo l'evento. Ma cn non mi compare a sinistra quindi non posso selezionare i vari metodi Willxxxx ..come fare li devo scrivere a mano?


    Bye e grazie
    Bottaweb

  8. #68
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Originariamente inviato da bottaweb
    afferato :-) mi sono creato un db + semplice per testare i metodi di recordSet ma mi da un errore :

    Private Sub Form_Load()
    cn.Mode = adModeShareDenyRead
    cn.CommandTimeout = 25
    cn.Open Adodc1.ConnectionString
    cn.CursorLocation = adUseServer
    Set rs.ActiveConnection = cn
    rs.Source = " SELECT * FROM CLIENTI"
    rs.Open
    End Sub

    mi da errore 3219 su rs.Moveprevious !! Ho provato tutti i tipi di cursori anche il dymamic ma non funziona :-((

    Private Sub cmdIndietro_Click()
    if rs.Bof
    rs.MovePrevious
    Caricadati
    End Sub

    Private Sub cmdAvanti_Click()
    rs.MoveNext
    Caricadati
    End Sub
    fai queste modifiche:
    codice:
    Private Sub cmdIndietro_Click()
       rs.MovePrevious
       if rs.Bof then
          rs.MoveFirst
       end if
       Caricadati
    End Sub
    
    Private Sub cmdAvanti_Click()
       rs.MoveNext
       if rs.Eof then
          rs.MoveLast
       end if
       Caricadati
    End Sub
    Logicamente prima di abilitare i bottoni Avanti e Indietro devi testare se il recorset contiene qualcosa, del tipo (una volta fatta la query di estrazione)
    codice:
    if rs.recordcount>0 then
       abilita i bottoni Avanti e Indietro
    end if
    ...ancora

    in fase di progettazione creo una connessione ad un database del tipo:

    Private Sub Form_Load()
    Dim cn As New Connection
    cn.Mode = adModeShareDenyRead
    cn.CommandTimeout = 25
    cn.Open Adodc1.ConnectionString
    End Sub

    Ora però vorrei inserire nel codice le sub relative agli eventi dell'oggetto connection ma dal menu questi non mi compaiono . Ad es se è un oggetto ADO allora a sinistra lo seleziono e a destra mi scelgo l'evento. Ma cn non mi compare a sinistra quindi non posso selezionare i vari metodi Willxxxx ..come fare li devo scrivere a mano?
    dichiara l'oggetto connection in questa maniera:
    codice:
    Dim WithEvents cn As ADODB.Connection
    Jupy

  9. #69
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    550
    Ciao Jupy ..ho dichiarato le due sub per scorrere il recordset ed ho capito perchè le dichiari cosi' ma continua a darmi il solito errore

    operazione non consentita nel contesto corrente 3219.

    mi è chiara anche la dichairazione Dim WithEvents cn As ADODB.Connection ma dopo averla inserita in questo modo:

    Option Explicit
    Dim i As Integer
    Dim Validate As Boolean
    Dim WithEvents cn As ADODB.Connection
    Dim WithEvents rs As ADODB.Recordset

    compaiono gli eventi di cui ho bisogno ma cn e rs non mi vengono visti in:

    Private Sub Form_Load()
    cn.CommandTimeout = 25
    cn.Open Adodc1.ConnectionString
    cn.CursorLocation = adUseServer
    ' L'oggetto Connection ha 9 eventi
    Set rs.ActiveConnection = cn
    rs.Source = " SELECT * FROM CLIENTI"
    rs.Open
    End Sub

    mi da errore 91 . Object Variable o With Block not Set
    Bottaweb

  10. #70
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    550
    Il secondo problema sembra essere risolto:

    Private Sub Form_Load()
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    cn.Mode = adModeShareDenyRead
    cn.CommandTimeout = 25
    cn.Open Adodc1.ConnectionString
    cn.CursorLocation = adUseServer
    Set rs.ActiveConnection = cn
    rs.Source = " SELECT * FROM CLIENTI"
    rs.Open
    If rs.RecordCount > 0 Then
    'abilita i bottoni Avanti e Indietro
    End If
    End Sub

    Ora funziona perchè in sostanza ho creato con NEW le due Istanze degli oggetti ?

    per quanto riguarda le due funzioni continuo ad avere problemi . Quando uso il bottone avanti ed eccedo la dimensione del recordset mi dice che il set di stringhe non supporta operazioni di recupero all'indietro . Penso che questo sia lo stesso problema per il quale l'operazione della sub dietro si blocca su rs.MovePrevious :master:
    Bottaweb

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.