Partilhar via


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

Classe CRecordset

Gráfico de hierarquia

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition

Outros recursos

CRecordset membros