Colección Fields
La colección Fields es una de las colecciones intrínsecas de ADO. Una colección es un conjunto ordenado de elementos a los que se puede hacer referencia como una unidad. Para obtener más información sobre las colecciones de ADO, vea El modelo de objetos de ADO.
La colección Fields contiene un objeto Field para cada campo (columna) del Recordset . "Como todas las colecciones de ADO, tiene las propiedades Count y Item, así como los métodos Append y Refresh." También tiene los métodos CancelUpdate, Delete, Resyncy Update, que no están disponibles para otras colecciones de ADO.
Examen de la colección Fields
Considere la colección Fields del Recordset de ejemplo introducido en esta sección. El Recordset de ejemplo fue derivado de la instrucción SQL.
SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7
Por lo tanto, debe encontrar que la colección Campos del Conjunto de Registros contiene tres campos.
'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
Este código simplemente determina el número de objetos Field en la colección Fields mediante la propiedad Count y recorre la colección en un bucle, devolviendo el valor de la propiedad Name para cada objeto Field. Puede usar muchas más propiedades Field para obtener información sobre un campo. Para obtener más información sobre cómo consultar un campo de, vea El Objeto Campo.
Recuento de columnas
Como cabría esperar, la propiedad Count devuelve el número real de objetos Campo en la colección Campos. Dado que la numeración de los miembros de una colección comienza con cero, siempre debe codificar bucles que comienzan con el miembro cero y terminan con el valor de la propiedad Count menos 1. Si usa Microsoft Visual Basic y desea recorrer en bucle los miembros de una colección sin comprobar la propiedad Count de, use el For Each... Comando siguiente.
Si la propiedad Count es cero, no hay objetos en la colección.
Ir al campo
Al igual que con cualquier colección de ADO, la propiedad Item es la propiedad predeterminada de la colección. Devuelve el objeto individual Field especificado por el nombre o el índice que se le ha pasado. Por lo tanto, las siguientes declaraciones son equivalentes para el Recordset de ejemplo :
objField = objRecordset.Fields.Item("ProductID")
objField = objRecordset.Fields("ProductID")
objField = objRecordset.Fields.Item(0)
objField = objRecordset.Fields(0)
Si estos métodos son equivalentes, ¿cuál es mejor? Depende. El uso de un índice para recuperar un field de de la colección es más rápido porque accede al field de directamente sin tener que realizar una búsqueda de cadenas. Por otro lado, el orden de los Campos dentro de la colección debe conocerse y, si cambia el orden, la referencia al índice del Campo tendrá que cambiarse dondequiera que ocurra. Aunque es ligeramente más lento, usar el nombre del Campo es más flexible porque no depende del orden de los Campos de la colección.
Uso del método Refresh
A diferencia de otras colecciones de ADO, el uso del método Refresh en la colección Fields no tiene ningún efecto visible. Para recuperar los cambios de la estructura de base de datos subyacente, debe usar el método Requery o si el objeto Recordset no admite marcadores, el método MoveFirst, lo que hará que el comando se ejecute de nuevo en el proveedor.
Agregar campos a un conjunto de registros
El método Append se usa para agregar campos a un Recordset.
Puede usar el método Append para fabricar un objeto Recordset de mediante programación sin abrir una conexión a un origen de datos. Se producirá un error en tiempo de ejecución si se llama al método Append en la colección Fields de un Recordset abierto o en un Recordset en el que se ha establecido la propiedad ActiveConnection. Solo puede anexar campos a un recordset que no está abierto y que aún no se ha conectado a un origen de datos. Sin embargo, para especificar los valores de los Campos recién anexados, primero se debe abrir el Recordset.
A menudo, los desarrolladores necesitan un lugar para almacenar temporalmente algunos datos o quieren que algunos datos actúen como si provenían de un servidor para que pueda participar en el enlace de datos en una interfaz de usuario. ADO (junto con el servicio de cursor de Microsoft para OLE DB) permite al desarrollador crear un objeto Recordset vacío especificando información de columna y llamando a Open. En el ejemplo siguiente, se anexan tres campos nuevos a un nuevo objeto Recordset . A continuación, se abre el recordset de, se agregan dos registros nuevos y el recordset de se conserva en un archivo. (Para obtener más información sobre la persistencia de Recordset, consulte Actualización y persistencia de datos).
'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
El uso del método Fields Append difiere entre el objeto Recordset y el objeto Record. Para obtener más información sobre el objeto del registro , consulte los registros y flujos .