Prima di aprire tutte le varie connection o recordset fai questo:
Set Variabile = New Tipo
Per esempio:
Set MyConn = New ADODB.Connection
Posso poi farti un'osservazione:
Tu praticamente apri il database (la connessione) ogni volta che premi uno dei 4 tasti, il che non va tanto bene (spero tu la connessione la chiuda almeno) sia per motivi di tempo che di integrità del database stesso. Poi cosi' facendo il recordset resta fermo al primo record sempre...
La SelectDB chiamala nel Form_Load e la CloseDB nel Form_Unload .
Nella Private Sub Avanti_Click() metti rec.MoveNext
Poi ci sono anche MovePrevious (precedente) MoveFirst (Primo) e MoveLast (ultimo)
Devi mettere dei controlli per vedere che il recordset non sia arrivato alla fine o all'inizio (ADO è stupido e ti lascia fare ma poi va in errore) quindi quando fai MovePrevious o MoveNext devi controllare le rispettive Proprietà BOF ed EOF di rec
al posto di rec.Fields(1).Value puoi scrivere anche rec.Fields("nome_del_campo").Value è molto più leggibile e non ti incasini...
Invece di riempire ogni volta i campi (modalità unbound) puoi passare alla bound (si arrangia VB a riempire tutti i campi) Per fare questo devi impostare la proprietà "DataField" delle textbox che ti interessano siano legate con il recordset con il nome dei relativi campi. Per esempio: Text1.DataField = "NomeDelCampo 1"... e così via.
Poi (a run time - cioè attraverso codice nel Form_Load della maschera) imposti la proprietà "DataSource" al recordset. Per esempio:
Set Text1.DataSource = rec
Set Text2.DataSource = rec
...
Quando ti muovi di record i textbox ti seguiranno
Puoi mettere anche check, datacombo, datalist, ...
Ah... quando chiudi tutti gli oggetti impostali anche a nothing...
Es.
Set MyConn = Nothing
Se hai ancora problemi non esitare a postare!!!