Collezione Fields
La collezione Fields è una delle raccolte intrinseche di ADO. Una raccolta è un set ordinato di elementi a cui è possibile fare riferimento come unità. Per altre informazioni sulle raccolte ADO, vedere Il modello a oggetti ADO.
L'insieme Fields contiene un oggetto Field per ogni campo (colonna) nel Recordset. Analogamente a tutte le raccolte ADO, include le proprietà Count e Item, nonché i metodi Append e Refresh. Include anche CancelUpdate, Delete, Resynce Update metodi, che non sono disponibili per altre raccolte ADO.
Analisi della Collezione Fields
Si consideri la raccolta di Fields dell'esempio Recordset introdotta in questa sezione. Il recordset di esempio è stato derivato dall'istruzione SQL
SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7
Pertanto, si noterebbe che l'insieme Recordset Fields contiene tre campi.
'BeginWalkFields
Dim objFields As ADODB.Fields
Dim intLoop As Integer
objRs.Open strSQL, strConnStr, adOpenForwardOnly, adLockReadOnly, adCmdText
Set objFields = objRs.Fields
For intLoop = 0 To (objFields.Count - 1)
Debug.Print objFields.Item(intLoop).Name
Next
'EndWalkFields
Questo codice determina semplicemente il numero di oggetti Field nell'insieme Fields utilizzando la proprietà Count e scorre l'insieme, restituendo il valore della proprietà Name per ogni oggetto Field. È possibile usare molte altre proprietà Field per ottenere informazioni su un campo. Per ulteriori informazioni sull'interrogazione di un campo , vedere l'oggetto Campo.
Conteggio colonne
Come previsto, la proprietà Count restituisce il numero effettivo di oggetti Field nell'insieme Fields. Poiché la numerazione per i membri di una raccolta inizia con zero, è consigliabile eseguire sempre cicli di codice che iniziano con il membro zero e terminano con il valore della proprietà count meno 1. Se si utilizza Microsoft Visual Basic e si desidera scorrere i membri di una raccolta senza controllare la proprietà Count, utilizzare il comando For Each...Next.
Se la proprietà Count è zero, nell'insieme non sono presenti oggetti.
Arrivare al campo
Come per qualsiasi insieme ADO, la proprietà Item è la proprietà predefinita dell'insieme. Restituisce il singolo oggetto Field specificato dal nome o dall'indice passato. Di conseguenza, le istruzioni seguenti sono equivalenti per l'esempio Recordset:
objField = objRecordset.Fields.Item("ProductID")
objField = objRecordset.Fields("ProductID")
objField = objRecordset.Fields.Item(0)
objField = objRecordset.Fields(0)
Se questi metodi sono equivalenti, qual è il migliore? Dipende. L'uso di un indice per recuperare un Field dalla raccolta è più veloce perché accede direttamente al Field senza dover eseguire una ricerca di stringhe. D'altra parte, l'ordine di Fields all'interno dell'insieme deve essere noto e, se l'ordine cambia, il riferimento all'indice del campo di deve essere modificato in ogni occorrenza. Anche se leggermente più lento, l'uso del nome del campo è più flessibile perché non dipende dall'ordine dei campi nella collezione.
Utilizzo del metodo Refresh
A differenza di altre raccolte ADO, l'utilizzo del metodo Refresh nell'insieme Fields non ha alcun effetto visibile. Per recuperare le modifiche dalla struttura di database sottostante, è necessario utilizzare il metodo Requery oppure se l'oggetto recordset non supporta i segnalibri, il metodo MoveFirst, che causerà di nuovo l'esecuzione del comando sul provider.
Aggiunta di campi a un insieme di record
Il metodo Append viene utilizzato per aggiungere campi a un Recordset.
È possibile utilizzare il metodo Append per creare a livello di codice un oggetto Recordset senza aprire una connessione a un'origine dati. Si verificherà un errore di run-time se il metodo Append viene chiamato sull'insieme Fields di un Recordset aperto o su un Recordset in cui è stata impostata la proprietà ActiveConnection. È possibile aggiungere campi solo a un recordset che non è aperto e non è ancora stato connesso a un'origine dati. Tuttavia, per specificare i valori per i campi appena accodati, è necessario aprire prima il recordset .
Gli sviluppatori hanno spesso bisogno di un luogo per archiviare temporaneamente alcuni dati o vogliono che alcuni dati funzionino come se provenissero da un server in modo da poter partecipare al data binding in un'interfaccia utente. ADO (in combinazione con il servizio cursore Microsoft per OLE DB) consente allo sviluppatore di compilare un oggetto Recordset vuoto specificando le informazioni sulla colonna e chiamando Open. Nell'esempio seguente vengono aggiunti tre nuovi campi a un nuovo oggetto Recordset . Viene quindi aperto il recordset, vengono aggiunti due nuovi record e il recordset viene salvato in modo permanente in un file. Per altre informazioni sulla persistenza del recordset di, vedere Aggiornamento e Salvataggio Permanente dei Dati.
'BeginFabricate
Dim objRs As ADODB.Recordset
Set objRs = New ADODB.Recordset
With objRs.Fields
.Append "StudentID", adChar, 11, adFldUpdatable
.Append "FullName", adVarChar, 50, adFldUpdatable
.Append "PhoneNmbr", adVarChar, 20, adFldUpdatable
End With
With objRs
.Open
.AddNew
.Fields(0) = "123-45-6789"
.Fields(1) = "John Doe"
.Fields(2) = "(425) 555-5555"
.Update
.AddNew
.Fields(0) = "123-45-6780"
.Fields(1) = "Jane Doe"
.Fields(2) = "(615) 555-1212"
.Update
End With
objRs.Save App.Path & "FabriTest.adtg", adPersistADTG
objRs.Close
'EndFabricate
L'utilizzo del metodo Fields Append differisce tra l'oggetto Recordset e l'oggetto Record. Per ulteriori informazioni sull'oggetto Record , vedere Records and Streams .