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