最近做一个有数据库编程的项目,使用了CRecordset类。总结下心得,方便自己,方便后学的人。
在<Visual C++数据库实用编程100例>中介绍了有关CRecordset类的具体用法。那么有以下两个
问题:
1.CRecordview这个类做了什么?
它继承自CFormview,在OnInitialUpdate()函数中调用了CRecordset类的open()方法。
因为vc++并不能直接生成继承自CRecordview类,要自己一点一点加进去。包括如何引入CRecordset
对象或指针。但是如果你知道了CRecordview做了什么,不妨这样做:
SDI程序中自成一个继承自CFormview的类,在新生成的子类的构造函数中调用CRecordset的open()方法
在析构函数中调用CRecordset的close()方法.程序中可以自由使用CRecordset对象。
2.update()函数为什么不能更新?
CRecordset类通过RFX_Long()...数据交换实现了数据库与CRecordset的交互。
但是如果使用了DDX_FieldText(),并不能完全实现控件与CRecordset对象的数据交互。它只限于让控件显示
来自CRecordset的内容。如果你想更新修改控件值并通过CRecordset对象的update()方法来更改数据库
那么数据库并不会更新。
要想让数据库并新,就不要使用DDX_FieldText()方法。应该这样:
m_set.edit();
m_set.intval = getdlgitemint(ID_EDIT);//即这一过程要手工获取,而不是通过DDX_FieldText()方法
m_set.update();
<Visual C++数据库实用编程100例>和<mfc数据库编程>使用DDX_FieldText()方法时,所有示例仅限于显示
CRecordset的内容,但不更改。所以这明显是个大坑。如果你不是亲身体会,你就不会问:为什么不讲出来。