CRecordset::GetFieldValue

anular GetFieldValue (LPCTSTR lpszNameCDBVariantamp; varValuecortonFieldType= DEF&AULT_FIELD_TYPE);
tirar (CDBException, CMemoryException);

anular GetFieldValue (corto nIndexCDBVariantamp; varValuecortonFieldType= DEF&AULT_FIELD_TYPE);
tirar (CDBException, CMemoryException);

&anular GetFieldValue (LPCTSTR lpszNameCStringamp;strValue );
Tiro (CDBException, CMemoryException);

&anular GetFieldValue (corto nIndexCStringamp;strValue );
Tiro (CDBException, CMemoryException);

Parámetros

lpszName

El nombre de un campo.

varValue

Una referencia a un objeto CDBVariant que se va a almacenar el valor del campo.

nFieldType

El tipo de datos de ODBC C del campo. Utilizando el valor predeterminado, DEFAULT_FIELD_TYPE, fuerzas GetFieldValue para determinar el tipo de datos c desde el tipo de datos SQL, basado en la tabla siguiente. De lo contrario, puede especificar los datos directamente escriba o elija un tipo de datos compatible; por ejemplo, puede almacenar cualquier tipo de datos en SQL_C_CHAR.

Tipo de datos c Tipo de datos SQL
SQL_C_BIT SQL_BIT
SQL_C_UTINYINT SQL_TINYINT
SQL_C_SSHORT SQL_SMALLINT
SQL_C_SLONG SQL_INTEGER
SQL_C_FLOAT SQL_REAL
SQL_C_DOUBLE SQL_FLOAT
SQL_DOUBLE
SQL_C_TIMESTAMP SQL_DATE
SQL_TIME
SQL_TIMESTAMP
SQL_C_CHAR SQL_NUMERIC
SQL_DECIMAL
SQL_BIGINT
SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_C_BINARY SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY

Para obtener más información acerca de los tipos de datos ODBC, vea los temas "Tipos de datos de SQL" y "C los tipos de datos" en el apéndice d de la referencia del programador del SDK de ODBC.

nIndex

El índice de base cero del campo.

strValue

Una referencia a un objeto CString que almacenará el valor del campo se convierte en texto, independientemente del tipo de datos del campo.

Observaciones

Llame a esta función miembro para recuperar datos de los campos del registro actual. Un campo puede buscar por nombre o por índice. Puede almacenar el valor del campo en un objeto CDBVariant o un objeto CString.

Si han implementado la obtención masiva de filas, el registro actual se sitúa siempre en el primer registro en un conjunto de filas. Para utilizar GetFieldValue en un registro dentro de un determinado conjunto de filas, primero debe llamar a la función de miembro de SetRowsetCursorPosition para mover el cursor a la fila deseada dentro de ese conjunto de filas. Luego piden GetFieldValue esa fila. Para implementar la fila granel obtención, debe especificar la opción CRecordset::useMultiRowFetch del parámetro dwOptions en la función miembro Open.

Puede utilizar GetFieldValue dinámicamente buscar campos en tiempo de ejecución, en lugar de enlazarlos estáticamente en tiempo de diseño. Por ejemplo, si se declara un objeto recordset directamente desde CRecordset, debe utilizar GetFieldValue para recuperar los datos del campo; intercambio de campos de registros (RFX) o intercambio masivo de campos de registros (RFX masivo), no se ha implementado.

&Notanbsp;  Si se declara un objeto recordset sin derivados de CRecordset, no tiene la biblioteca de cursores de ODBC cargado. La biblioteca de cursores requiere que los registros tienen al menos una columna dependiente; Sin embargo, cuando se utiliza CRecordset directamente, ninguna de las columnas están enlazada. El miembro funciones de control de CDatabase::OpenEx y CDatabase::Open si se cargará la biblioteca de cursores.

GetFieldValue llama a la función API de ODBC SQLGetData. Si el controlador envía el valor SQL_NO_TOTAL para la longitud real del valor del campo, GetFieldValue inicia una excepción. Para obtener más información acerca de SQLGetData, consulte la referencia del programador del SDK de ODBC.

Ejemplo

El ejemplo de código siguiente ilustra las llamadas a GetFieldValue para un objeto recordset declarado directamente desde CRecordset.

/ / Crear y abrir un objeto de base de datos;
/ / no carga la biblioteca de cursores
CDatabase db;
DB.OpenEx (NULL, CDatabase::forceOdbcDialog);

/ / Crear y abrir un objeto recordset
/ / directamente desde CRecordset. Tenga en cuenta que un
/ / tabla debe existir en una base de datos conectada.
/ Usar objeto recordset de tipo forwardOnly para mejor
/ / rendimiento, ya que sólo MoveNext se requiere
CRecordset rs (amp; db);
RS.(CRecordset::forwardOnly, abrir
         _T ("seleccionar * de Alguna_tabla"));

/ / Crear un objeto de CDBVariant a
/ / almacenar datos de campo
CDBVariant varValue;

/ / Recorrer el recordset
/ / usando GetFieldValue y
/ / GetODBCFieldCount para recuperar
/ / datos en todas las columnas
corto nFields = rs.(De GetODBCFieldCount);
mientras (! rs.IsEOF ())
{
   para (índice corto = 0; índice < nFields; índice ++)
   {
      RS.GetFieldValue (índice, varValue);
      / / hacer algo con varValue
   }
   RS.MoveNext (de);
}

RS.(Cerrar);
DB.(Cerrar)

&Notanbsp;  A diferencia de la clase DAO CDaoRecordset, CRecordset no tiene una función miembro de SetFieldValue . Si se crea un objeto directamente desde CRecordset, es efectivamente de sólo lectura.

Para obtener más información sobre la obtención masiva de filas, vea el artículo conjunto de registros: obtener registros en masiva (ODBC) en la Guía del programador de Visual C++.

Visió&n General de CRecordset |nbsp; Miembros de clase | Diagrama de jerarquía

Vea tambié&nnbsp;CRecordset::DoFieldExchange, CRecordset::DoBulkFieldExchange, CRecordset::GetODBCFieldCount, CRecordset::GetODBCFieldInfo, CRecordset::SetRowsetCursorPosition

Index