Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Cercare record in database
Forum - Visual Basic 6 - Cercare record in database

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Ture_70 (Normal User)
Rookie


Messaggi: 30
Iscritto: 25/01/2009

Segnala al moderatore
Postato alle 16:08
Venerdì, 10/07/2009
Salve a tutti, stò creando un programma come per la gestione di una videoteca (il tipico programma per far pratica) e non riesco a cercare nel database. Scendo subito nel codice, ecco quello che utilizzo per connettermi al database:
Codice sorgente - presumibilmente VB.NET

  1. Option Explicit
  2. Dim cn As ADODB.Connection
  3. Dim rs As ADODB.Recordset
  4. Dim stringa As String



Per inserire i dati nel database uso:
Codice sorgente - presumibilmente VB.NET

  1. dim stringa as String
  2. stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
  3.     stringa = stringa & "C:\Users\utente\Desktop\videoteca.mdb"
  4.  
  5.     Set cn = New ADODB.Connection
  6.     Set rs = New ADODB.Recordset
  7.  
  8.     cn.Open stringa
  9.     rs.Open "Campeggiatori", cn, 3, 3
  10.  
  11.     rs.AddNew
  12.         rs("Nome") = txtNome.Text
  13.         rs("Autore") = txtAutore.Text
  14.         rs("Anno") = txtAnno.Text


La connessione e l' inserimento dei dati avviene con successo.

Ora, stò creando un' altra form con 3 textbox (TxtCerca e TxtAutore, TxtAnno) e 1 pulsante (CmdCerca).
Vorrei inserire il titolo nel TxtCerca, premere il CmdCerca e vedere nel TxtAutore e TxtAnno, l' autore e l' anno del film cercato (tramite il nome). Non ho idea di come fare, potreste aiutarmi?          

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 17:32
Venerdì, 10/07/2009
la query dovrebbe essere: SELECT autore, anno FROM tuo_db WHERE titolo = 'tuo titolo';

Mi spiace ma non ho mai lavorato con db da vb6 quindi non so come prelevare il risultato...

PM Quote
Avatar
Louis (Normal User)
Pro


Messaggi: 150
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 19:21
Venerdì, 10/07/2009
Ciao Turi,
prima di tutto ti consiglio di fare la connessione con Il DB in un modulo bas con una variabile globale, in modo che apri la con. e rs quando ti serve e subito dopo chiudi tutto. Quindi in un modulo bas:
Codice sorgente - presumibilmente VB.NET

  1. Public DataConnessione As String
  2. '-------------------------------
  3. Public Sub DataConnessione2()
  4.     On Error GoTo ErrHandler
  5. ' Stringa di connessione Senza password:
  6.     DataConnessione = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\TuoNomeDB.mdb;Persist Security Info=False;"
  7. ' Stringa di connessione Con password:
  8.     'DataConnessione = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\TuoNomeDB.mdb;Persist Security Info=False;Jet OLEDB:Database Password=TuaPassWord;"
  9.  
  10. ErrHandler:
  11.     If Err.Number <> 0 Then
  12.         MsgBox "Errore: " & Err.Number & " " & Err.Description & Chr(13) _
  13.         & "Errore  nella connessione al Data Base." & Chr(13) _
  14.         & "Riavviare il programma.", vbCritical, "......"
  15.         Err.Clear
  16.         Exit Sub
  17.     End If
  18. End Sub



