void GetFieldValue (LPCTSTR lpszNameCDBVariantamp; varValuecurtonFieldType= DEF&AULT_FIELD_TYPE);
lançar (CDBException, CMemoryException);
void GetFieldValue (curto nIndexCDBVariantamp; varValuecurtonFieldType= DEF&AULT_FIELD_TYPE);
lançar (CDBException, CMemoryException);
void GetFieldV&alue (LPCTSTR lpszNameCStringamp;strValue );
lançar (CDBException, CMemoryException);
void GetFieldV&alue (curto nIndexCStringamp;strValue );
lançar (CDBException, CMemoryException);
Parâmetros
lpszName
O nome de um campo.
varValue
Uma referência a um objeto CDBVariant que armazenará o valor do campo.
nFieldType
O tipo de dados de ODBC C do campo. Usando o valor padrão, DEFAULT_FIELD_TYPE, força GetFieldValue para determinar o tipo de dados c de tipo de dados SQL, com base na tabela a seguir. Caso contrário, você pode especificar os dados de tipo diretamente 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_FLOAT SQL_DOUBLE |
| SQL_C_TIMESTAMP | SQL_DATE SQL_TIME SQL_TIMESTAMP |
| SQL_C_CHAR | SQL_NUMERIC SQL_DECIMAL SQL_BIGINT SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR |
| SQL_C_BINARY | SQL_BINARY SQL_VARBINARY SQL_LONGVARBINARY |
Para obter mais informações sobre tipos de dados ODBC, consulte os tópicos "Tipos de dados SQL" e "Tipos de dados C" no Apêndice D da Referência do programador ODBC SDK.
nIndex
O índice baseado em zero do campo.
strValue
Uma referência a um objeto de CString que irá armazenar o valor do campo convertidos em texto, independentemente do tipo de dados do campo.
Observações
Chame essa função de membro para recuperar dados do campo no registro atual. Você pode procurar um campo pelo nome ou pelo índice. Você pode armazenar o valor do campo em um objeto de CDBVariant ou um objeto de CString.
Se tiver implementado em massa linha buscando, o registro atual está sempre posicionado no primeiro registro em um conjunto de linhas. Para usar GetFieldValue em um registro em um determinado conjunto de registros, você deve primeiro chamar a função de membro SetRowsetCursorPosition para mover o cursor para a linha desejada dentro desse conjunto de linhas. Em seguida, chame GetFieldValue para essa linha. Para implementar em massa linha buscando, você deve especificar a opção de CRecordset:: useMultiRowFetch do parâmetro dwOptions na função de membro Abrir.
Você pode usar GetFieldValue para buscar dinamicamente campos no tempo de execução em vez de estaticamente vinculá-los em tempo de design. Por exemplo, se você declarou um objeto recordset diretamente de CRecordset, você deve usar GetFieldValue para recuperar os dados de campo; registro de campo exchange (RFX) ou troca de campo de registro em massa (Bulk RFX), não está implementada.
&Notanbsp; Se você declarar um objeto recordset sem derivando de CRecordset, não tem a biblioteca de Cursor ODBC carregado. A biblioteca de cursor requer que o conjunto de registros tenha pelo menos uma coluna acoplada; no entanto, quando você usa CRecordset diretamente, nenhuma das colunas são vinculadas. O membro funções controle CDatabase:: OpenEx e CDatabase:: Open se a biblioteca de cursor será carregada.
GetFieldValue chama a função de API de ODBC SQLGetData. Se seu driver produz 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 o Referência do programador ODBC SDK.
Exemplo
O exemplo de código a seguir ilustra chamadas para GetFieldValue para um objeto de conjunto de registros declarados diretamente de CRecordset.
/ / Criar e abrir um objeto de banco de dados;
/ / não carregar a biblioteca de cursor
CDatabase db;
DB.OpenEx (NULL, CDatabase:: forceOdbcDialog);
/ / Criar e abrir um objeto recordset
/ / diretamente de CRecordset. Note-se que um
/ / tabela deve existir em um banco de dados conectado.
/ / Use recordset do tipo forwardOnly para melhor
/ / desempenho, já que apenas MoveNext é necessário
Rs CRecordset (amp; db);
RS.Abrir (CRecordset:: forwardOnly,
T ("Selecione * de SomeTable"));
/ / Criar um objeto de CDBVariant para
/ / armazenar dados de campo
CDBVariant varValue;
/ / Loop através de conjunto de registros,
/ / usando GetFieldValue e
/ / GetODBCFieldCount para recuperar
/ / dados em todas as colunas
curto nFields = rs.GetODBCFieldCount ();
enquanto (! rs.IsEOF ())
{
para (índice curto = 0; indexar < nFields; índice + +)
{
RS.GetFieldValue (index, varValue);
/ / fazer algo com varValue
}
RS.MoveNext ();
}
RS.(Fechar);
DB.(Fechar)
&Notanbsp; Ao contrário da classe DAO CDaoRecordset, CRecordset não tem uma função de membro SetFieldValue . Se você criar um objeto diretamente de CRecordset, é efetivamente somente leitura.
Para obter mais informações sobre a linha em massa buscando, consulte o artigo Recordset: Buscar registros em massa (ODBC) no Guia do programador do Visual C++.
Visão geral de CRecordset | Membros de classe | Gráfico de hierarquia
Co&nsulte tambémnbsp;CRecordset::DoFieldExchange, CRecordset::DoBulkFieldExchange, CRecordset::GetODBCFieldCount, CRecordset::GetODBCFieldInfo, CRecordset::SetRowsetCursorPosition