我定义了一个CDatabase 对象,并建立与数据库的连接
CDatabase dbase;
dbase.OpenEx (_T("DSN=book;UID=SA;PWD=SA"), CDatabase::noOdbcDialog) )又定义了一个记录集类 CWorkerSet,将之前建立了连接的 dbase 地址传给m_dbWorkerSet:(如下)
CWorkerSet m_dbWorkerSet(&dbase)
m_dbWorkerSet.Open ()以上执行都正常,但我发现m_dbWorkerSet不能执行Update(),AddNew()等等函数
而如果不将dbase传给m_dbWorkerSet,即执行:
CWorkerSet m_dbWorkerSet;
m_dbWorkerSet.Open ();
则可以执行Update()等函数,这是怎么回事,请高手帮帮忙!!我看到有人说用dbase.OpenEx ()函数打开的就只能是只读的,天啊!难道真是这样的,没有解决办法吗?
但我以前这么用是可以用SQL语句更新的。
dbase.OpenEx (_T("DSN=book;UID=SA;PWD=SA"), CDatabase::noOdbcDialog) );CWorkerSet m_dbWorkerSet(&dbase);
m_dbWorkerSet.Open(CRecordset::daynaset);
再试一下。
实在不行就用
CString strSql="update shit set fuck=1";
database.ExecuteSQL(strSql);
你真是高手,我等了两个星期,问了三次,把以前别人问的问题也查了上百个,也没有解决,没想到给你给解决了。我之前定义记录集时是用snapshot方式,可能是因为这个原因,我把它换成你说的CRecordset::dynaset就可以了。
但不知为什么用snapshot不行呢?能不能解释一下呢?
另外我将再给你100分,以示答谢!!
dynaset 是动态数据集方式,既然是动态的,当然可以执行更新等操作了,
这是定好的参数,可以看MSDN里的说明