我用CDatabase和CRrecordset连接数据库、读取和写入数据。
对于读取数据很容易,CRecordset::GetFieldValue()函数可以直接搞定,对于一行的fetch:
但是如果要修改数据,只能对要修改的每个表都生成继承CRecordset的类,然后调用CRecordset::Edit()和CRecordset:AddNew,修改每个值,然后Update。大家有没有什么好办法,直接使用CRecordset或者只生成几个可以通用的继承CRecordset的类,实现数据的修改?对于多行fetch:
要修改数据就更难了,CRecordset:Edit(),CRecordset:AddNew都不能用,MSDN说可以调用SQLSetPos函数实现,并给了一个例子说明DBFETCH,但是该例子只能演示读取数据,没有说明如何更改数据。大家如何使用该例中CBulkRecordsetMod类的下面三个函数?我该了多次没有成功。
virtual BOOL RowsetUpdate(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);
virtual BOOL RowsetAdd(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);
virtual BOOL RowsetDelete(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);我的电子邮件:[email protected]
急盼各位达人帮助!

解决方案 »

  1.   

    修改,添加数据,可以用update和insert的sql语句来进行这样,就能实现你所说的,多行更新
      

  2.   

    在VC中直接执行sql语句非常方便........
      

  3.   

    唉,如果没有其它的方法,那就只能直接调用SQL语句了!
      

  4.   

    的确是这样,我前几天看了一篇英文文档也这么说。我现在要做的功能是这样的,检索出满足条件的记录(可能一条或多条),然后用Grid控件显示出来,让用户浏览、添加、修改或删除。如果直接用SQL语句,我必须跟踪用户的操作,才能知道要更新那些数据,我想这样实现起来应该比较困难,代价也比较大。但是如果用CRecordset类,可以通过得到行状态(GetRowStatus),这样应该简单一些。
    谢谢,handsomerun(毛毛),再等等,看别人有没有什么好办法,等明天就结题给分!:)
    Status value Description 
    SQL_ROW_SUCCESS The row is unchanged. 
    SQL_ROW_UPDATED The row has been updated. 
    SQL_ROW_DELETED The row has been deleted. 
    SQL_ROW_ADDED The row has been added. 
    SQL_ROW_ERROR The row is unretrievable due to an error. 
    SQL_ROW_NOROW There is no row that corresponds to wRow.