用VC++设计基于ODBC的数据库管理系统
virtual BOOL Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none ); |
该函数使用指定的SQL语句查询数据源中的记录并按指定的类型和选项建立记录集。参数nOpenType说明了记录集的类型。如果要求的类型驱动程序不支持,则函数将产生一个异常。参数lpszSQL是一个SQL的SELECT语句,或是一个表名。函数用lpszSQL来进行查询,如果该参数为NULL,则函数会调用GetDefaultSQL()获取缺省的SQL语句。参数dwOptions可以是一些选项的组合,具体参见MSDN。若函数调用了CDatabase::Open且返回FALSE,则函数返回FALSE。
virtual CString GetDefaultSQL( ); |
Open()函数在必要时会调用该函数返回缺省的SQL语句或表名以查询数据源中的记录。一般需要在CRecordset派生类中覆盖该函数并在新版的函数中提供SQL语句或表名。
上面介绍过,在建立记录集时,CRecordset会构造一个SELECT语句来查询数据源。如果在调用Open时只提供了表名,那么SELECT语句还缺少选择列参数rfx-field-list,那么选择列的信息从DoFieldExchange中的RFX语句里提取。
建立记录集后,用户可以随时调用Requery()成员函数来重新查询和建立记录集。Requery()有两个重要用途:一是使记录集能反映用户对数据源的改变;二是按照新的过滤或排序方法查询记录并重新建立记录集。在调用Requery之前,可调用CanRestart()来判断记录集是否支持Requery()操作。要记住Requery只能在成功调用Open()后调用,所以程序应调用IsOpen来判断记录集是否已建立。函数的原型如下:
virtual BOOL Requery( ); |
返回TRUE表明记录集建立成功,否则返回FALSE。
CRecordset类还有两个公共数据成员m_strFilter和m_strSort用来设置对记录的过滤和排序。在调用Open()或Requery()前,如果在这两个数据成员中指定了过滤或排序,那么Open()和Requery()将按这两个数据成员指定的过滤和排序来查询数据源。成员m_strFilter用于指定过滤器。m_strFilter实际上包含了SQL的WHERE子句的内容,但它不含WHERE关键字。使用m_strFilter的一个例子为:
m_pSet->m_strFilter="CourseID='MATH101'"; //只选择CourseID为MATH101的记录 if(m_pSet->Open(CRecordset::snapshot, "Section")) |
成员m_strSort用于指定排序。m_strSort实际上包含了ORDER BY子句的内容,但它不含ORDER BY关键字。m_strSort的一个例子为:
m_pSet->m_strSort="CourseID DESC"; //按CourseID的降序排列记录 m_pSet->Open(); |
事实上,Open()函数在构造SELECT语句时,会把m_strFilter和m_strSort的内容放入SELECT语句的WHERE和ORDER BY子句中。如果在Open的lpszSQL参数中已包括了WHERE和ORDER BY子句,那么m_strFilter和m_strSort必需为空。
调用无参数成员函数Close()可以关闭记录集。在调用了Close()函数后,程序可以再次调用Open()建立新的记录集。CRecordset的析构函数会调用Close()函数,所以当删除CRecordset对象时记录集也随之关闭。
CRecordset提供了几个成员函数用来在记录集中滚动,如下所示。当用这些函数滚动到一个新记录时,框架会自动地把新记录的内容拷贝到域数据成员中。
void MoveNext( ); //前进一个记录 void MovePrev( ); //后退一个记录 void MoveFirst( ); //滚动到记录集中的第一个记录 void MoveLast( ); //滚动到记录集中的最后一个记录 void SetAbsolutePosition( long nRows ); |
该函数用于滚动到由参数nRows指定的绝对位置处。若nRows为负数,则从后往前滚动。例如,当nRows为-1时,函数就滚动到记录集的末尾。注意,该函数不会跳过被删除的记录。
virtual void Move( long nRows, WORD wFetchType = SQL_FETCH_RELATIVE ); |
该函数功能强大。通过将wFetchType参数指定为SQL_FETCH_NEXT、SQL_FETCH_PRIOR、SQL_FETCH_FIRST、SQL_FETCH_LAST和SQL_FETCH_ABSOLUTE,可以完成上面五个函数的功能。若wFetchType为SQL_FETCH_RELATIVE,那么将相对当前记录移
天极yesky
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论