Poi, per brevità, utilizzo un frammento di codice di un prog. già predisposto, che tu renderai compatibile con il tuo elaborato. La ricerca del cliente avviene prima per nome e cognome e poi per il solo cognome, nel caso in cui il nome non fosse registrato:
Quindi sempre in un modulo bas:
Codice sorgente - presumibilmente VB.NET

  1. ' Cerca i dati anagrafici di un cliente:
  2. Public Sub CercaDatiCliente()
  3.    
  4.     Dim Ogg5 As New ADODB.Command
  5.     Dim Cns5 As New ADODB.Connection
  6.     Dim RST5 As New ADODB.Recordset
  7.     Dim intDomCerca As Integer
  8.    
  9.     'Esegue la connessione con il DataBase TblAnagCliente (Tabella del DB):
  10.         With Cns5
  11.             .ConnectionString = DataConnessione 'Questa è la stringa di connessione del DB
  12.             .CursorLocation = adUseClient       'tipo di cursore
  13.             .Mode = adModeShareDenyNone         'nessuna limitazione
  14.             .CommandTimeout = 15
  15.             .Open
  16.         End With
  17.  
  18. ' Controlla che il Cliente Sia inserito già nel BD:
  19.     ' Selezione con il Nome e Cognome:
  20.     If Len(sNomeCL) > 0 And Len(sCognomrCL) > 0 Then
  21.         RST5.Source = "SELECT Nome, Cognome FROM TblAnagCliente WHERE Nome='" & Replace(sNomeCL, "'", "''") & "' And Cognome='" & Replace(sCognomrCL, "'", "''") & "'"
  22.         RST5.Open , Cns5, adOpenDynamic, adLockOptimistic
  23.         ' Selezione con il solo Cognome:
  24.         ElseIf Len(sNomeCL) = 0 And Len(sCognomrCL) > 0 Then
  25.         RST5.Source = "SELECT Nome, Cognome FROM TblAnagCliente WHERE Cognome='" & Replace(sCognomrCL, "'", "''") & "'"
  26.         RST5.Open , Cns5, adOpenDynamic, adLockOptimistic
  27.     End If
  28.    
  29.     ' Il Cliente è presente nel DB:
  30.         If RST5.EOF = False And RST5.BOF = False Then
  31.             MsgBox "Il cliente:" & Space(1) & sNomeCL & Space(1) & sCognomrCL & Chr(13) _
  32.             & "è già registrato nel database." & Chr(13) _
  33.             & "Di seguito sono esposti i dati registrati.", vbInformation + vbOKOnly, "......."
  34.            
  35.             ' Chiude il RecordSet
  36.             RST5.Close
  37.             ' Visualizza la FrmAnCliMod:
  38.             FrmAnCliMod.Show
  39.    
  40.     ' Visualizza i dati contenuti nel DB - FrmAnCliMod - per eventuali modifiche:
  41.         ' Selezione con il Nome e Cognome:
  42.         If Len(sNomeCL) > 0 And Len(sCognomrCL) > 0 Then
  43.             RST5.Source = "SELECT Titolo, Nome, Cognome, CodFisc, Via, NomeVia, Ncivico, Cap, Citta, Provincia, Telefono, Cellulare, Fax, Email FROM TblAnagCliente WHERE Nome='" & Replace(sNomeCL, "'", "''") & "' And Cognome='" & Replace(sCognomrCL, "'", "''") & "'"
  44.             RST5.Open , Cns5, adOpenDynamic, adLockOptimistic
  45.             ' Selezione con il solo Cognome:
  46.             ElseIf Len(sNomeCL) = 0 And Len(sCognomrCL) > 0 Then
  47.             RST5.Source = "SELECT Titolo, Nome, Cognome, CodFisc, Via, NomeVia, Ncivico, Cap, Citta, Provincia, Telefono, Cellulare, Fax, Email FROM TblAnagCliente WHERE Cognome='" & Replace(sCognomrCL, "'", "''") & "'"
  48.             RST5.Open , Cns5, adOpenDynamic, adLockOptimistic
  49.         End If
  50.             FrmAnCliMod.TxtCt0m.Text = RST5("Titolo")
  51.             FrmAnCliMod.TxtCt1m.Text = RST5("Nome")
  52.             FrmAnCliMod.TxtCt2m.Text = RST5("Cognome")
  53.             FrmAnCliMod.TxtCt3m.Text = RST5("CodFisc")
  54.             FrmAnCliMod.TxtCt4mb.Text = RST5("Via")
  55.             FrmAnCliMod.TxtCt4m.Text = RST5("NomeVia")
  56.             FrmAnCliMod.TxtCt5m.Text = RST5("Ncivico")
  57.             FrmAnCliMod.TxtCt6m.Text = RST5("Cap")
  58.             FrmAnCliMod.TxtCt7m.Text = RST5("Citta")
  59.             FrmAnCliMod.TxtCt7mb.Text = RST5("Provincia")
  60.             FrmAnCliMod.TxtCt8m.Text = RST5("Telefono")
  61.             FrmAnCliMod.TxtCt9m.Text = RST5("Cellulare")
  62.             FrmAnCliMod.TxtCt10m.Text = RST5("Fax")
  63.             FrmAnCliMod.TxtCt11m.Text = RST5("Email")
  64.                
  65.             'Chiude e cancella il recordSet:
  66.             If GetState(RST5.State) = "adStateOpen" Then
  67.                 RST5.Close
  68.                 Set RST5 = Nothing
  69.             End If
  70.             'Chiude la connessione:
  71.             If GetState(Cns5.State) = "adStateOpen" Then
  72.                 Cns5.Close
  73.                 Set Cns5 = Nothing
  74.             End If
  75.             Exit Sub
  76.         End If
  77.    
  78.         If RST5.EOF = True And RST5.BOF = True Then
  79.             ' Il Cliente Non è presente nel DB, viene inserito:
  80.             intDomCerca = MsgBox("Il cliente:" & Space(1) & sNomeCL & Space(1) & sCognomrCL & Chr(13) _
  81.             & "non è ancora registrato, volete procedere alla registrazione?" & Chr(13) _
  82.             & "Click su OK per registrare, su Annulla per chiudere il modulo.", vbInformation + vbOKCancel, "....")
  83.             ' Pulsante OK:
  84.             If intDomCerca = 1 Then
  85.                 ' Visualizza la FrmAnagCliente:
  86.                 FrmAnagCliente.Show
  87.             End If
  88.         End If
  89.  
  90. 'Chiude e cancella il recordSet:
  91.     If GetState(RST5.State) = "adStateOpen" Then
  92.         RST5.Close
  93.         Set RST5 = Nothing
  94.     End If
  95. 'Chiude la connessione:
  96.     If GetState(Cns5.State) = "adStateOpen" Then
  97.         Cns5.Close
  98.         Set Cns5 = Nothing
  99.     End If
  100.  
  101. End Sub


