Compartir a través de


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