我在写入第二次调用with ADOQuery1 do时报错,请问是为什么?难道with ADOQuery1 do不能多次使用吗?
procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
begin
with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select distinct type from alldata ');
   Open;
  end;
  for i:=0 to ADOQuery1.RecordCount-1 do
  begin
    ComboBox2.Items.Add(ADOQuery1.fieldbyname('type').AsString);
    ADOQuery1.Next;
  end;
  ComboBox2.ItemIndex:=0;
end;  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select distinct code from alldata where type="P-VIP 210/0.8 E20.7"');
   Open;
  end;
  for i:=0 to ADOQuery1.RecordCount-1 do
  begin
    ComboBox1.Items.Add(ADOQuery1.fieldbyname('code').AsString);
    ADOQuery1.Next;
  end;
  ComboBox1.ItemIndex:=0;
end;

解决方案 »

  1.   

    把第18行的 end; 去掉
      

  2.   

    procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
      with ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select distinct type from alldata ');
        Open;
      end;
      ComboBox2.Items.clear;
      while Not ADOQuery1.DataSource.DataSet.Eof do
      begin
        ComboBox2.Items.Add(ADOQuery1.fieldbyname('type').AsString);
        ADOQuery1.Next;
      end;
      ComboBox2.ItemIndex:=0;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var i:integer;
    begin
      with ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select distinct code from alldata where type="P-VIP 210/0.8 E20.7"');
       Open;
      end;
      ComboBox2.Items.clear;
      ADOQuery1.DataSource.DataSet.First;
      while Not ADOQuery1.DataSource.DataSet.Eof do
      begin
        ComboBox1.Items.Add(ADOQuery1.fieldbyname('code').AsString);
        ADOQuery1.Next;
      end;
      ComboBox1.ItemIndex:=0;
    end;  
      

  3.   

    把第二个的close去掉
      

  4.   

    多了一个Close
      

  5.   


    procedure TForm1.FormCreate(Sender: TObject);
    var
      i:integer;
    begin
      ComboBox1.Items.Clear;
      ComboBox2.Items.Clear;//这两句最好加上,当然如果确信它们为空的话,不加也行  with ADOQuery1 do
      begin
        Close;
        {SQL.Clear;
        SQL.Add('select distinct type from alldata ');
        这样是不是更简洁?}
        SQL.Text:='select distinct type from alldata';
        Open;
        First;   //First要加上,表示从第一项开始
        for i:=1 to RecordCount do //这样速度稍快点
        begin
          ComboBox2.Items.Add(Trim(Fieldbyname('type').AsString)); //加个Trim去掉两边的空格,显的更紧凑
          Next;
        end;
        ComboBox2.ItemIndex:=0;    Close;
        SQL.Text:='select distinct code from alldata where type="P-VIP 210/0.8 E20.7"';
        Open;
        First;
        for i:=1 to RecordCount do
        begin
          ComboBox1.Items.Add(Trim(Fieldbyname('code').AsString)); //加个Trim去掉两边的空格,显的更紧凑
          Next;
        end;
        ComboBox1.ItemIndex:=0;
      end;
    end;