adoquery的怪问题(50分)

  • 主题发起人 主题发起人 初学者1
  • 开始时间 开始时间

初学者1

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个二次检索的例子:
button1click://一次检索
adoquery1.close;
adoquery1.SQL.clear;
adoquery1.sql.add('select * from A where correctrate>=');
adoquery1.sql.add(''''+edit1.text+'''');
adoquery1.open;

button2click://二次检索
adoquery2.close;
adoquery2.SQL.clear;
adoquery2.sql.add('select * from ');
adoquery2.sql.add('('+adoquery1.sql.text+')');
adoquery2.SQL.add(' As r where IDID=');
adoquery2.sql.add(''''+edit2.text+'''');
adoquery2.open;
当我一次检索完进行二次检索,没问题。但是我在返回来进行一次检索,报错:
can't perform this operation on a closed dataset.
但我把adoquery1.close改为adoquery1.open
它又报错:
can't perform this operation on a open dataset.
这是why?
 
adoquery2.sql.add('('+adoquery1.sql.text+')');//error
是string,不是查询生成的结果。
 
怎么改?我二次检索没问题,只有当二次检索后,在返回进行一次检索时,才报错!!
 
你把adoquery2.close;提前到adoquery1.close;前,试试

 
》zgdtxf:
没用。
 
把adoquery1.sql.text单独赋给一个字符串传过去应该没有问题了
 
你是把adoquery1.sql.text当一个表使用,还不明白!
 
adoquery1.sql.text:='select * from A where correctrate>=');
''''+edit1.text+'''');
不是表,哈哈,
你用SHOWMESSAGE();看看你ADOQUERY2。SQL。TEXT

 
robertcool》不行!
张剑波,xianghb》两位大侠,我看过了,但还没搞懂。不管它是不是表,button2onclick
执行是没问题的,只有当button1click执行后,执行button2click,然后在执行button1click
才报错。我执行一次button1click,继续执行button1click没问题。两位大侠能告诉原因吗?

 
张剑波>帮我解决在给你加分
 
不用加分。
我领导在这里,明天给你消息。
 
建议你不这要样省力气,,还是认真写一段吧,,
var
S1,S2:string;
begin
adoquery1.close;
adoquery1.SQL.clear;
s1:='select * from A where correctrate>=';
s1:=s1+''''+edit1.text+'''';
adoquery1.sql.text:=s1;
adoquery1.open;

adoquery2.close;
adoquery2.SQL.clear;
S2:='select * from'+
S2:=S2+ '('+adoquery1.sql.text+')';
^^^^^^^^^^^^^^^^^^^^^
什么意思??SQL语句能这样写吗???你SHOW一下S2的值看看,

S2:=S2+' As r where IDID='+''''+edit2.text+'''';
adoquery2.sql.text:=S2;
adoquery2.open;
end;
 
你是不是在查询结果中再查询,如果是这样:
先把第一次查询查询结果建立一个临时表:
'select * into tmptable from A where correctrate>='''''+edit1.text+''''
(前提是tmptable不存在,可先加判断,有则删除)
第二次查询可直接对tmptable进行查询。


 
》张剑波
是在查询结果中再查询。
建立临时表好像不可取,因为我给你的是一个表,而我在程序中有十几个表,根据输入
判断哪个表再查询。而且我上面的方法二次查询是可以的,令我不解的是我给
adoquery1.sql.text赋给一个全局变量,再有全局变量传递给adoquery2,可照样不行,
但我一次查询查n次都没问题,我如果二次查询后,换一个表也没问题。
不知你明白没有,也就是说只要我用这个表查询,二次查询,。。然后换个表进行一次查询
。。。,没问题。就是不能在同一个表二次查询后返回进行一次查询。
这个问题搞了我一天多了,谢谢你赶快帮我解决了。
 
delphi5中ado的bug,不要用ado了!我深受其害!!!下载了补丁解决了这个问题,还有其他问题,总之.....
用BDE吧,尽管有些bug,但总体上还是很好用的!
 
wulianmin:
老大,哪个布丁?
 
下载地址:
http://www.chinaasp.com/delphi/
名称:
ADO Update for MDAC 2.6
 
wulianmin:
谢谢,不过这个问题没解决,但帮我解决了另外一个问题,就是如果我一次检索没检索到
再换个词检索,就会报eof和bof错,现在这个问题没了,能不能帮我把上面这个问题也解决了?
 
很遗憾!我那时就因为没法解决这个问题而改投BDE的,BDE并非一无是处啊,何必一定要用ADO呢?
 
早知道我就会用bde,我刚学delphi时就听一些大侠说bde差,而且我这个东东刚做的时候,不知
为啥,用table连不上,最后改投ado,现在所有的东东都调好了,只有这么一个bug
你让我如何放的下。
全部重改?天哪,救救我。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
665
import
I
I
回复
0
查看
1K
import
I
后退
顶部