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::OpenExCDatabase::Open 控制資料指標程式庫是否要載入。

GetFieldValue 呼叫 ODBC API 函式 SQLGetData。如果您的驅動程式輸出欄位值的實際長度的值 SQL_NO_TOTALGetFieldValue 擲回例外狀況。如需 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 類別 CDaoRecordsetCRecordset 沒有 SetFieldValue 成員函式。如果您建立物件直接從 CRecordset,它實際上是唯讀的。

如需大量資料列擷取的詳細資訊,請參閱本文 資料錄集:擷取大量資料錄 (ODBC)

需求

Header: afxdb.h

請參閱

參考

CRecordset 類別

階層架構圖

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition