El objeto de campo
Cada objeto Field normalmente corresponde a una columna de una tabla de base de datos. Sin embargo, un objeto Field también puede representar un puntero a otro objeto Recordset, denominado capítulo. Las excepciones, como las columnas de capítulo, se tratarán más adelante en esta guía.
Utilice la propiedad Value de los objetos Field para establecer o devolver datos para el registro actual. Según la funcionalidad que el proveedor expone, es posible que algunas colecciones, métodos o propiedades de un objeto Field no estén disponibles.
Con las colecciones, los métodos y las propiedades de un objeto Field, puede hacer lo siguiente:
Devolver el nombre de un campo mediante la propiedad Name.
Ver o cambiar los datos del campo mediante la propiedad Value. Value es la propiedad predeterminada del objeto Parameter.
Devolver las características básicas de un campo mediante las propiedades Type, Precision y NumericScale.
Devolver el tamaño declarado de un campo mediante la propiedad DefinedSize.
Devolver el tamaño real de los datos de un campo determinado mediante la propiedad ActualSize.
Determinar qué tipos de funcionalidad se admiten para un campo determinado mediante la propiedad Attributes y la colección Properties.
Manipular los valores de los campos que contienen datos de caracteres binarios largos o datos de caracteres largos mediante los métodos AppendChunk y GetChunk.
Resuelva las discrepancias de los valores de campo durante la actualización por lotes mediante las propiedades OriginalValue y UnderlyingValue, si el proveedor admite actualizaciones por lotes.
Descripción de un objeto Field
En los temas siguientes se tratarán las propiedades del objeto Field que representan información que describe el propio objeto Field, es decir, metadatos sobre el campo. Esta información se puede usar para determinar mucho sobre el esquema del objeto Recordset. Estas propiedades incluyen Type, DefinedSize, ActualSize, Name, NumericScale y Precision.
Detección del tipo de datos
La propiedad Type indica el tipo de datos del campo. Las constantes enumeradas del tipo de datos que admite ADO se describen en DataTypeEnum en la Referencia para programadores de ADO.
Para los tipos numéricos de punto flotante como adNumeric, puede obtener más información. La propiedad NumericScale indica cuántos dígitos a la derecha del separador decimal se usarán para representar los valores de Field. La propiedad Precision especifica el número máximo de dígitos utilizados para representar los valores de Field.
Determinar el tamaño del campo
Utilice la propiedad DefinedSize para determinar la capacidad de datos de un objeto Field.
Utilice la propiedad ActualSize para devolver la longitud real del valor de un objeto Field. Para todos los campos, la propiedad ActualSize es de solo lectura. Si ADO no puede determinar la longitud del valor del objeto Field, la propiedad ActualSize devuelve adUnknown.
Los objetivos de las propiedades DefinedSize y ActualSize son diferentes. Por ejemplo, considere un objeto Field con un tipo declarado de adVarChar y un valor de propiedad DefinedSize de 50 que contiene un solo carácter. El valor de la propiedad ActualSize que devuelve es la longitud en bytes del carácter único.
Determinación del contenido del campo
El identificador de la columna del origen de datos se representa mediante la propiedad Name del objeto Field. La propiedad Value del objeto Field devuelve o establece el contenido de datos real del campo. Este es la propiedad predeterminada.
Para cambiar los datos de un campo, establezca la propiedad Value en un nuevo valor del tipo correcto. El tipo de cursor debe admitir actualizaciones para cambiar el contenido de un campo. La validación de la base de datos aquí no se realiza por lotes, por lo que, en su caso, deberá comprobar si hay errores al llamar a UpdateBatch. Algunos proveedores también admiten las propiedades UnderlyingValue y OriginalValue del objeto Field de ADO para ayudarle a resolver conflictos al intentar realizar actualizaciones por lotes. Para obtener más información sobre cómo resolver estos conflictos, consulte Edición de datos.
Nota
Los valores de Recordset Field no se pueden establecer al anexar nuevas propiedades Fields a un objeto Recordset. En su lugar, se pueden anexar nuevas propiedades Fields a un objeto Recordset cerrado. A continuación, se debe abrir el objeto Recordset, y solo se pueden asignar valores a estas propiedades Fields.
Más información sobre Field
Los objetos ADO tienen dos tipos de propiedades: integradas y dinámicas. Hasta el momento, solo se han analizado las propiedades integradas del objeto Field.
Las propiedades integradas son las propiedades implementadas en ADO y están disponibles inmediatamente para cualquier objeto nuevo, mediante la sintaxis MyObject.Property
. No aparecen como objetos Property en la colección Properties de un objeto.
Las propiedades dinámicas se definen mediante el proveedor de datos subyacente y aparecen en la colección Properties para el objeto ADO adecuado. Por ejemplo, una propiedad específica del proveedor puede indicar si un objeto Recordset admite transacciones o actualizaciones. Estas propiedades adicionales aparecerán como objetos Property en la colección Properties del objeto Recordset. Solo se puede hacer referencia a las propiedades dinámicas mediante la colección con la sintaxis MyObject.Properties(0)
o MyObject.Properties("Name")
.
No se puede eliminar ningún tipo de propiedad.
Un objeto Property dinámico tiene cuatro propiedades integradas propias:
La propiedad Name es una cadena que identifica la propiedad.
La propiedad Type es un entero que especifica el tipo de datos de la propiedad.
La propiedad Value es una variante que contiene el valor de la propiedad. Value es la propiedad predeterminada para un objeto Property.
La propiedad Attributes es un valor Long que indica las características de la propiedad específica del proveedor.
La colección Properties del objeto Field contiene metadatos adicionales sobre el campo. El contenido de esta colección varía según el proveedor. En el ejemplo de código siguiente se examina la colección Properties del objeto Recordset de ejemplo presentado al principio de esta sección. Primero examina el contenido de la colección. Este código usa el proveedor OLE DB para SQL Server, por lo que la colección Properties contiene información relevante para ese proveedor.
'BeginFieldProps
Dim objProp As ADODB.Property
For intLoop = 0 To (objFields.Count - 1)
Debug.Print objFields.Item(intLoop).Name
For Each objProp In objFields(intLoop).Properties
Debug.Print vbTab & objProp.Name & " = " & objProp.Value
Next objProp
Next intLoop
'EndFieldProps
Tratamiento de los datos binarios
Utilice el método AppendChunk en un objeto Field para rellenarlo con datos binarios largos o de caracteres. En situaciones en las que la memoria del sistema es limitada, puede usar el método AppendChunk para manipular valores largos en partes en lugar de en su totalidad.
Si el bit adFldLong de la propiedad Attributes de un objeto Field se establece en True, puede usar el método AppendChunk para ese campo.
La primera llamada de AppendChunk a un objeto Field escribe datos en el campo, sobrescribiendo los datos existentes. Las llamadas a appendChunk posteriores se agregan a los datos existentes. Si va a anexar datos a un campo y, a continuación, establece o lee el valor de otro campo del registro actual, ADO supone que ha terminado de anexar datos al primer campo. Si llama de nuevo al método AppendChunk en el primer campo, ADO interpreta la llamada como una nueva operación AppendChunk y sobrescribe los datos existentes. El acceso a campos de otros objetos Recordset que no son clones del primer objeto Recordset no interrumpirá las operaciones AppendChunk.
Utilice el método GetChunk en un objeto Field para recuperar parte o todos sus datos binarios o de caracteres largos. En situaciones en las que la memoria del sistema es limitada, puede usar el método GetChunk para manipular valores largos en partes en lugar de en su totalidad.
Los datos que devuelve una llamada GetChunk se asignan a la variable. Si Size es mayor que los datos restantes, el método GetChunk devuelve solo los datos restantes sin rellenar la variable con espacios vacíos. Si el campo está vacío, el método GetChunk devuelve un valor NULL.
Cada llamada a GetChunk posterior recupera datos a partir de donde se dejó la llamada a GetChunk anterior. Sin embargo, si va a recuperar datos de un campo y, a continuación, establece o lee el valor de otro campo en el registro actual, ADO supone que ha terminado de recuperar datos del primer campo. Si llama de nuevo al método GetChunk en el primer campo, ADO interpreta la llamada como una nueva operación GetChunk y comienza a leer desde el principio de los datos. El acceso a campos de otros objetos Recordset que no son clones del primer objeto Recordset no interrumpirá las operaciones GetChunk.
Si el bit adFldLong de la propiedad Attributes de un objeto Field se establece en True, puede usar el método GetChunk para ese campo.
Si no hay ningún registro actual al usar el método GetChunk o AppendChunk en un objeto Field, se produce el error 3021 (no hay ningún registro actual).
Para obtener un ejemplo del uso de estos métodos para manipular datos binarios, vea los ejemplos AppendChunk (método) y GetChunk (método) en la Referencia para programadores de ADO.