把问题范围缩小到打开记录集的地方,即:
wellSet.Open(CRecordset::dynamic,NULL,CRecordset::none);
然后,由于我是通过vs自动生成的“MFC ODBC Consumer”生成的CRecordSet数据集,所以里面没有打开CDatabase的函数,但是网上的说法主要出现在Open函数上,经过在网上各种搜索资料,找到和数据集相关的说法,然后解决办法是改成
wellSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
然后问题解决!
相关的参考资料如下:
部分原文为:
b . 定义CRecordset对象,调用其Open方法打开记录集,如
CRecordset rs(&m_db);
virtual BOOL Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none);
参数一为打开类型,如下:
AFX_DB_USE_DEFAULT_TYPE:默认值
CRecordset::dynaset:动态记录集,支持双向游标,并保持同所连接的数据源同步,对数据的更新操作可以通过一个fetch操作获取。
CRecordset::snapshot:静态快照,一旦形成记录集,此后数据源的所有改变都不能体现在记录集里,应用程序必须重新进行查询,才能获取对数据的更新。该类型记录集也支持双向游标。
CRecordset::dynamic:同CRecordset::dynaset记录集相比,CRecordset::dynamic记录还能在fetch操作里同步其它用户对数据的重新排序,大部分ODBC驱动程序不支持这种记录集 。
CRecordset::forwardOnly:除了不支持逆向游标外,其它特征同CRecordset::snapshot相同。
参数二为sql查询语句,查询结果保存在记录集中
参数三指定创建记录集时的常用选项
CRecordset::none:无选项(缺省),与其它所有选项互斥,可以更新、删除、添加记录
CRecordset::appendOnly:不允许修改和删除记录,但可以添加记录.
CRecordset::readOnly:记录集是只读的.
其它选项查看MSDN 使用信任连接时,如果使用CRecordset::dynaset会出现ODBC不支持动态记录集错误;
使用CRecordset::dynamic打开记录集,会出现ODBC不支持动态指针错误;
而用CRecordset::forwardOnly则出现无效的游标位置错误 。