CRecordset::GetFieldValue
Recupera datos de campo del registro actual.
Sintaxis
void GetFieldValue(
LPCTSTR lpszName,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CStringA& strValue
);
void GetFieldValue(
short nIndex,
CStringW& strValue
);
Parámetros
lpszName
Nombre de un campo.varValue
Una referencia a un objeto de CDBVariant que almacenará el valor del campo.nFieldType
El tipo de datos ODBC C de campo. Con el valor predeterminado, DEFAULT_FIELD_TYPE, podría GetFieldValue para determinar el tipo de datos de C del tipo de datos SQL, basándose en la tabla siguiente. Si no, puede especificar el tipo de datos directamente o elegir un tipo de datos compatible; por ejemplo, puede almacenar cualquier tipo de datos en SQL_C_CHAR.Tipo de datos de 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_FLOATSQL_DOUBLE
SQL_C_TIMESTAMP
SQL_DATESQL_TIMESQL_TIMESTAMP
SQL_C_CHAR
SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR
SQL_C_BINARY
SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY
Para obtener más información sobre los tipos de datos ODBC, vea los temas “tipos de datos SQL” y “tipos de datos de C” en el apéndice d de Windows SDK.
nIndex
El índice de base cero del campo.strValue
Una referencia a un objeto de CString que almacenará el valor del campo convierte en texto, independientemente del tipo de datos de campo.
Comentarios
Puede buscar un campo por nombre o por índice. Puede almacenar el valor de campo en un objeto de CDBVariant o un objeto de CString .
Si está implementada la obtención de filas masiva, el registro actual se coloca siempre en el primer registro de un conjunto de filas. Para utilizar GetFieldValue en un registro en un conjunto de filas determinado, debe llamar primero a la función miembro de SetRowsetCursorPosition desplazar el cursor hasta la fila deseada dentro de ese conjunto de filas. A continuación llamada GetFieldValue para esa fila. Para implementar la obtención de filas masiva, debe especificar la opción de CRecordset::useMultiRowFetch de parámetro de dwOptions en la función miembro de Abrir .
Puede utilizar GetFieldValue para capturar dinámicamente campos en tiempo de ejecución en lugar de estáticamente el enlace ellos en tiempo de diseño. Por ejemplo, si ha declarado un objeto de conjunto de registros directamente de CRecordset, debe utilizar GetFieldValue para recuperar los datos de campo; el intercambio de campos de registros (RFX), o el intercambio masivo de campos de registros (RFX Masivo), no se implementa.
Nota
Si declara un objeto de conjunto de registros sin derivar de CRecordset, no tiene la biblioteca de cursores ODBC cargado. La biblioteca de cursores requiere que el conjunto de registros tiene al menos una columna dependiente; sin embargo, cuando se utiliza CRecordset directamente, no se enlaza ninguna de las columnas. Las funciones CDatabase:: OpenEx miembro y control de CDatabase:: Abrir si la biblioteca de cursores se cargará.
GetFieldValue llama a la función API SQLGetDatade ODBC. Si el controlador presenta el valor SQL_NO_TOTAL para la longitud real del valor de campo, GetFieldValue produce una excepción. Para obtener más información sobre SQLGetData, vea Windows SDK.
Excepciones
Exception
Condition
Este método puede producir excepciones de CDBException* escrito y de CMemoryException*.
Ejemplo
El siguiente código de ejemplo muestra las llamadas a GetFieldValue para un objeto de conjunto de registros declarado directamente de CRecordset.
// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);
// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));
// Create a CDBVariant object to
// store field data
CDBVariant varValue;
// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while(!rs.IsEOF())
{
for(short index = 0; index < nFields; index++)
{
rs.GetFieldValue(index, varValue);
// do something with varValue
}
rs.MoveNext();
}
rs.Close();
db.Close();
Nota
A diferencia de la clase CDaoRecordsetDAO, CRecordset no tiene una función miembro de SetFieldValue . Si crea un objeto directamente de CRecordset, es efectivamente de solo lectura.
Para obtener más información sobre la obtención masiva de filas, vea el artículo conjunto de registros: Obtener registros de forma masiva (ODBC).
Requisitos
encabezado: afxdb.h
Vea también
CRecordset Class
Gráfico de jerarquías
CRecordset::DoFieldExchange
CRecordset::DoBulkFieldExchange
CRecordset::GetODBCFieldCount
CRecordset::GetODBCFieldInfo
CRecordset::SetRowsetCursorPosition