我定义了一个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 ()函数打开的就只能是只读的,天啊!难道真是这样的,没有解决办法吗?

解决方案 »

  1.   

    关注
    但我以前这么用是可以用SQL语句更新的。
      

  2.   

    CDatabase dbase;
    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);
      

  3.   

    lzzqqq(Jonersen):
       你真是高手,我等了两个星期,问了三次,把以前别人问的问题也查了上百个,也没有解决,没想到给你给解决了。我之前定义记录集时是用snapshot方式,可能是因为这个原因,我把它换成你说的CRecordset::dynaset就可以了。
    但不知为什么用snapshot不行呢?能不能解释一下呢?
    另外我将再给你100分,以示答谢!!
      

  4.   

    snapshot 是数据库快照方式,是数据库的一个静态的映像,只能查询不能更新
    dynaset 是动态数据集方式,既然是动态的,当然可以执行更新等操作了,
    这是定好的参数,可以看MSDN里的说明