真是服了delphi了,哪位高手能解决这个SQL的问题? ( 积分: 100 )

  • 主题发起人 主题发起人 baggio_t
  • 开始时间 开始时间
B

baggio_t

Unregistered / Unconfirmed
GUEST, unregistred user!
程序代码如下:
begin
for t:=0 to adoquery2.recordcount-1 do
begin
FileNo:=trim(adoquery2.fieldbyname('文件号').AsString);
dbedit2.Text:=fileno;
showmessage(fileno);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from old where 文件号='''+fileno+'''');
open;
end;
adoquery2.Next;
end;

问题是:adoquery2.next这句始终得不到正确的结果,但是奇怪的是,如果把中间这段去掉, close;
sql.Clear;
sql.Add('select * from old where 文件号='''+fileno+'''');
open;
结果就正常了,谁能告诉我怎么回事?
 
在线等回复,没人啊?
 
begin
for t:=0 to adoquery2.recordcount-1 do
begin
adoquery2.first;//加一句试试{********}
FileNo:=trim(adoquery2.fieldbyname('文件号').AsString);
dbedit2.Text:=fileno;
showmessage(fileno);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from old where 文件号='''+fileno+'''');
open;
end;
adoquery2.Next;
end;

还有中间那一段可能还没有取完数据,下一次循环又来了,会不会有这样子的问题;
 
不要用 with 。跟踪下query2 把 close 当成什么了。
 
有with,close一般是不会搞错的,估计是adoquery1的某个事件中用了adoquery2。
 
应该在循环前adoquery2.first
 
begin
adoquery2.firstr;
while not adoquery2.eof do
begin
FileNo:=trim(adoquery2.fieldbyname('文件号').AsString);
dbedit2.Text:=fileno;
showmessage(fileno);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from old where 文件号='''+fileno+'''');
adoqurey1.open;
end;
adoquery2.Next;
end;
 
加了FIRST,还是不行!
 
first是要的,但要在for循环之外
 
first是放在FOR 外面了,但是ADOQUERY2.NEXT执行一次后就跳出循环了,跟以前的情况一样!
 
程序代码如下:
begin
for t:=0 to adoquery2.recordcount-1 do
begin
FileNo:=trim(adoquery2.fieldbyname('文件号').AsString);
dbedit2.Text:=fileno;
showmessage(fileno);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from old where 文件号='''+fileno+'''');
open;
end;
adoquery2.Next;
end;

你的寫法有問題:
應改為:
adoquery2.first;
while not adoquery2.eof do
begin
with adoquery1 do
begin
close;
sql.text := format('select * from table where field=''%s''',[adoquery2.fieldbyname('').asstring]);
open;
end;
adoquery2.next;
end;
 
TO:MouseSoft,您说的是for t:=0 to adoquery2.recordcount-1 do这一句是吧,一开始我用的就是while not adoquery2.eof do,可是ADOQEURY2.NEXT执行一次就跳出了,所以我才用for t:=0 to adoquery2.recordcount-1 do这一句的!
 
大家试试这段程序,真是奇怪了!
 
问题应该是:dbedit2关联的dataset是adoquery2吧, 这样的话,adoquery2 close 然后又open把dbedit2的数据清除了。换成edit试试,OK?
 
我己经把程序换成这样了,问题还是依旧!!!
begin
adoquery2.first;
while not adoquery2.eof do
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.add('select * from old where 文件号='''+adoquery2.fieldbyname('文件号').asstring+'''');
open;
end;
adoquery2.next;
end;
 
『一开始我用的就是while not adoquery2.eof do,可是ADOQEURY2.NEXT执行一次就跳出了,所以我才用for t:=0 to adoquery2.recordcount-1 do这一句的! 』

那说明就只有一条记录啊,next以后就到eof了
 
是不是,Close的问题
改成
ADOQuery2.Close
 
就是ADOQuery2.Close;即可!
 
那就怪了,这个问题我经常用,没有出现过这种情况,你改成这样看行吗?
begin
adoquery2.first;
while not adoquery2.eof do
begin
FileNo:=trim(adoquery2.fieldbyname('文件号').AsString);
dbedit2.Text:=fileno;
showmessage(fileno);
with adoquery1 do
begin
close;
sql.Clear;
// sql.Add('select * from old where 文件号='''+fileno+'''');
sql.text:='select * from old where 文件号='''+fileno+'''';
open;
end;
adoquery2.Next;
end;
 
adoquery1的afteropen, afterscroll等中有没有代码abort?如果有去掉它
 

Similar threads

后退
顶部