GetFieldValue

GetFieldValue
CRecordset::GetFieldValue
void GetFieldValue( LPCTSTR lpszName, CDBVariant& varValue, short nFieldType = DEFAULT_FIELD_TYPE );
throw( CDBException, CMemoryException );
void GetFieldValue( short nIndex, CDBVariant& varValue, short nFieldType = DEFAULT_FIELD_TYPE );
throw( CDBException, CMemoryException );
void GetFieldValue( short nIndex, CStringA& strValue );
throw( CDBException, CMemoryException );
void GetFieldValue( short nIndex, CStringW& strValue );
throw( CDBException, CMemoryException );
參數
lpszName
一個欄位的名字。
varValue
一個指向CDBVariant對象的引用,該對象將用來保存欄位的值。
nFieldType
欄位的ODBC C數據類型。預設值DEFAULT_FIELD_TYPE強迫GetFieldValue根據下面的表格確定與SQL數據類型相對應的C數據類型。或者,你可以直接指定數據類型或選擇一個兼容的數據類型;例如,你可以將任何數據類型保存到SQL_C_CHAR中。
數據類型對照表
C type identifier
ODBC C typedef
C type
SQL_C_CHAR
SQLCHAR *
unsigned char *
SQL_C_WCHAR
SQLWCHAR *
wchar_t *
SQL_C_SSHORT[j]
SQLSMALLINT
short int
SQL_C_USHORT[j]
SQLUSMALLINT
unsigned short int
SQL_C_SLONG[j]
SQLINTEGER
long int
SQL_C_ULONG[j]
SQLUINTEGER
unsigned long int
SQL_C_FLOAT
SQLREAL
float
SQL_C_DOUBLE
SQLDOUBLE, SQLFLOAT
double
SQL_C_BIT
SQLCHAR
unsigned char
SQL_C_STINYINT[j]
SQLSCHAR
signed char
SQL_C_UTINYINT[j]
SQLCHAR
unsigned char
SQL_C_SBIGINT
SQLBIGINT
_int64[h]
SQL_C_UBIGINT
SQLUBIGINT
unsigned _int64[h]
SQL_C_BINARY
SQLCHAR *
unsigned char *
SQL_C_BOOKMARK[i]
BOOKMARK
unsigned long int[d]
SQL_C_VARBOOKMARK
SQLCHAR *
unsigned char *
SQL_C_TYPE_DATE[c]
SQL_DATE_STRUCT
struct tagDATE_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; } DATE_STRUCT;[a]
SQL_C_TYPE_TIME[c]
SQL_TIME_STRUCT
struct tagTIME_STRUCT { SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; } TIME_STRUCT;[a]
SQL_C_TYPE_TIMESTAMP[c]
SQL_TIMESTAMP_STRUCT
struct tagTIMESTAMP_STRUCT {SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; SQLUINTEGER fraction;[b] } TIMESTAMP_STRUCT;[a]
SQL_C_NUMERIC
SQL_NUMERIC_STRUCT
struct tagSQL_NUMERIC_STRUCT { SQLCHAR precision; SQLSCHAR scale; SQLCHAR sign[g]; SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f] } SQL_NUMERIC_STRUCT;
SQL_C_GUID
SQLGUID
struct tagSQLGUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } SQLGUID;[k]
All C interval data types
SQL_INTERVAL_STRUCT
See the C Interval Structure section, later in this appe
有關ODBC數據類型的更多信息,參見“ODBC SDK程式設計師參考”的附錄D中的“SQL數據類型”和“C數據類型”。
nIndex
欄位從零開始的索引。
strValue
一個指向CString對象的引用,該對象將把欄位的值保存為文本,而不管欄位的數據類型。
說明
此成員函式用來獲取當前記錄中的欄位數據。你可以用名字或者索引來查找一個欄位。也可以把欄位值保存在一個CDBVariant對象或一個CString對象中。
如果你已經實現了成組行讀取,則在一個行集中的當前記錄總是被定位在第一個記錄。要在一個給定的行集中對一個記錄使用GetFieldValue,必須首先調用SetRowsetCursorPosition成員函式來將游標移動到行集中所希望的行上。然後為這一行調用GetFieldValue。要實現成組行讀取,你必須指定Open成員函式中的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的更多訊息,參見“ODBC SDK程式設計師參考”。
示例
下面的例子代碼說明如何為一個直接從CRecordset聲明的記錄集對象調用GetFieldValue。
// 創建並打開一個資料庫對象;
// 不要裝載游標庫
CDatabase db;
db.OpenEx( NULL, CDatabase::forceOdbcDialog );
// 直接從CRecordset創建並打開一個記錄集對象。
// 注意在一個被連線的資料庫中必須存在一個表。
// 使用僅向前類型的記錄集以獲得最佳的性能,因為值需要MoveNext函式。
CRecordset rs( &db );
rs.Open( CRecordset::forwardOnly, _T( "SELECT * FROM SomeTable" ) );
// 創建一個CDBVariant對象來保存欄位數據
CDBVariant varValue;
// 在記錄集中循環,使用GetFieldValue 和GetODBCFieldCount 來獲取所有列中的數據
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue );
// 對varValue作某些操作。
}
rs.MoveNext( );
}
rs.Close( );
db.Close( );
注意
與DAO類CDaoRecordset不一樣,CRecordset沒有SetFieldValue成員函式。如果你直接從CRecordset創建了一個對象,它實際上是唯讀的。

相關詞條

熱門詞條

聯絡我們