ADO中AddNew()的奇怪错误!!
我建了一个很基本的对话框工程,VS2005.给这个对话框类添加了几个_ConnectionPtr m_pConnection;_CommandPtr m_pCommand;_RecordsetPtr m_pRecordset;三个成员变量。都在对跨框的构造函数里creatInstace了。
我有一个函数是利用m_pRecordset的open方法打开一个表,m_pRecordset->Open ( _bstr_t("WORKS"), _variant_t((IDispatch *)m_pConnection,true),adOpenKeyset,adLockOptimistic, adCmdTable);,然后m_pRecordset->AddNew();
m_pRecordset->PutCollect("TYPE",(_bstr_t)(type));
m_pRecordset->PutCollect("WORKNAME",(_bstr_t)(name));等等来增加新的记录。
有另外的一些函数来执行查询操作,m_pCommand->CommandText = "Select * From BookManager";
m_pRecordset = m_pCommand->Execute(&vtMissing,&vtMissing,adCmdText);
问题来了,当我从没进行过查询操作,那么使用添加记录的函数正常,可以添加记录,但是,如果我之前进行了查询操作(不论是查询哪个表),再进行添加记录时,就出错了,出错就在m_pRecordset->AddNew();输出的错误信息为:在对应所需名称和序数的集合中,未找到项目。(open操作还是成功的)
我就很奇怪:为什么不进行其他的查询操作,那么添加记录正常。但是,我要是调用过查询操作,就会出现这样的错误了?
我每次查询结束后都m_pRecordset->Close()了。
[解决办法]
查询后不调用m_pRecordset->Close()试试
[解决办法]
AddNew之前
m_pRecordset->Requery(adOptionUnspecified);
[解决办法]
应该使用客户端游标,在查询和open之前
m_pRecordset->CursorLocation = adUseClient;