Uso degli ADO in Visual Basic 6 di Nicola Pietralunga (Nona parte)
Presentiamo in queste pagine il tutorial relativo all'uso degli ADO in Visual Basic 6.0
scritto da Nicola Pietralunga l'8 Aprile 1999.
Chi volesse porre domande sull'argomento può rivolgersi direttamente all'Autore di cui riportiamo
l'indirizzo email: nicola@omeganet.it oppure inserire
un annuncio nella rubrica 'Chiedilo agli esperti'.
Come si legge dal comunicato dell'Autore, la riproduzione del testo e dei files che lo accompagnano
deve essere necessariamente preceduta dall'autorizzazione dello stesso, tranne naturalmente nel caso
di uso personale. |
La navigazione tra i record
La navigazione tra i record che compongono il Recordset avviene con i pulsanti appositamente predisposti. Tutti i pulsanti formano un Array di controlli con lo stesso nome (cmdAzione); per evitare l’utilizzo di "numeri magici" (ovvero numeri che sono difficilmente interpretabili quando vengono usati nel codice) ho provveduto a definire le opportune costanti nella sezione Dichiarazioni del codice della Form.
Const CPRIMO = 0
Const CULTIMO = 1
Const CINDIETRO = 2
Const CAVANTI = 3
Const CNUOVO = 4
Const CELIMINA = 5
Const CTROVA = 6
Const CRIGENERA = 7
|
Così sarà possibile utilizzare la costante al posto del numero, rendendo il codice molto più leggibile.
I primi quattro pulsanti da sinistra servono per gestire la navigazione in senso stretto (vai al primo/ultimo record, vai avanti, vai indietro).
Tutte le azioni generate dalla pressione di un pulsante vengono gestite dalla routine cmdAzione_Click.
Anzitutto, oltre alla dichiarazione di un paio di variabili, è necessario accertarsi di due cose: se non esiste alcun record nel Recordset solo i pulsanti Nuovo e Rigenera devono dar luogo all’azione relativa; inoltre se il record corrente risulta modificato (blIsDirty è True) bisogna salvarlo, a meno che non sia stato premuto il pulsante Elimina.
Private Sub cmdAzione_Click(Index As Integer)
Dim strMessaggio As String, bkmTemporaneo As Variant
If rsProgrammatori.BOF And rsProgrammatori.EOF And Not (Index = CNUOVO Or _
Index = CRIGENERA) Then Exit Sub
If blIsDirty And Not Index = CELIMINA Then
strMessaggio = "Record modificato!" & vbCrLf & "Salvare le modifiche nel DataBase?"
If MsgBox(strMessaggio, vbYesNo + vbExclamation, "Salvataggio") = vbYes Then
ScriviNelDb
End If
End If
|
E’ possibile poi passare alle azioni per ogni singolo pulsante. Tutto il codice è contenuto in un Select Case sull’indice del pulsante premuto; prima ancora del Select Case utilizzo l’istruzione With rsProgrammatori per rendere il codice più leggibile ed efficiente (il riferimento verrà risolto solo una volta per tutte le numerose istruzioni che coinvolgono il Recordset).
With rsProgrammatori
Select Case Index
Case CPRIMO 'Va sul primo record
.MoveFirst
Case CULTIMO 'Va sull'ultimo record
.MoveLast
Case CINDIETRO 'Va sul record precedente
.MovePrevious
If .BOF Then .MoveFirst
Case CAVANTI
.MoveNext
If .EOF Then .MoveLast
Case CRIGENERA 'Estrae nuovamente i record dal DataBase
.Requery
|
Come visto anche in precedenza, nel caso degli spostamenti indietro e avanti, bisogna controllare di non aver passato il primo o l’ultimo record del Recordset, nel qual caso occorre rimettersi sul primo/ultimo record.
Il pulsante Rigenera determina una nuova estrazione dei record dal DataBase per effetto del metodo Requery; ciò risulta utile per visualizzare inserimenti effettuati da altri (le modifiche vengono già mostrate essendo un recordset di tipo Keyset) o per rimettere in ordine i record in caso di inserimento di nuovi record da parte dell’utente; infatti i nuovi record inseriti vengono accodati al Recordset e perciò possono non rispettare l’ordine alfabetico.
La parte di navigazione è abbastanza semplice e non è molto diversa da quella che dovremmo programmare usando i DAO. Vediamo adesso gli inserimenti e le modifiche che sono più interessanti, in quanto utilizzano delle caratteristiche più specifiche di ADO. |
Indietro (Associazione controlli/campi) | Indice | Avanti (Inserimenti, cancellazioni, modifiche)
|