一个循环问题!在线等!!!解决问题立马给分!

zgq19801123 2004-03-28 02:57:50
有如下循环语句
while not ADOQuery1.Eof do
begin
Com_select_Id.Items.Add(trim(ADOQuery1.FieldByName('code').AsString));
Com_select_name.Items.Add(trim(ADOQuery1.FieldByName('Anwser').AsString));
ADOQuery1.Next;
end;
ADOQuery1.Close;
循环语句能成功执行。
但是当在ADOQuery1.Next;语句前加上如下语句
with Dm_query,Dm_Query.Ads_v_Record do
begin
Active := False;
CommandText := StrServer + ' where Answer1='''
+ Trim(ADOQuery1.FieldByName('Anwser').AsString) +'''';
Active := True;
end;
Amount:=Dm_Query.Ads_v_Record.RecordCount;
Memo1.Lines.Text := Memo1.Lines.Text + #13+'<<'+trim(ADOQuery1.FieldByName('Anwser').AsString)+'>>'+' 此选项的点击次数为:'+inttostr(Amount)+'人次';
这循环只执行第一次,也就是说ADOQuery1.Next;失效。
...全文
71 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
俗人1979 2004-03-31
  • 打赏
  • 举报
回复
up
pandarus 2004-03-31
  • 打赏
  • 举报
回复
这么多!
r_james 2004-03-31
  • 打赏
  • 举报
回复
如果Active := False; 和Active := True;没有什么特殊意义,我建议在循环结束后再Active := False;,而在每次Query.ExecSQL 后Active := True;


r_james 2004-03-31
  • 打赏
  • 举报
回复
Active := False;的目的是什么?

Active := False;后,数据本地数据集已经切断了和SERVER的联系;
重新Active := True;后,本地数据集是空的了;
不然你可以试一下:
begin
Active := False;
CommandText := StrServer + ' where Answer1='''
+ Trim(ADOQuery1.FieldByName('Anwser').AsString) +'''';
Active := True;
/////////////******************/////////////////
if (ADOQuery1.EOF = True)
then Showmessage('空了!');
else Showmessage('没空!');
/////////////******************/////////////////


end;
r_james 2004-03-31
  • 打赏
  • 举报
回复
Active := False; 的问题!
nyf1220 2004-03-31
  • 打赏
  • 举报
回复
你测试过我的代码吗??
你的daodataset是哪个??dm_query?
zhuangjunx 2004-03-31
  • 打赏
  • 举报
回复
帮你顶
meneter 2004-03-31
  • 打赏
  • 举报
回复
应该错在这句:
CommandText := StrServer + ' where Answer1='''
+ Trim(ADOQuery1.FieldByName('Anwser').AsString) +'''';
因为ADOQuery1已经被关闭, 不再是可用的. 建议ADOQuery1循环里的再次查询不再重复使用ADOQuery1, 别外定义一个ADOQuery, 就象楼上说的一样

nyf1220 2004-03-30
  • 打赏
  • 举报
回复

with adoquery1 do
begin
while not Eof do
begin
Com_select_Id.Items.Add(trim(ADOQuery1.FieldByName('code').AsString));
Com_select_name.Items.Add(trim(ADOQuery1.FieldByName('Anwser').AsString));
Dm_query.close;
Dm_query.CommandText := StrServer + ' where Answer1='''+ Trim(ADOQuery1.FieldByName('Anwser').AsString) +'''';
Dm_query.open;
Amout:=Dm_Query.Ads_v_Record.RecordCount;
Memo1.Lines.Text := Memo1.Lines.Text + #13+'<<'+trim(ADOQuery1.FieldByName('Anwser').AsString)+'>>'+' 此选项的点击次数为:'+inttostr(Amount)+'人次';
Next;
end;
Close;
end;
sxy_9761 2004-03-29
  • 打赏
  • 举报
回复
ADO各个表之间是否有关联问题,这段代码太少,再来点。
大猫天天快乐 2004-03-29
  • 打赏
  • 举报
回复
StrServer是什么?
hunterht 2004-03-29
  • 打赏
  • 举报
回复
从你的描述来看好像没有什么逻辑错误,把完整的代码段贴出来看看
hunterht 2004-03-29
  • 打赏
  • 举报
回复
to hushaoshu2(西门吹雪):人家是两个不同的Query(一个是ADOQuery,一个是ADODataSet?),呵呵

zgq19801123 2004-03-29
  • 打赏
  • 举报
回复
up
zgq19801123 2004-03-28
  • 打赏
  • 举报
回复
好象还没用啊
  • 打赏
  • 举报
回复
笨啊,你那个ADOQuery关闭了再打开,你以为指针还在那个位置么?错,重新Active之后,指针肯定回到第一个了!!!
建议你用TBookMark,在Active:=false之前先记下当前的位置(用myBookMark:=ADOQuery1.getBookMark()),然后在Active:=true之后,用ADOBookMark.gotoBookMark(myBookMark)函数到达原先的位置,然后在next.
zgq19801123 2004-03-28
  • 打赏
  • 举报
回复
呜呜,就是要到中间的with啊!!!!
zgq19801123 2004-03-28
  • 打赏
  • 举报
回复
我去试一试
nyf1220 2004-03-28
  • 打赏
  • 举报
回复
with 欠套容易出错
你把中间的那个with要不去掉,
在测试一下看看
zgq19801123 2004-03-28
  • 打赏
  • 举报
回复
up
加载更多回复(9)

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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