-
GetFieldValue
鎖定
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創建了一個對象,它實際上是隻讀的。
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:7次歷史版本
- 最近更新: 阿妧云