Compartir a través de


Fields (colección)

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 objeto Recordset. Al igual que todas las colecciones de ADO, tiene propiedades Count y Item, así como métodos Append y Refresh. También tiene métodos CancelUpdate, Delete, Resync y Update, que no están disponibles para otras colecciones de ADO.

Examinar la colección Fields

Tenga en cuenta la colección Fields del conjunto de Recordset de ejemplo introducido en esta sección. El objeto Recordset de ejemplo se deriva de la instrucción SQL.

SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7  

Por lo tanto, debería encontrar que la colección Recordset Fields 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 de la colección Fields mediante la propiedad Count y recorre en bucle la colección y devuelve 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 Field, vea El objeto Field.

Recuento de columnas

Como podría esperar, la propiedad Count devuelve el número real de objetos Field de la colección Fields. Dado que la numeración de los miembros de una colección comienza con cero, siempre debe codificar bucles a partir del miembro cero y terminar 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, utilice el comando For Each...Next.

Si la propiedad Count es cero, no hay ningún objeto 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 Field individual especificado por el nombre o índice que se le ha pasado. Por lo tanto, las siguientes instrucciones son equivalentes para el objeto 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 la colección es más rápido porque accede directamente al Field sin tener que realizar una búsqueda de cadenas. Por otro lado, se debe conocer el orden de Fields dentro de la colección y, si el orden cambia, la referencia al índice de Field tendrá que cambiarse siempre que se produzca. Aunque es ligeramente más lento, usar el nombre del Field es más flexible porque no depende del orden de los Fields de la colección.

Usar el 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 registros a un conjunto de registros

El método Append se usa para agregar campos a un objeto Recordset.

Puede usar el método Append para fabricar un objeto Recordset 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 objeto Recordset abierto o en un objeto Recordset donde se ha establecido la propiedad ActiveConnection. Solo puede anexar campos a un objeto Recordset que no está abierto y que aún no se ha conectado a un origen de datos. Sin embargo, para especificar valores para los Fields recién anexados, primero se debe abrir el objeto Recordset.

A menudo, los desarrolladores necesitan un lugar para almacenar temporalmente algunos datos o quieren que algunos datos actúen como si viniera de un servidor para que pueda participar en el enlace de datos en una interfaz de usuario. ADO (junto con el Servicio de cursores de Microsoft para OLE DB) permite al desarrollador compilar 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 objeto Recordset, se agregan dos nuevos registros y el objeto Recordset se conserva en un archivo. (Para obtener más información sobre la persistencia del Recordset, consulte Actualizar y conservar 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 Record, consulte Registros y flujos.

Consulte también

Fabricación de conjuntos de registros jerárquicos