CRecordset::GetFieldValue
擷取位於目前資料錄的欄位資料。
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
);
參數
lpszName
欄位的名稱。varValue
儲存欄位值的 CDBVariant 物件的參考。nFieldType
欄位的 ODBC C 資料型別。使用預設值, DEFAULT_FIELD_TYPE,強制判斷從 SQL 資料型別的 C 資料型別的 GetFieldValue ,然後根據下表。否則,您可以直接指定資料型別或選取相容的資料型別,例如,您可以將任何資料型別 SQL_C_CHAR。C 資料型別
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
如需 ODBC 資料型別的詳細資訊,請參閱< SQL 資料型別」和「C 資料型別>。 Windows SDK的附錄 D。
nIndex
欄位的以零起始的索引。strValue
不論欄位的資料型別,將會用來儲存欄位值的 CString 物件的參考轉換成文字。
備註
您可以搜尋欄位會依名稱或索引。您可以在 CDBVariant 物件或 CString 物件中儲存欄位值。
如果您已實作大量資料列擷取,目前資料錄的資料列集的第一筆資料錄永遠放置。若要使用在一筆資料錄的 GetFieldValue 在指定資料列集內,您必須先呼叫將資料指標的 SetRowsetCursorPosition 成員函式移至該資料列集內的預期行為。然後該資料列的呼叫 GetFieldValue 。若要實作大量資料列擷取,您可以在 開啟 成員函式必須指定 dwOptions 參數的 CRecordset::useMultiRowFetch 選項。
您可以使用 GetFieldValue 動態擷取欄位在執行階段而非靜態繫結它們在設計階段。例如,在中,如果您宣告資料錄集物件會直接從 CRecordset,您必須使用 GetFieldValue 擷取欄位資料;資料錄欄位交換 (RFX),或大量資料錄欄位交換 (Bulk RFX),尚未實作。
注意事項 |
---|
如果您宣告資料錄集物件,而不是衍生自 CRecordset,沒有 ODBC 資料指標程式庫載入。資料指標程式庫需要資料錄集至少有一個繫結資料行,不過,在中,當您直接使用 CRecordset ,資料行都不會被繫結。成員函式 CDatabase::OpenEx 和 CDatabase::Open 控制資料指標程式庫是否要載入。 |
GetFieldValue 呼叫 ODBC API 函式 SQLGetData。如果您的驅動程式輸出欄位值的實際長度的值 SQL_NO_TOTAL , GetFieldValue 擲回例外狀況。如需 SQLGetData的資訊,請參閱 Windows SDK。
例外狀況
這個方法會擲回型別 CDBException* 和 **CMemoryException***的例外狀況。
範例
下列範例程式碼說明如何呼叫直接從 CRecordset宣告資料錄集物件的 GetFieldValue 。
// 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();
注意事項 |
---|
不同於 DAO 類別 CDaoRecordset, CRecordset 沒有 SetFieldValue 成員函式。如果您建立物件直接從 CRecordset,它實際上是唯讀的。 |
如需大量資料列擷取的詳細資訊,請參閱本文 資料錄集:擷取大量資料錄 (ODBC)。
需求
Header: afxdb.h