CRecordset::GetFieldValue
Ruft Felddaten im aktuellen Datensatz ab.
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
);
Parameter
lpszName
Der Name eines Felds.varValue
Ein Verweis auf einen CDBVariant-Objekt, das den Wert des Felds speichert.nFieldType
Der ODBC C-Datentyp des Felds.Verwenden des Standardwerts DEFAULT_FIELD_TYPE gezwungen, GetFieldValue, um das C-Datentyps vom SQL-Datentyp, die in der folgenden Tabelle festzulegen.Andernfalls können Sie den Datentyp direkt angeben oder einen kompatiblen Datentyp auswählen; Sie können beispielsweise einen Datentyp in SQL_C_CHAR speichern.C-Datentyp
SQL-Datentyp
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
Weitere Informationen zu ODBC-Datentypen, finden Sie in den Themen "SQL-Datentypen" und "C-Datentypen" im Anhang D Windows SDK.
nIndex
Der nullbasierte Index des Felds.strValue
Ein Verweis auf einen CString-Objekt, das den Wert des Felds speichert, der konvertiert wird, um auf Text, unabhängig vom Datentyp des Felds.
Hinweise
Sie können ein Feld entweder Index zu Name oder als aussehen.Sie können den Feldwert entweder in einem CDBVariant-Objekt oder einem CString-Objekt speichern.
Wenn Sie das gesammelte Abrufen von Zeilen implementiert haben, wird der aktuelle Datensatz immer auf dem ersten Datensatz in einem Rowset positioniert.Um GetFieldValue auf einem Datensatz innerhalb eines angegebenen Rowsets zu verwenden, müssen Sie zuerst die SetRowsetCursorPosition-Memberfunktion den Cursor auf die gewünschte Zeile innerhalb des Rowsets verschieben.Anschließend Aufruf GetFieldValue für diese Zeile.Um das gesammelte Abrufen von Zeilen zu implementieren, müssen Sie die Option dwOptionsCRecordset::useMultiRowFetch des Parameters in der Geöffnet-Memberfunktion angeben.
Sie können GetFieldValue verwenden, um Felder statt statisch Bindung zur Laufzeit dynamisch abzurufen sie zur Entwurfszeit.Wenn Sie beispielsweise ein Recordset-Objekt direkt von CRecordset deklariert haben, müssen Sie GetFieldValue verwenden, um die Felddaten abrufen, Datensatzfeldaustausch (RFX) oder den Sammel-Datensatzfeldaustausch (Bulk-RFX), werden nicht implementiert.
Hinweis |
---|
Wenn Sie ein Recordset-Objekt deklarieren, ohne von CRecordset zu berechnen, haben Sie die ODBC-Cursorbibliothek nicht geladen.Die Cursorbibliothek erfordert, dass das Recordset mindestens einer gebundenen Spalte haben; Wenn Sie jedoch CRecordset direkt verwenden, werden keine der Spalten gebunden.Die Memberfunktionen CDatabase::OpenEx und CDatabase::Open-Steuerelement, ob die Cursorbibliothek geladen wird. |
GetFieldValue ruft die ODBC-API-Funktion SQLGetData auf.Wenn der Treiber den Wert SQL_NO_TOTAL für die tatsächliche Länge des Feldwerts ausgibt, GetFieldValue löst eine Ausnahme aus.Weitere Informationen zu SQLGetData, finden Sie unter Windows SDK.
Ausnahmen
Diese Methode kann Ausnahmen des Typs CDBException* und CMemoryException* auslösen.
Beispiel
Der folgende Beispielcode zeigt Aufrufe GetFieldValue für ein Recordset-Objekt, das direkt von CRecordset deklariert wird.
// 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();
Hinweis |
---|
Im Gegensatz zur DAO-Klasse CDaoRecordset, hat CRecordset keine SetFieldValue-Memberfunktion.Wenn Sie ein Objekt direkt von CRecordset erstellen, ist es effektiver schreibgeschützt. |
Weitere Informationen über das gesammelte Abrufen von Zeilen, finden Sie im Artikel Recordset: Datensätzen in einer Sammeloperation (ODBC).
Anforderungen
Header: afxdb.h