//初始药品名称下拉菜单单的内容
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select 药品名称');
  ADOQuery1.SQL.Add('from medicine where 用户号 =0');
  ADOQuery1.ExecSQL;
  ADOQuery1.Open;
  for i:=0 to adoquery1.RecordCount-1 do //循环取字段
  begin
  combobox1.items.Add(ADOQuery1.Fields[i].AsString); //把取得的字段填入下拉列表框中
  end;
报错:List index out of bounds (1)

解决方案 »

  1.   

    ADOQuery1.Fields[i].AsString  这一句是第I个字段啊,不是第I条记录,不要用 for循环,用while  ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select 药品名称');
      ADOQuery1.SQL.Add('from medicine where 用户号 =0');
      ADOQuery1.ExecSQL;
      ADOQuery1.Open;
      ADOQuery1.First;
      while not ADOQuery1.Eof do
      begin
        combobox1.items.Add(ADOQuery1.Fields[0].AsString); 
        ADOQuery1.Next;
      end;
      

  2.   

     ADOQuery1.ExecSQL;这一句可以不用
      

  3.   

    /初始药品名称下拉菜单单的内容
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select 药品名称');
      ADOQuery1.SQL.Add('from medicine where 用户号 =0');
    ADOQuery1.ExecSQL;-->ExecSQL用于UPDATE或INSERT语句,OPEN用于查询语句。不然会出错。
      ADOQuery1.Open;
      for i:=0 to adoquery1.RecordCount-1 do //循环取字段
      begin
      combobox1.items.Add(ADOQuery1.Fields[i].AsString);->按你的意思应该是改成ADOQuery1.Fields[0].AsString//或者ADOQuery1.FieldByName('药品名称').AsString
      ADOQuery1.Next;//就用Next移动游标,不然取出的都是第一条记录.
      end;
      

  4.   

    http://topic.csdn.net/u/20120425/19/127f0b5f-207d-49fa-9a18-618ef7364e0d.html?60672
      

  5.   

    with ADOQuery1 do
    begin
    Close;
    sql.Clear;
    sql.Add('select 药品名称 from medicine where 用户号 =0');
    open;
    while not adoquery1.Eof do
    begin
    combobox1.items.Add(ADOQuery1.FieldByName('药品名称').AsString);
    adoquery1.next;
    end;
    close;
    end;