Come vedi è importante chiudere la connessione ed eliminare il rs in quanto utilizzano molte risorse e poi se non fai la procedura predetta quando esci dal prog. potrebbero sorgere difficoltà.
Spero che ti sia utile.
:k:

PM Quote
Avatar
Ture_70 (Normal User)
Rookie


Messaggi: 30
Iscritto: 25/01/2009

Segnala al moderatore
Postato alle 1:05
Sabato, 11/07/2009
Stò a poco a poco modificando parte del codice..ecco quello che ho scritto fino ad ora:
Codice sorgente - presumibilmente VB.NET

  1. Option Explicit
  2. Dim cn As ADODB.Connection
  3. Dim rs As ADODB.Recordset
  4. Dim stringa As String
  5.  
  6. Private Sub Command1_Click()
  7. Set cn = New ADODB.Connection
  8. Set rs = New ADODB.Recordset
  9.    
  10.    
  11. If txtCerca = "" Then
  12.    MsgBox "Inserisci il numero del documento da cercare.", vbCritical, "ERRORE"
  13. ElseIf txtCerca.Text <> "" Then
  14.    rs.Source = "Select Titolo from Video where Titolo = txtCerca.Text"
  15.    rs.Open , cn, adOpenDynamic, adLockOptimistic
  16. End If
  17.  
  18. Set cn = Nothing
  19. Set rs = Nothing
  20. End Sub


