有如下循环语句
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;失效。

解决方案 »

  1.   

    我也知道是异常退出,肯定是with Dm_query,Dm_Query.Ads_v_Record   do
                begin
                Active := False;
                CommandText := StrServer + ' where Answer1='''
                   + Trim(ADOQuery1.FieldByName('Anwser').AsString) +'''';
                Active := True;
                end;
                有问题,不过不知道问题究竟出在那里啊?!
      

  2.   

    设个断点,跟踪到CommandText ,看这个里面是不是你想要的。
      

  3.   

    with 欠套容易出错
    你把中间的那个with要不去掉,
    在测试一下看看
      

  4.   

    呜呜,就是要到中间的with啊!!!!
      

  5.   

    笨啊,你那个ADOQuery关闭了再打开,你以为指针还在那个位置么?错,重新Active之后,指针肯定回到第一个了!!!
    建议你用TBookMark,在Active:=false之前先记下当前的位置(用myBookMark:=ADOQuery1.getBookMark()),然后在Active:=true之后,用ADOBookMark.gotoBookMark(myBookMark)函数到达原先的位置,然后在next.
      

  6.   

    to hushaoshu2(西门吹雪):人家是两个不同的Query(一个是ADOQuery,一个是ADODataSet?),呵呵
      

  7.   

    ADO各个表之间是否有关联问题,这段代码太少,再来点。
      

  8.   


    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;
      

  9.   

    应该错在这句:
                CommandText := StrServer + ' where Answer1='''
                   + Trim(ADOQuery1.FieldByName('Anwser').AsString) +'''';
    因为ADOQuery1已经被关闭, 不再是可用的. 建议ADOQuery1循环里的再次查询不再重复使用ADOQuery1, 别外定义一个ADOQuery, 就象楼上说的一样
      

  10.   

    你测试过我的代码吗??
    你的daodataset是哪个??dm_query?
      

  11.   

    Active := False; 的问题!
      

  12.   

    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;
      

  13.   

    如果Active := False; 和Active := True;没有什么特殊意义,我建议在循环结束后再Active := False;,而在每次Query.ExecSQL 后Active := True;