ODBC连接数据库,修改数据的问题

时间:2021-07-30 07:28:11
我用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);

我的电子邮件:hmxie@qq.com
急盼各位达人帮助!

5 个解决方案

#1


修改,添加数据,可以用update和insert的sql语句来进行

这样,就能实现你所说的,多行更新

#2


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

#3


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

#4


其实直接调sql语句,效率高多了

#5


的确是这样,我前几天看了一篇英文文档也这么说。

我现在要做的功能是这样的,检索出满足条件的记录(可能一条或多条),然后用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. 

#1


修改,添加数据,可以用update和insert的sql语句来进行

这样,就能实现你所说的,多行更新

#2


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

#3


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

#4


其实直接调sql语句,效率高多了

#5


的确是这样,我前几天看了一篇英文文档也这么说。

我现在要做的功能是这样的,检索出满足条件的记录(可能一条或多条),然后用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.