Compartilhar via


CRecordset::GetFieldValue

Recupera dados do campo no registro atual.

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
    o nome de um campo.

  • varValue
    Uma referência a um objeto de CDBVariant que armazena o valor do campo.

  • nFieldType
    O tipo de dados ODBC C do campo. Usando o valor padrão, DEFAULT_FIELD_TYPE, o GetFieldValue para determinar o tipo de dados de C do tipo de dados SQL, com base na tabela a seguir. Caso contrário, você pode especificar o tipo de dados diretamente ou escolha um tipo de dados compatível; por exemplo, você pode armazenar qualquer tipo de dados em SQL_C_CHAR.

    Tipo de dados de C

    Tipo de dados 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 obter mais informações sobre os tipos de dados ODBC, consulte os tópicos de “tipos de dados SQL” e “tipos de dados C” em apêndice De de Windows SDK.

  • nIndex
    O índice com base zero do campo.

  • strValue
    Uma referência a um objeto de CString que armazena o valor do campo converteu-se para texto, independentemente do tipo de dados do campo.

Comentários

Você pode consultar um campo por nome ou pelo índice. Você pode armazenar o valor do campo em um objeto de CDBVariant ou em um objeto de CString .

Se você tiver implementado a linha em massa que pesquisa, o registro atual sempre está localizado no primeiro registro em um rowset. Para usar GetFieldValue em um registro em um determinado rowset, você deve primeiro chamar a função de membro de SetRowsetCursorPosition mover o cursor para a linha desejada dentro de esse rowset. Em GetFieldValue chamada para essa linha. Para implementar a linha em massa que pesquisa, você deve especificar a opção de CRecordset::useMultiRowFetch de parâmetro de dwOptions na função de membro de Abrir .

Você pode usar GetFieldValue para buscar dinamicamente em tempo de execução campos em vez de estaticamente a associação eles em tempo de design. Por exemplo, se você declarou um objeto do conjunto de registros diretamente de CRecordset, você deve usar GetFieldValue para recuperar os dados do campo; a troca do campo do registro (RFX), ou a troca em massa do campo do registro (RFX em massa), não são implementadas.

Dica

Se você declarar um objeto do conjunto de registros sem derivar de CRecordset, não tenha a biblioteca do cursor ODBC carregada.A biblioteca do cursor requer que o recordset tem pelo menos uma coluna associada; no entanto, quando você usa CRecordset diretamente, nenhuma das colunas são associadas.As funções de membro e CDatabase::OpenEx controle de CDatabase::Open se a biblioteca do cursor será carregada.

GetFieldValue chama a função da API SQLGetDataODBC. Se sua saída de driver o valor SQL_NO_TOTAL para o comprimento real do valor do campo, GetFieldValue lança uma exceção. Para obter mais informações sobre SQLGetData, consulte Windows SDK.

Exceções

Esse método pode lançar exceções do tipo CDBException* e CMemoryException*.

Exemplo

O código a seguir ilustra chamadas para GetFieldValue para um objeto do conjunto de registros diretamente de CRecordsetdeclarado.

// 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();

Dica

A o contrário da classe CDaoRecordsetde DAO, CRecordset não tem uma função de membro de SetFieldValue .Se você criar um objeto diretamente de CRecordset, efetivamente é somente leitura.

Para obter mais informações sobre a linha em massa que pesquisa, consulte o artigo conjunto de registros: Para buscar registros em massa (ODBC).

Requisitos

Cabeçalho: afxdb.h

Consulte também

Referência

Classe CRecordset

Gráfico da hierarquia

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition