Condividi tramite


CRecordset::GetFieldValue

Recupera i dati del campo nel record 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 
);

Parametri

  • lpszName
    Nome di un campo.

  • varValue
    Un riferimento a un oggetto CDBVariant che memorizza il valore del campo.

  • nFieldType
    Il tipo di dati C ODBC del campo.Utilizzando il valore predefinito, DEFAULT_FIELD_TYPE, vantaggi GetFieldValue per determinare il tipo di dati C dal tipo di dati SQL, in base alla tabella seguente.In caso contrario, è possibile specificare direttamente il tipo di dati o selezionare un tipo di dati compatibile; ad esempio, è possibile memorizzare qualsiasi tipo di dati in SQL_C_CHAR.

    Tipo di dati C

    Tipo di dati 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

    Per ulteriori informazioni sui tipi di dati ODBC, vedere gli argomenti "tipi di dati SQL" e "tipi di dati C" nell'appendice D Windows SDK.

  • nIndex
    L'indice in base zero del campo.

  • strValue
    Un riferimento a un oggetto CString che memorizza il valore del campo per convertire il testo in, indipendentemente dal tipo di dati.

Note

È possibile trovare un campo per nome o indice.È possibile archiviare il valore del campo in un oggetto CDBVariant o in un oggetto CString.

Se si è implementato il recupero di massa di righe, il record corrente viene sempre posizionato sul primo record in un rowset.Per utilizzare GetFieldValue su un record all'interno di un rowset specifica, è necessario prima chiamata la funzione membro SetRowsetCursorPosition spostare il cursore sulla riga desiderata all'interno del rowset.Successivamente chiamare GetFieldValue per tale riga.Per implementare il recupero di massa di righe, è necessario specificare l'opzione CRecordset::useMultiRowFetch del parametro dwOptions nella funzione membro Apri.

È possibile utilizzare GetFieldValue per recuperare dinamicamente i campi in fase di esecuzione anziché in modo statico l'associazione di esse in fase di progettazione.Ad esempio, se è stato dichiarato un oggetto recordset direttamente da CRecordset, è necessario utilizzare GetFieldValue per recuperare i dati di campo, trasferimento di campi di Record, o il l'rfx di massa), non viene implementato.

[!NOTA]

Se si dichiara un oggetto recordset senza derivazione da CRecordset, non caricare la libreria di cursori ODBC.La libreria di cursori è necessario che il recordset sia almeno una colonna associata; tuttavia, quando si utilizzano direttamente CRecordset, nessuna delle colonne associate.Le funzioni membro CDatabase::OpenEx e controllo CDatabase::Open se la libreria di cursori verrà caricata.

GetFieldValue chiama la funzione API ODBC SQLGetData.Se il driver restituisce il valore SQL_NO_TOTAL per l'effettiva lunghezza del valore del campo, GetFieldValue genera un'eccezione.Per ulteriori informazioni su SQLGetData, vedere Windows SDK.

Eccezioni

Questo metodo può generare eccezioni di tipo CDBException* e CMemoryException*.

Esempio

Il seguente codice di esempio sono illustrate le chiamate a GetFieldValue per un oggetto recordset dichiarata direttamente da 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();

[!NOTA]

A differenza delle classi DAO CDaoRecordset, CRecordset non ha una funzione membro SetFieldValue.Se si crea un oggetto direttamente da CRecordset, viene efficacemente di sola lettura.

Per ulteriori informazioni sul recupero di massa di righe, vedere l'articolo recordset: Recupero di massa di record (ODBC).

Requisiti

Header: afxdb.h

Vedere anche

Riferimenti

Classe di CRecordset

Grafico della gerarchia

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition