更新时间:2024-08-24 12:55
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 );
参数:
说明:
此成员函数用来获取当前记录中的字段数据。你可以用名字或者索引来查找一个字段。也可以把字段值保存在一个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 );
// 创建一个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创建了一个对象,它实际上是只读的。