更新时间:2024-05-18 22:35
CRecordset::appendOnly 不允许 Edit 或 Delete 在记录集。 只允许 AddNew。 此选项是互斥的 CRecordset::readOnly。
数据成员
m_hstmt 包含记录集的ODBC语句处理,并 键入 HSTMT。
备注:
在 打开 调用之前,不要使用 m_hstmt。通常不直接需要访问 HSTMT,但是,您可能需要它SQL语句的直接执行的。 选件类 CDatabase 的ExecuteSQL 成员函数提供示例 m_hstmt。
m_nFields 在记录集包含字段数据成员的数目,并 键入 UINT。
备注:
记录集选件类的构造函数必须初始化正确数目的 m_nFields。 如果尚未实现批量取行,类向导编写此初始化,如果您在使用它来声明记录集选件类。 您还可以编写它手动。
框架使用此数字管理字段数据成员和当前记录之间的相应列的交互在数据源中。
此数字必须对应于“在 DoFieldExchange 或 DoBulkFieldExchange ”注册的输出列的数目在调用后对SetFieldType 与参数 CFieldExchange::outputColumn。
可以动态绑定列,遵循该文章“记录集声明:动态绑定数据列”。如果这样做,则必须添加在 m_nFields 的计数反映RFX的数目或”批量RFX在您的动态绑定的列的 DoFieldExchange 或 DoBulkFieldExchange 成员函数调用。
m_nParams 在记录集包含参数数据成员的数目,并键入 UINT。
备注:
如果您的记录集选件类具有任何参数数据成员,选件类的构造函数必须初始化正确数目的 m_nParams。m_nParams 默认的值更改为0。 如果添加参数必须手动执行的数据成员必须手动添加在选件类构造函数的初始化反映了必须至少具有大到数量的“数参数(?”在您的 m_strFilter 或 m_strSort 字符串的占位符)。它将参数化记录集的查询时,框架使用此号码。
此数字必须对应于 DoFieldExchange 或 DoBulkFieldExchange ”签入“参数的数目中,调用 SetFieldType与 CFieldExchange::inputParam、 CFieldExchange::param、 CFieldExchange::outputParam或CFieldExchange::inoutParam后的参数值。
m_pDatabase 在记录集包含参数数据成员的数目,并键入 UINT。
注意事项
此变量设置通过两种方式。 通常,那么,当您构造记录集对象时,您将指针传递给已连接的 CDatabase 对象。 如果通过 NULL,CRecordset 会为您创建一 CDatabase 对象并将其连接。 在任何情况下,CRecordset 此变量存储指针。
通常不会直接需要使用在 m_pDatabase存储的指针。 如果您编写了 CRecordset的扩展,但是,您可能需要使用指针。 例如,因此,如果引发您的 CDBExceptions.,您可能需要指针。 如果需要执行某个使用同一CDatabase 对象,例如运行期间发生的事务,设置超时或调用选件类 CDatabase 的 ExecuteSQL 成员函数直接执行SQL语句,或者您可能需要它。
m_strFilter 包含指定结构化查询语言(SQL) WHERE 子句的 CString。 用于,筛选器选择满足特定条件的那些记录。
记录集使用此选择在 Open 期间的字符串约束(或筛选器)记录或 Requery 调用。 这对于选择记录的子集非常有用,例如“加利福尼亚基于的任何salesperson” (“状态= CA”)。 WHERE 子句的ODBC SQL语法为
WHERE search-condition
注意在您的字符串不包含 WHERE 关键字。 框架提供它。
可以通过将还参数化筛选器字符串“?”其中的占位符,声明您的选件类的一个参数数据成员每个占位符的和传递参数传递到记录集在运行时。 这使您可以构造筛选器在运行时。 有关更多信息,请参见文章 记录集:参数化记录集(odbc)。
有关SQL WHERE 子句的更多信息,请参见文章 SQL。 有关选择和筛选记录的更多信息,请参见文章 记录集:筛选记录(odbc)。
m_strSort 包含指定SQL ORDER BY 子句的 CString。 用于控制日志排序。
记录集使用它选择在 Open 过程中该字符串排序记录或 Requery 调用。 可以使用此函数对一个或多个列的记录集。 ORDER BY 子句的ODBC SQL语法为ORDER BY sort-specification [, sort-specification]
如果排序规范是整数或列名。 还可以指定升序或降序(默认情况下该顺序是升序)通过追加“ASC”或“DESC”对列在排序字符串列表。 选定的记录的第二个列表的,则第一列首先排序,依此类推。 例如,可以按姓排序,然后按名排序“客户”记录集。 您可以列出的列数取决于数据源。 有关更多信息,请参见 Windows SDK。
注意在您的字符串不包含 ORDER BY 关键字。 框架提供它。
有关SQL子句的更多信息,请参见文章 SQL。 有关对记录进行排序的更多信息,请参见文章 记录集:排序记录(odbc)。
示例:
CCustomer rsCustSet(&m_dbCust);
// Set the sort string
// Run the sorted query
构造函数
CRecordset( CDatabase* pDatabase = NULL);
构造 CRecordset 对象。 您的派生类必须提供调用此站点的构造函数。
参数:
备注:
可以直接使用 CRecordset 或从派生 CRecordset特定的选件类。 可以使用类向导派生记录集选件类。
派生类 必须 提供自己的构造函数。 在派生类构造函数中,调用构造函数 CRecordset::CRecordset,将适当的参数传递给它。
通过 NULL 传递给记录集构造函数已为您自动构造和连接线的 CDatabase 对象。 这是不要求您在构造记录集之前构造和连接 CDatabase 对象的有用的简短。
virtual BOOL Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none );throw( CDBException, CMemoryException );
通过检索表或执行记录集表示的查询打开记录集。
参数:
nOpenType
有关这些记录集类型的更多信息,请参见文章 记录集(odbc)。 有关相关信息,请参见文章“使用块和滚动的游标”在 Windows SDK。
pszSQL
dwOptions
返回值
非零,如果成功打开了 CRecordset 对象;否则0,则 CDatabase::Open (如果调用)返回0。
备注
必须调用该成员函数运行记录集定义的查询。 在调用 Open之前,必须构造记录集对象。
与数据源的此记录集的连接取决于您在调用 Open之前构造记录集。 如果要将传递给未连接到数据源的记录集构造函数的一 CDatabase 对象,此成员函数使用 GetDefaultConnect 尝试打开数据库对象。 如果通过NULL 到记录集构造函数,该构造函数编写您的一 CDatabase 对象和 Open 尝试连接的数据库对象。 有关关闭记录集和连接的详细信息。这些更改的情况下,请参见 关闭。
CRecordset::Close
virtual void Close( );关闭记录集和ODBC HSTMT 与它。
备注
为记录集分配的框架释放ODBC HSTMT 和所有内存。 通常在调用 Close后,您删除C++记录集对象是否分配了 new。
可以在调用 Close之后再次调用 Open。 这使您可以重新使用记录集对象。 另一种方法是调用 Requery。
属性
CanAppend Returns nonzero if new records can be added to the recordset via the AddNew member function.
CanBookmark Returns nonzero if the recordset supports bookmarks.
CanRestart Returns nonzero if Requery can be called to run the recordset’s query again.
CanScroll Returns nonzero if you can scroll through the records.
CanTransact Returns nonzero if the data source supports transactions.
CanUpdate Returns nonzero if the recordset can be updated (you can add, update, or delete records).
GetODBCFieldCount Returns the number of fields in the recordset.
GetRecordCount Returns the number of records in the recordset.
GetStatus Gets the status of the recordset: the index of the current record and whether a final count of the records has been obtained.
GetTableName Gets the name of the table on which the recordset is based.
GetSQL Gets the SQL string used to select records for the recordset.
IsOpen Returns nonzero ifOpen has been called previously.
IsBOF Returns nonzero if the recordset has been positioned before the first record. There is no current record.
IsEOF Returns nonzero if the recordset has been positioned after the last record. There is no current record.
IsDeleted Returns nonzero if the recordset is positioned on a deleted record.
更新操作函数
AddNew Prepares for adding a new record. Call Update to complete the addition.
CancelUpdate Cancels any pending updates due to an AddNew or Edit operation.
Delete Deletes the current record from the recordset. You must explicitly scroll to another record after the deletion.
Edit Prepares for changes to the current record. Call Update to complete the edit.
Update Completes an AddNew or Edit operation by saving the new or edited data on the data source.
导航操作
GetBookmark Assigns the bookmark value of a record to the parameter object.
Move Positions the recordset to a specified number of records from the current record in either direction.
MoveFirst Positions the current record on the first record in the recordset. Test for IsBOF first.
MoveLast Positions the current record on the last record or on the last rowset. Test for IsEOF first.
MoveNext Positions the current record on the next record or on the next rowset. Test for IsEOF first.
MovePrev Positions the current record on the previous record or on the previous rowset. Test for IsBOF first.
SetAbsolutePosition Positions the recordset on the record corresponding to the specified record number.
SetBookmark Positions the recordset on the record specified by the bookmark.
其他操作
Cancel Cancels an asynchronous operation or a process from a second thread.
FlushResultSet Returns nonzero if there is another result set to be retrieved, when using a predefined query.
GetFieldValue Returns the value of a field in a recordset.
GetODBCFieldInfo Returns specific kinds of information about the fields in a recordset.
GetRowsetSize Returns the number of records you wish to retrieve during a single fetch.
GetRowsFetched Returns the actual number of rows retrieved during a fetch.
GetRowStatus Returns the status of the row after a fetch.
IsFieldDirty Returns nonzero if the specified field in the current record has been changed.
IsFieldDirty Returns nonzero if the specified field in the current record has been changed.
IsFieldNull Returns nonzero if the specified field in the current record is Null (has no value).
IsFieldNullable Returns nonzero if the specified field in the current record can be set to Null (having no value).
RefreshRowset Refreshes the data and status of the specified row(s).
Requery Runs the recordset’s query again to refresh the selected records.
SetFieldDirty Marks the specified field in the current record as changed.
SetFieldNull Sets the value of the specified field in the current record to Null (having no value).
SetLockingMode Sets the locking mode to “optimistic” locking (the default) or “pessimistic” locking. Determines how records are locked for updates.
SetParamNull Sets the specified parameter to Null (having no value).
SetRowsetCursorPosition Positions the cursor on the specified row within the rowset.
覆盖
Check Called to examine the return code from an ODBC API function.
CheckRowsetError Called to handle errors generated during record fetching.
DoBulkFieldExchange Called to exchange bulk rows of data from the data source to the recordset. Implements bulk record field exchange (Bulk RFX).
DoFieldExchange Called to exchange data (in both directions) between the field data members of the recordset and the corresponding record on the data source. Implements record field exchange (RFX).
GetDefaultConnect Called to get the default connect string.
GetDefaultSQL Called to get the default SQL string to execute.
OnSetOptions Called to set options for the specified ODBC statement.
SetRowsetSize Specifies the number of records you wish to retrieve during a fetch.
称为“记录集”,CRecordset 对象通常用于两种形式:动态集和快照。 动态集保持与其他用户所做的更新数据同步。 快照是数据的静态视图。 每个窗体表示已修复的一组记录,每次打开记录集,但,以便在移动到动态集时的记录,它反映其他记录集以后对该记录,由其他用户或更改在应用程序中。
如果您使用的是数据访问使用否决(DAO)选件类而不是开放式数据库连接(odbc)选件类,使用选件类CDaoRecordset。 有关更多信息,请参见文章 概述:数据库编程。
若要使用branch使用类型的记录集,则从 CRecordset通常派生特定的记录集选件类。 从数据源的记录集选择记录和然后可以:
若要使用您的选件类,请打开数据库并构造记录集对象,通过构造函数指针到您的 CDatabase 对象。 然后调用记录集的 Open 成员函数,可以指定对象是否是动态集还是快照。 调用 Open 选择数据从数据源。 在打开后记录集对象,请使用其成员函数和数据成员滚动记录和对它们。 可用的操作取决于对象是否是动态集或快照,它是否可更新或只读(这取决于开放式数据库连接(odbc)数据源)的功能,因此,您是否实现批量取行。 若要刷新可能已更改或添加的记录,因为 Open 调用,调用对象的 Requery 成员函数。 当您完成使用协定时,调用对象的 Close 成员函数和销毁对象。
在派生的 CRecordset 选件类,记录字段交换(rfx)或批量记录字段交换(bulk RFX)用于支持读取和更新记录字段。
有关记录集和记录字段交换的更多信息,请参见位于 概述:数据库编程、 记录集(odbc)、 记录集:获取记录(odbc)和 记录字段交换(rfx)。 有关动态集和快照中的一个焦点,请参见位于 动态集 和 快照。
该类代表从数据源中提取的记录集。程序可以选择数据源中的某个表作为一个记录集,也可以通过对表的查询得到记录集,还可以合并同一数据源中的多个表作为一个记录集中。通过该类可以对记录集中的记录进行滚动、修改、增加和删除等操作。