Freigeben über


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.

HinweisHinweis

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();
HinweisHinweis

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

Siehe auch

Referenz

CRecordset-Klasse

Hierarchien-Diagramm

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition