CRecordset

生活百科 2023-01-17 20:00生活百科www.aizhengw.cn

CRecordset

CRecordset::appendOnly 不允许 Edit 或 Delete 在记录集。 只允许 AddNew。 此选项是互斥的 CRecordset::readOnly。

类成员

数据成员
m_hstmt 包含记录集的ODBC语句处理,并 键入 HSTMT。
备注
在 打开 调用之前,不要使用 m_hstmt。通常不直接需要访问 HSTMT,,您可能需要它SQL语句的直接执行的。 选件类 CDatabaseExecuteSQL 成员函式提供示例 m_hstmt
m_nFields 在记录集包含栏位数据成员的数目,并 键入 UINT。
备注
记录集选件类的构造函式必须初始化正确数目的 m_nFields。 如果尚未实现批量取行,类嚮导编写此初始化,如果您在使用它来声明记录集选件类。 您还可以编写它手动。
框架使用此数字管理栏位数据成员和当前记录之间的相应列的互动在数据源中。
此数字必须对应于“在 DoFieldExchangeDoBulkFieldExchange ”注册的输出列的数目在调用后对SetFieldType 与参数 CFieldExchange::outputColumn
可以动态绑定列,遵循该文章“记录集声明:动态绑定数据列”。如果这样做,则必须添加在 m_nFields 的计数反映RFX的数目或"批量RFX在您的动态绑定的列的 DoFieldExchangeDoBulkFieldExchange 成员函式调用。

  
m_nParams 在记录集包含参数数据成员的数目,并键入 UINT。
备注
如果您的记录集选件类具有任何参数数据成员,选件类的构造函式必须初始化正确数目的 m_nParamsm_nParams 默认的值更改为0。 如果添加参数必须手动执行)的数据成员(必须手动添加在选件类构造函式的初始化反映了必须至少具有大到数量的“数参数(?”在您的 m_strFilterm_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
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");
// Run the sorted query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));
构造函式
CRecordset( CDatabase pDatabase = NULL);
构造 CRecordset 对象。 您的派生类必须提供调用此站点的构造函式。
参数
  • pDatabase
  • 包含指向 CDatabase 对象或该值 NULL。 如果 NULL 和不 CDatabase 对象的 Open 成员函式未调用将其连线到数据源,记录集尝试打开它可以在自己的 Open 调用过程。 如果通过 NULLCDatabase对象而不是构造并连线使用指定的数据源信息何时派生了与类嚮导的记录集选件类。
备注
可以直接使用 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
  • 接受默认,AFX_DB_USE_DEFAULT_TYPE或者使用从 enum OpenType的下列值之一
    使用双向滚动的CRecordset::dynaset 的记录集。 成员资格和排序记录确定的,当记录集打开时,,其他用户所做的更改到数据值可见执行获取操作。 也称为动态集是键集驱动的记录集。
  • 使用双向滚动的CRecordset::snapshot 的静态记录集。 ,在打开时,成员资格和排序记录确定的记录集;,在记录中获取时,数据值确定。 其他用户所做的更改不可见,直至记录集关闭并重新打开。
  • 使用双向滚动的CRecordset::dynamic 的记录集。 其他用户所做的更改为成员资格,排序和数据值是可见的执行获取操作。 请注意许多ODBC驱动程式不支持此类记录集。
  • 使用仅向前滚动的CRecordset::forwardOnly 的唯读记录集。
    对于 CRecordset,默认值为 CRecordset::snapshot。 默认值结构允许Visual C++嚮导使用ODBC CRecordset 和DAO CDaoRecordset互动,具有不同的默认值。
有关这些记录集类型的更多信息,请参见文章 记录集(odbc)。 有关相关信息,请参见文章“使用块和滚动的游标”在 Windows SDK。
pszSQL
  • 包含下列操作之一的字元串指针:
    NULL 指针。
  • 表的名称。
  • SQL SELECT 语句(可选)与SQL WHEREORDER BY 子句)。
  • 指定预定义查询(存储过程)的名称 CALL 语句。 注意不在大括弧和 CALL 关键字之间插入空白。
dwOptions
  • 可以指定值的组合的位掩码下面列出。 其中一些互相排斥。 默认值为 none。
  • CRecordset::readOnly 打开记录集为唯读。 此选项是互斥的 CRecordset::appendOnly。
  • CRecordset::optimizeBulkAdd 使用一个準备的SQL语句最佳化一次添加多个记录。 仅当未使用ODBC API函式 SQLSetPos 更新记录集,适用。 第一次更新确定哪些栏位标记为已更新。 此选项是互斥的 CRecordset::useMultiRowFetch。
  • CRecordset::useMultiRowFetch 实现批量取行允许多个行检索在单个获取操作。 这是旨在的高级功能提高性能;,批量记录栏位交换不是由类嚮导支持。 此选项是互斥的CRecordset::optimizeBulkAdd。 请注意,如果指定 CRecordset::useMultiRowFetch,然后选项卡 CRecordset::noDirtyFieldCheck 将自动打开(双缓冲不可用);在向前记录集,选项卡CRecordset::useExtendedFetch 将自动打开。 有关批量取行的更多信息,请参见文章 记录集:获取记录(odbc)。
  • CRecordset::skipDeletedRecords 跳过所有删除的记录,在记录集中定位时常时。 这将减慢在某些相对获取的性能。 此选项无效在向前记录集。 如果您调用了 nRows 参数的 移动 设定为0,,CRecordset::skipDeletedRecords 选项设定,Move 将断言。 请注意CRecordset::skipDeletedRecords 类似于 驱动程式包,这意味着,删除的行从记录集中移除。 ,,如果您的驱动程式打包记录,则将跳过您删除的那些记录;,当记录集打开时,它不会跳过其他用户删除的记录。 CRecordset::skipDeletedRecords 将跳过其他用户删除的行。
  • CRecordset::useBookmarks 五月使用在记录集书籤,,如果支持。 书籤慢的数据检索,但可以提高数据导航的性能。 无效在向前记录集。 有关更多信息,请参见文章 记录集:书籤和绝对位置(odbc)。
  • CRecordset::noDirtyFieldCheck 关闭自动错误检查栏位(双缓冲)。 这将提高性能;,您必须手动标记栏位为"通过调用 SetFieldDirty 和 SetFieldNull 成员函式。监视选件类CRecordset 的双缓冲类似于选件类 CDaoRecordset的双缓冲。 ,在 CRecordset,则无法启用各栏位的双缓冲;您启用的所有栏位的或禁用的所有栏位。 请注意,如果指定选项CRecordset::useMultiRowFetch,然后 CRecordset::noDirtyFieldCheck 将自动打开,,SetFieldDirty 和 SetFieldNull 实现批量取行的记录集无法使用。
  • CRecordset::executeDirect 不使用一个準备的SQL语句。 为了改善性能,,如果Requery 成员函式不会调用中,指定此选项。
  • 而不是 SQLFetch的CRecordset::useExtendedFetch 实现 SQLExtendedFetch。 对于实现能在仅向前记录集的批量行模型。 如果在仅向前记录集指定选项CRecordset::useMultiRowFetch,则 CRecordset::useExtendedFetch 将自动打开。
  • CRecordset::userAllocMultiRowBuffers 用户将数据的存储缓冲区。 如果要将自己的存储,请使用 CRecordset::useMultiRowFetch 结合使用此选项;否则,则框架将自动分配必要的存储区。 有关更多信息,请参见文章 记录集:获取记录(odbc)。 请注意指定CRecordset::userAllocMultiRowBuffers 的,,不指定 CRecordset::useMultiRowFetch导致生成失败的断言。
返回值
非零,如果成功打开了 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)。 有关动态集和快照中的一个焦点,请参见位于 动态集 和 快照。

功能

该类代表从数据源中提取的记录集。程式可以选择数据源中的某个表作为一个记录集,也可以通过对表的查询得到记录集,还可以合併同一数据源中的多个表作为一个记录集中。通过该类可以对记录集中的记录进行滚动、修改、增加和删除等操作。
上一篇:Insayif Ali 下一篇:Pasoul

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有