CRecordset::GetFieldValue
Recupera dados de campo a registro corrente.
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 CDBVariant objeto que irá armazenar o valor do campo.nFieldType
O tipo de dados ODBC C do campo.Usando o valor padrão, DEFAULT_FIELD_TYPE, forces GetFieldValue para determinar o C tipo de dados do tipo de dados SQL, com base na tabela seguinte. Caso contrário, você pode especificar os dados diretamente digite ou escolher um tipo de dados compatível; por exemplo, você pode armazenar qualquer tipo de dados em SQL_C_CHAR.Tipo de dados 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 "Tipos de dados SQL" e "Tipos de dados C" no Apêndice D dosWindows SDK.
nIndex
O índice baseado em zero do campo.strValue
Uma referência a um CString objeto que irá armazenar o valor do campo convertido em texto, independentemente do tipo de dados do campo.
Comentários
Você pode pesquisar um campo por nome ou por índice.Você pode armazenar o valor do campo em qualquer um CDBVariant objeto ou um CString objeto.
Se tiver implementado a busca de linha em massa, o registro corrente está sempre posicionado no primeiro registro em um conjunto de linhas.Para usar GetFieldValue em um registro dentro de um determinado conjunto de linhas, você deve primeiro telefonar o SetRowsetCursorPositionfunção de membro para mover o cursor para a linha desejada dentro desse conjunto de linhas.Em seguida, chame GetFieldValue para aquela linha. Para implementar a busca de linha em massa, você deve especificar o CRecordset::useMultiRowFetch opção da dwOptions parâmetro na em abertofunção de membro .
Você pode usar GetFieldValue para buscar campos dinamicamente no time de execução em vez de ligá-los estaticamente em time de design. Por exemplo, se você tenha declarado um objeto de conjunto de registros diretamente de CRecordset, você deve usar GetFieldValue para recuperar os dados do campo; campo registro de troca (RFX) ou troca de campo de registro em massa (Bulk RFX), não está implementada.
Observação: |
---|
Se você declarar um objeto conjunto de registros sem derivar de CRecordset, não tem a biblioteca de cursores ODBC carregado. O cursor biblioteca requer que o conjunto de registros tenha pelo menos uma coluna acoplada; no entanto, quando você usar CRecordset diretamente, nenhuma das colunas são vinculadas. O membro funções CDatabase::OpenEx and CDatabase::em aberto controle se a biblioteca de cursores será carregada. |
GetFieldValue chama a função de API do ODBC SQLGetData.Se o driver produz o valor SQL_NO_TOTAL para o tamanho real do valor do campo, GetFieldValue lança uma exceção. Para obter mais informações sobre o SQLGetData, see the Windows SDK.
Exceções
Esse método pode lançar exceções do tipo CDBException * and CMemoryException*.
Exemplo
O código de exemplo a seguir ilustra a chamadas para GetFieldValue para um objeto conjunto de registros declarado diretamente do 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();
Observação: |
---|
Ao contrário da classe do DAO CDaoRecordset, CRecordset não tem um SetFieldValue função de membro. Se você criar um objeto diretamente a partir de CRecordset, ele é eficaz somente leitura. |
Para obter mais informações sobre buscar a linha em massa, consulte o artigo conjunto de registros: Buscando os registros em massa (ODBC).
Requisitos
Cabeçalho: afxdb.h
Consulte também
Referência
CRecordset::DoBulkFieldExchange
CRecordset::SetRowsetCursorPosition