Però all' esecuzione mi dice:
"Connessione chiusa o non valida in questo contesto. Impossibile utilizzarla per eseguire l' operazione."

e la riga che in cui senga l' errore è
Codice sorgente - presumibilmente Plain Text

  1. rs.Open , cn, adOpenDynamic, adLockOptimistic



(grazie per l' aiuto sia a te che a GrG)

PM Quote
Avatar
Louis (Normal User)
Pro


Messaggi: 150
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 8:55
Sabato, 11/07/2009
Ciao,
evidenzia l'errore perché non hai aperto la connessione, come peraltro ti avevo già indicato:

Codice sorgente - presumibilmente VB.NET

  1. Option Explicit
  2. Private Sub Command1_Click()
  3.    
  4.     Dim Cn As New ADODB.Connection
  5.     Dim rs As New ADODB.Recordset
  6.    
  7.     'Esegue la connessione con il DataBase:
  8.      With Cn
  9.         .ConnectionString = DataConnessione     'Questa è la stringa di connessione del DB
  10.         .CursorLocation = adUseClient           'Questo é il tipo di cursore
  11.         .Mode = adModeShareDenyNone             'Nessuna limitazione
  12.         .CommandTimeout = 15
  13.         .Open
  14.     End With
  15.          
  16.     If Len(txtCerca) = 0 Then
  17.        MsgBox "Inserisci il numero del documento da cercare.", vbCritical, "ERRORE"
  18.     ElseIf Len(txtCerca.Text) > 0 Then
  19.        rs.Source = "Select Titolo FROM Video WHERE Titolo='" & Replace(txtCerca.Text, "'", "''") & "'"
  20.        rs.Open , Cn, adOpenDynamic, adLockOptimistic
  21.     End If
  22.    
  23.     'Chiude e cancella:
  24.         If Cn.state = adStateOpen Then
  25.             Cn.Close
  26.             Set Cn = Nothing
  27.             rs.Close
  28.             Set rs = Nothing
  29.         End If
  30. End Sub




PM Quote
Avatar
Ture_70 (Normal User)
Rookie


Messaggi: 30
Iscritto: 25/01/2009

Segnala al moderatore
Postato alle 9:08
Sabato, 11/07/2009
E ora mi segna errore in
Codice sorgente - presumibilmente Plain Text

  1. .open



Scusami per la negligenza, comunqe....ecco cosa ho messo:

modulo bas:
Codice sorgente - presumibilmente VB.NET

  1. Public DataConnessione As String
  2.  
  3. Public Sub DataConnessione2()
  4.     On Error GoTo ErrHandler
  5.     DataConnessione = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Users\utente\Desktop\Video.mdb;Persist Security Info=False;"
  6.  
  7. ErrHandler:
  8.     If Err.Number <> 0 Then
  9.         MsgBox "Errore: " & Err.Number & " " & Err.Description & Chr(13) _
  10.         & "Errore  nella connessione al Data Base." & Chr(13) _
  11.         & "Riavviare il programma.", vbCritical, "......"
  12.         Err.Clear
  13.         Exit Sub
  14.     End If
  15. End Sub



Nella form di ricerca:
Codice sorgente - presumibilmente VB.NET

  1. Option Explicit
  2. Private Sub Command1_Click()
  3.      
  4.     Dim Cn As New ADODB.Connection
  5.     Dim rs As New ADODB.Recordset
  6.      
  7.     'Esegue la connessione con il DataBase:
  8.      With Cn
  9.         .ConnectionString = DataConnessione     'Questa è la stringa di connessione del DB
  10.         .CursorLocation = adUseClient           'Questo é il tipo di cursore
  11.         .Mode = adModeShareDenyNone             'Nessuna limitazione
  12.         .CommandTimeout = 15
  13.         .Open
  14.     End With
  15.          
  16.     If Len(txtCerca) = 0 Then
  17.        MsgBox "Inserisci il titolo da cercare.", vbCritical, "ERRORE"
  18.     ElseIf Len(txtCerca.Text) > 0 Then
  19.        rs.Source = "Select Documento Numero FROM Campeggiatori WHERE Documento Numero ='" & Replace(txtCerca.Text, "'", "''") & "'"
  20.        rs.Open , Cn, adOpenDynamic, adLockOptimistic
  21.     End If
  22.      
  23.     'Chiude e cancella:
  24.         If Cn.State = adStateOpen Then
  25.             Cn.Close
  26.             Set Cn = Nothing
  27.             rs.Close
  28.             Set rs = Nothing
  29.         End If
  30. End Sub



Segna errore in .open  
grazie ancora:hail:

PM Quote
Avatar
Louis (Normal User)
Pro


Messaggi: 150
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 12:54
Sabato, 11/07/2009
Ciao,
capisci che senza aver sotto mano il DB é difficile seguirti. Prova a mettere un punto d'interruzione su Public Sub DataConnessione2() in modo tale da seguire con F8 (passo a passo) tutta la procedura sino al punto d'errore; Visto che non apre la connessione forse c'é quancosa nella Sub predetta.  

Ultima modifica effettuata da Louis il 11/07/2009 alle 13:21
PM Quote
Avatar
Ture_70 (Normal User)
Rookie


Messaggi: 30
Iscritto: 25/01/2009

Segnala al moderatore
Postato alle 15:07
Sabato, 11/07/2009
Ho ovviato al problema scrivendo la stringa (la stessa uguale identica presente nel modulo bas in .ConnectionString quindi ho:
Codice sorgente - presumibilmente Delphi

  1. With cn
  2.         .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Users\utente\Desktop\video.mdb"           'Questa è la stringa di connessione del DB
  3.        .CursorLocation = adUseClient           'Questo é il tipo di cursore
  4.         .Mode = adModeShareDenyNone             'Nessuna limitazione
  5.        .CommandTimeout = 15
  6.        .Open
  7.    End With
  8.        
  9.    If Len(txtCerca) = 0 Then
  10.       MsgBox "Inserisci il titolo da cercare.", vbCritical, "ERRORE"
  11.    ElseIf Len(txtCerca.Text) > 0 Then
  12.       rs.Source = "Select Titolo FROM Video WHERE Titolo ='" & Replace(txtCerca.Text, "'", "''") & "'"
  13.        rs.Open , cn, adOpenDynamic, adLockOptimistic
  14.     End If



La connessione visto che non da errori ritengo vada in porto, però ora mi da un errore qui:
Codice sorgente - presumibilmente Plain Text

  1. rs.Open , cn, adOpenDynamic, adLockOptimistic



Dice che manca un operatore....

PM Quote
Avatar
Louis (Normal User)
Pro


Messaggi: 150
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 20:49
Sabato, 11/07/2009
Codice sorgente - presumibilmente VB.NET

  1. If Len(txtCerca) = 0 Then
  2.     MsgBox "Inserisci il titolo da cercare.", vbCritical, "ERRORE"
  3.     ElseIf Len(txtCerca.Text) > 0 Then
  4.     rs.Source = "Select Titolo FROM Video WHERE Titolo='" & Replace(txtCerca.Text, "'", "''") & "'"
  5.     rs.Open , cn, adOpenDynamic, adLockOptimistic
  6. End If


E' molto strano, a mio avviso non apri la connessione.
Per individuare il nome delle tabelle del DB ti consiglio di nominarle con Tbl, cioé TblVideo così é immediata la differenza tra i Nomi dei Campi e quelli delle Tbl.
Per quanto riguarda il non funzionamento della stringa di connessione hai provato a fare come ti ho detto per individuare l'errore ?

Ultima modifica effettuata da Louis il 11/07/2009 alle 20:53
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo