Recordset不能被修改

fengzuiye 2009-09-09 03:27:54
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
bstrSQL = "execute 存储过程"
或者
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdStoredProc);
bstrSQL = "存储过程"
这样创建的Recordset不能被修改
报错为对象打开时不能被操作
寻求大家的帮助,谢谢啦!
...全文
111 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
billpu 2009-09-09
  • 打赏
  • 举报
回复
有死进程 重启看看
fengzuiye 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 guguda2008 的回复:]

把打开的RECORDSET关掉再执行下一个语句。用CLOSE方法
[/Quote]
但是我要依靠这个Recordset对数据进行更新啊,像下面这样

if(pRecordset!=NULL && !pRecordset->EndOfFile){
pRecordset->MoveFirst();
while(!pRecordset->EndOfFile){
cout << (_bstr_t)pRecordset->GetCollect("id") << endl;
......
pRecordset->PutCollect(.....); //这里就会报错。。
pRecordset->Update();
pRecordset->MoveNext();
}
pRecordset->Close();

}
guguda2008 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fengzuiye 的回复:]
引用 9 楼 guguda2008 的回复:

不知道你到底想修改成什么,RECORDSET返回结果集,一般都是读取结果集吧

我想在读取Recordset的时候,更新里面某个字段的值。。

重新仔细检查代码的时候,发现尝试更新Recordset的属性,导致上面的错误。

修改之后,调用update方法,报错为“在获取新的句柄之前,必须释放所有的行句柄。”


[/Quote]
把打开的RECORDSET关掉再执行下一个语句。用CLOSE方法
fengzuiye 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 guguda2008 的回复:]

不知道你到底想修改成什么,RECORDSET返回结果集,一般都是读取结果集吧
[/Quote]
我想在读取Recordset的时候,更新里面某个字段的值。。

重新仔细检查代码的时候,发现尝试更新Recordset的属性,导致上面的错误。

修改之后,调用update方法,报错为“在获取新的句柄之前,必须释放所有的行句柄。”

guguda2008 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 fengzuiye 的回复:]
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
bstrSQL = "execute 存储过程"
或者
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdStoredProc);
bstrSQL = "存储过程"
这样创建的Recordset不能被修改
报错为对象打开时不能被操作
寻求大家的帮助,谢谢啦!

[/Quote]
不知道你到底想修改成什么,RECORDSET返回结果集,一般都是读取结果集吧
xuejiecn 2009-09-09
  • 打赏
  • 举报
回复
用静态游标试试。不同选项是不同的,看一下帮助吧。
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
fengzuiye 2009-09-09
  • 打赏
  • 举报
回复
问题修改为:

bstrSQL = "execute 存储过程"
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);

或者
bstrSQL = "存储过程"
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdStoredProc);

这样创建的Recordset不能被修改
报错为对象打开时不能被操作
寻求大家的帮助,谢谢啦!

adLockBatchOptimistic
adLockOptimistic
adLockPessimistic
都试过了,还是不行
fengzuiye 2009-09-09
  • 打赏
  • 举报
回复
adLockBatchOptimistic
adLockOptimistic
adLockPessimistic
都试过了,还是不行
adLockReadOnly这个肯定是不行的了

sql语句自然是在上面了,这样的错误还是不会犯的啦
billpu 2009-09-09
  • 打赏
  • 举报
回复
换一个锁类型用adLockPessimistic
sdhdy 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 guguda2008 的回复:]
bstrSQL = "execute 存储过程"
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);


写到上边
[/Quote]
说的也对,怎么放下面去了?
SQL77 2009-09-09
  • 打赏
  • 举报
回复
这样创建的Recordset不能被修改
报错为对象打开时不能被操作

你先打开了,不能操作,按宝鸭的,放上边试试
sdhdy 2009-09-09
  • 打赏
  • 举报
回复
吧这个换一个试试:adLockOptimistic
guguda2008 2009-09-09
  • 打赏
  • 举报
回复
bstrSQL = "execute 存储过程"
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);


写到上边

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