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:
Public DataConnessione As String
'-------------------------------
Public Sub DataConnessione2()
On Error GoTo ErrHandler
' Stringa di connessione Senza password:
DataConnessione = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\TuoNomeDB.mdb;Persist Security Info=False;"
' Stringa di connessione Con password:
'DataConnessione = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\TuoNomeDB.mdb;Persist Security Info=False;Jet OLEDB:Database Password=TuaPassWord;"
ErrHandler:
If Err.Number <> 0 Then
MsgBox "Errore: " & Err.Number & " " & Err.Description & Chr(13) _
& "Errore nella connessione al Data Base." & Chr(13) _
& "Riavviare il programma.", vbCritical, "......"
Err.Clear
Exit Sub
End If
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:
' Cerca i dati anagrafici di un cliente:
Public Sub CercaDatiCliente()
Dim Ogg5 As New ADODB.Command
Dim Cns5 As New ADODB.Connection
Dim RST5 As New ADODB.Recordset
Dim intDomCerca As Integer
'Esegue la connessione con il DataBase TblAnagCliente (Tabella del DB):
With Cns5
.ConnectionString = DataConnessione 'Questa è la stringa di connessione del DB
.CursorLocation = adUseClient 'tipo di cursore
.Mode = adModeShareDenyNone 'nessuna limitazione
.CommandTimeout = 15
.Open
End With
' Controlla che il Cliente Sia inserito già nel BD:
' Selezione con il Nome e Cognome:
If Len(sNomeCL) > 0 And Len(sCognomrCL) > 0 Then
RST5.Source = "SELECT Nome, Cognome FROM TblAnagCliente WHERE Nome='" & Replace(sNomeCL, "'", "''") & "' And Cognome='" & Replace(sCognomrCL, "'", "''") & "'"
RST5.Open , Cns5, adOpenDynamic, adLockOptimistic
' Selezione con il solo Cognome:
ElseIf Len(sNomeCL) = 0 And Len(sCognomrCL) > 0 Then
RST5.Source = "SELECT Nome, Cognome FROM TblAnagCliente WHERE Cognome='" & Replace(sCognomrCL, "'", "''") & "'"
RST5.Open , Cns5, adOpenDynamic, adLockOptimistic
End If
' Il Cliente è presente nel DB:
If RST5.EOF = False And RST5.BOF = False Then
MsgBox "Il cliente:" & Space(1) & sNomeCL & Space(1) & sCognomrCL & Chr(13) _
& "è già registrato nel database." & Chr(13) _
& "Di seguito sono esposti i dati registrati.", vbInformation + vbOKOnly, "......."
' Chiude il RecordSet
RST5.Close
' Visualizza la FrmAnCliMod:
FrmAnCliMod.Show
' Visualizza i dati contenuti nel DB - FrmAnCliMod - per eventuali modifiche:
' Selezione con il Nome e Cognome:
If Len(sNomeCL) > 0 And Len(sCognomrCL) > 0 Then
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, "'", "''") & "'"
RST5.Open , Cns5, adOpenDynamic, adLockOptimistic
' Selezione con il solo Cognome:
ElseIf Len(sNomeCL) = 0 And Len(sCognomrCL) > 0 Then
RST5.Source = "SELECT Titolo, Nome, Cognome, CodFisc, Via, NomeVia, Ncivico, Cap, Citta, Provincia, Telefono, Cellulare, Fax, Email FROM TblAnagCliente WHERE Cognome='" & Replace(sCognomrCL, "'", "''") & "'"
RST5.Open , Cns5, adOpenDynamic, adLockOptimistic
End If
FrmAnCliMod.TxtCt0m.Text = RST5("Titolo")
FrmAnCliMod.TxtCt1m.Text = RST5("Nome")
FrmAnCliMod.TxtCt2m.Text = RST5("Cognome")
FrmAnCliMod.TxtCt3m.Text = RST5("CodFisc")
FrmAnCliMod.TxtCt4mb.Text = RST5("Via")
FrmAnCliMod.TxtCt4m.Text = RST5("NomeVia")
FrmAnCliMod.TxtCt5m.Text = RST5("Ncivico")
FrmAnCliMod.TxtCt6m.Text = RST5("Cap")
FrmAnCliMod.TxtCt7m.Text = RST5("Citta")
FrmAnCliMod.TxtCt7mb.Text = RST5("Provincia")
FrmAnCliMod.TxtCt8m.Text = RST5("Telefono")
FrmAnCliMod.TxtCt9m.Text = RST5("Cellulare")
FrmAnCliMod.TxtCt10m.Text = RST5("Fax")
FrmAnCliMod.TxtCt11m.Text = RST5("Email")
'Chiude e cancella il recordSet:
If GetState(RST5.State) = "adStateOpen" Then
RST5.Close
Set RST5 = Nothing
End If
'Chiude la connessione:
If GetState(Cns5.State) = "adStateOpen" Then
Cns5.Close
Set Cns5 = Nothing
End If
Exit Sub
End If
If RST5.EOF = True And RST5.BOF = True Then
' Il Cliente Non è presente nel DB, viene inserito:
intDomCerca = MsgBox("Il cliente:" & Space(1) & sNomeCL & Space(1) & sCognomrCL & Chr(13) _
& "non è ancora registrato, volete procedere alla registrazione?" & Chr(13) _
& "Click su OK per registrare, su Annulla per chiudere il modulo.", vbInformation + vbOKCancel, "....")
' Pulsante OK:
If intDomCerca = 1 Then
' Visualizza la FrmAnagCliente:
FrmAnagCliente.Show
End If
End If
'Chiude e cancella il recordSet:
If GetState(RST5.State) = "adStateOpen" Then
RST5.Close
Set RST5 = Nothing
End If
'Chiude la connessione:
If GetState(Cns5.State) = "adStateOpen" Then
Cns5.Close
Set Cns5 = Nothing
End If
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.