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