我遇到一个奇怪的问题:有个存储过程会返回一个结果集,在查询分析器下执行没有问题,确实也返回了结果集,但在delphi程序中调用,则返回的是空结果集。我用的是bde组件。经过试验,发现只要把存储过程中的一条delete语句删除,delphi程序即可获得结果集了,存储过程简写后大致如下:
begin
......
select * from t1 where 条件a --返回结果集的语句
......
delete from t1 where 条件a --把这一句去掉,delphi程序才能获得结果集
enddelete语句在select语句后面,为什么会对查询的结果产生影响?
begin
......
select * from t1 where 条件a --返回结果集的语句
......
delete from t1 where 条件a --把这一句去掉,delphi程序才能获得结果集
enddelete语句在select语句后面,为什么会对查询的结果产生影响?
解决方案 »
- 多线程中,如何在主线程和其他线程中公用StringList,这个stringList如何传入到其他子线程中?多谢!!
- 自定义组件
- 怎样用delphi实现给paradox表加密码?急!!!
- 图片保存的问题??
- 如何获取IE使用的当前Internet连接的名字?
- 白痴问题:关于TComboBox
- 关于安装程序的制作的问题!
- 初学DELPHI,如何触发鼠标事件
- 将Txt文件中的内容导入到sqlserver中,用什么方法最好??
- VC++和DELPHI哪个更好??????
- 帮朋友问毕业设计的事情,有人原因帮忙没?有报酬!
- 有没有Delphi使用SQL数据库,修改查询SQL数据库内容的程序代码?我是初学者.
delete from t1 where 条件a 同样是"where 条件a"已经把记录删除了当然没有返回结果集了。
但在delphi中,就只有最後的一個結果比如:
Insert into tablename(Field1) values('1')
這個是一個插入記錄的語句,那麼在Delphi中
要執行這麼一句SQL語句,得用Query.ExecSql;
那麼能不能用Query.Open;呢?
答案是肯定的,只要在下面加入一條語句:
Insert into tablename(Field1) values('1')
select @@rowcount這樣就可以調用Query.Open
而這條語句在查詢分析器中,卻有兩個返回集因此可以說在Delphi中的數據集,用的最後的返回結果
delete from t1 where 条件a 可以还返结果集,而不受delete from t1 where 条件a如果你没有返回结果集,只有两种情况:1:DELPHI程充中的存储过程没有执行,或执行失败.
2:你正确执行完的DELPHI程充中的存储过程,但你没有打开存储过程:存储过程无论是否正确执行完,它总是关闭的,这时当然没有结果集给你,你必须执行Open在行.你的想法是正确的.
看来你要和我一样纠正一下了。
没有不同意见就揭帖了
会不会很客户端游标/服务端游标有关?
ado好像是可以选择游标类型的,bde不行。
为了验证测试的正确性,你可以在:select * from t1 where 条件a
delete from t1 where 条件a 前面加一条 insert into 语句,增加一条符合条件a的记录.
delete from t1 where 条件a
不是结果集 结果集必须包含字段集,请问
delete from t1 where 条件a
的字段集是什么?
我又试了一下BDE,也是可以返回结果集的
看来问题在其他地方,我自己再找找
对ten_years_ago(昨天上班,今天下岗) 的实践精神表示敬佩!