如何用CRecordSet类进行多次数据库操作,Open后再查询怎么办?
某处看到的:“使用过CRecordSet::Open()函数,再次查询时就可以应用CRecordSet::Requery() 函数。CRecordSet 类对象的初始化,缺省数据源由GetDefaultConnect()函数获得,
!!也可以提供你所需要的SQL 语句,并以它来调用CRecordSet::Open() 函数!!(就是不明白自定义的语句可用于多次查询么?我做的时候怎么出错了?)
查询过程中也可以利用CRecordSet 的成员变量m_strFilter 和m_strSort 来执行条件查询和结果排序。”
CPersonSet m_recordset(&m_database);
CString searchid;
searchid.Format("ID=%d",i);
strSQL.Format("select * from person where %s",searchid);
//初始查询操作--》
m_recordset.m_strFilter=searchid;//利用成员变量来操作的(A)两句
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,NULL);
//m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);//××××利用自定义sql语句来操作的语句(B)
m_recordset.m_strFilter="NAME='vfcgf'";
//不关闭m_recordset做连续的第2次查询,
m_recordset.Requery();
AfxMessageBox("requery success");
问题1:
用A处的代码没有问题,但是A换成B的话Requery();就出错“语法错误(操作符丢失)在查询表达式‘ID=1 WHERE NAME=‘vfcgf’’中”,为什么换了后的效果是这样呢?
问题2:
我是用CLASS WIZARD添加的CRecordset继承类,关联数据源时选择的是snapshot,
我在程序里这样m_recordset->Open(CRecordset::dynaset,str_SQL,CRecordset::readOnly);
会提示我说提示说:“ODBC驱动程序不支持动态记录集”
这又是为什么呢?我访问的是ACCESS数据源。
我又用class wizard里UpdateColumon更新程序里的CPersonSet的设置,选dynaset的RADIO钮,可是点确定关闭class wizard后再ctrl+w,再操作一下看却仍是snapshot被选中,我到CPersonSet代码里把type的参数改成dynaset。可是还是那个提示,郁闷。。。