Connessione al database usando Visual Basic? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Uso degli ADO in Visual Basic 6 di Nicola Pietralunga (Ottava 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.


L’associazione controlli-campi

Nell’esempio in esame l’associazione tra i dati contenuti nei campi e i valori mostrati nei controlli sulla form è realizzata interamente a mano.
Il campo un po’ più problematico e che necessita di una preparazione è quello che contiene, per ciascun programmatore, il codice del linguaggio utilizzato di preferenza. Ovviamente all’utilizzatore non si può presentare uno scarno codice ma egli deve poter scegliere il linguaggio sulla base della descrizione (la scelta avviene utilizzando una Combobox); perciò bisogna eseguire una conversione del codice nella descrizione al momento della lettura dal DataBase e in senso contrario prima della scrittura.
Anzitutto, sempre nell’evento Form_Load viene richiamata Sub TrovaLinguaggi() che mette le descrizioni nella Combobox e i Codici in un Array di appoggio strLinguaggi() definito a livello di modulo. Ciò viene fatto utilizzando un Recordset temporaneo in sola lettura.


Private Sub TrovaLinguaggi()
Dim rsTemporaneo As ADODB.Recordset, i As Long
Set rsTemporaneo = New ADODB.Recordset
rsTemporaneo.CursorLocation = adUseClient
rsTemporaneo.Open "SELECT Codice, Descrizione FROM Linguaggi" _
& "ORDER BY Descrizione;", cnAdoTutor, adOpenStatic, adLockReadOnly, adCmdText
rsTemporaneo.MoveLast
ReDim strLinguaggi(rsTemporaneo.RecordCount - 1) As String
rsTemporaneo.MoveFirst
For i = 0 To rsTemporaneo.RecordCount - 1
strLinguaggi(i) = rsTemporaneo!Codice & ""
cmbLinguaggio.AddItem rsTemporaneo!Descrizione & ""
rsTemporaneo.MoveNext
Next i
End Sub

In questo modo alla proprietà ListIndex della Combo corrisponderà l’indice dell’Array e la trasformazione dei codici in descrizioni e viceversa sarà molto semplice.
Per terminare la preparazione della form prima della visualizzazione, è necessario lanciare la routine che provvede all’aggiornamento dei controlli sulla form con i valori nel DataBase (LeggiDalDb()).


Private Sub LeggiDalDb()
Dim i As Integer
For i = 0 To 9
txtCampo(i) = rsProgrammatori.Fields(i) & ""
Next i
For i = 0 To cmbLinguaggio.ListCount - 1
If strLinguaggi(i) = rsProgrammatori!LinguaggioPrincipale Then
cmbLinguaggio.ListIndex = i
End If
Next i
blIsDirty = False
End Sub

Per aggiornare i TextBox si usa semplicemente un ciclo (da 0 a 9), poiché essi sono nello stesso ordine dei campi. Ai campi di testo viene aggiunta una stringa vuota perché, se nel record corrente valgono Null, l’istruzione non genera un errore.
Successivamente viene operato un ciclo sull’Array che contiene i codici dei linguaggi (da 0 fino al totale dei linguaggi meno 1 che è restituito dalla proprietà ListCount della Combo), quando viene trovato il valore che è quello del Record corrente si setta la proprietà ListIndex della Combo al valore dell’indice dell’Array.
Infine si mette a False la variabile blIsDirty, definita a livello di modulo, che indica se i valori dei controlli della Form devono essere salvati nel DataBase essendo stati modificati rispetto a quelli originari.
La maschera è finalmente pronta per essere mostrata all’operatore. La routine LeggiDalDb() verrà utilizzata anche successivamente ogni volta che ci sarà uno spostamento su un record diverso, in modo da aggiornare i controlli sulla Form.
In particolare, vorrei far notare subito che nell’evento Click della Combobox ed in quello Change dei Textbox viene settata a True la variabile blIsDirty. In questo modo, quando verrà richiesto uno spostamento dal record corrente, si saprà che prima di eseguirlo i valori della maschera dovranno essere salvati, in quanto modificati.


Private Sub cmbLinguaggio_Click()
If Not blIsDirty Then blIsDirty = True
End Sub
Private Sub txtCampo_Change(Index As Integer)
If Not blIsDirty Then blIsDirty = True
End Sub

Indietro (Aprire il recordset) | Indice | Avanti (Navigare il recordset)



Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it