记录集只读&无效的字符描述索引

来源:互联网 发布:直销网络图软件 编辑:程序博客网 时间:2024/06/09 17:34
 

被vc 中的数据库编程搞得焦头烂额,尤其是用ODBC存取图像的时候。

不想用向导生成CRecordset的方式,这样只能静态的绑定数据集,而且有时候不想要一个附加的一个CRecordView。于是开始只定义了一个自己的CRecordset变量。但是后来发现,这样的话只能用GetFieldValue读取记录的值,怎么添加和修改记录呢,只能用SQL语句了,但是用SQL语句无法实现往字段里面添加图像啊。

所以只好参照以前的写法,用向导生成一个派生于CRecordset的类,并绑定数据变量。可是调用CMyRecordset.Open(CRecordset::snapshot,sqlStr)时出现“记录集只读”的错误,网上一查,一种解决方法时,snapshot改成dynaset,可是这样又出现“无效的字符描述索引”的错误,网上的贴子又解释说是读取记录时要遵守字段的顺序,可我这里没有用GetFieldValue读取记录啊。百思不得其解,于是怀疑数据表有问题,把其中两个约束关系去掉了,不行;怀疑向导生成的virtual CString GetDefaultConnect();virtual CString GetDefaultSQL();两个函数有问题,去掉好也不行。错误始终在Open函数这里,怀疑这里有鬼,于是只调用Open(),不用参数。可以了,但是还需要设置m_strFilter并Requery()得到自己需要的记录。再向字段里面写图像数据,可是查询一下发现里面的字段总是为空,原来还需要显式的调用CRecordset::SetFieldDirty和CRecordset::SetFieldNull。好复杂!

不过终于成功了!