//初始药品名称下拉菜单单的内容
      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.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移动游标,不然取出的都是第一条记录.//ADOQuery1.Fields[i].AsStringFields字段数,RecordCount是记录总数。所以会越界
      

  2.   

    1.删除ADOQuery1.ExecSQL;
    2.for i:=0 to adoquery1.RecordCount-1 do 
      begin
        combobox1.items.Add(ADOQuery1.Fields[i].AsString);
      end;改成:
    while not adoquery1.eof do
    begin
     combobox1.items.Add(ADOQuery1.Fields[0].AsString);
     adoquery1.next;
    end;只查询了"药品名称"1个字段,用Fields[0]就行了
    或者用ADOQuery1.FieldByName('药品名称').AsString
      

  3.   

     for i:=0 to adoquery1.RecordCount-1 do //循环取字段
      begin
      combobox1.items.Add(ADOQuery1.Fields[i].AsString); //把取得的字段填入下拉列表框中
      end;
    一个是查询的记录数,一个字段数(查出视图的列),是不一样的。
    推荐这样写比较好:
    adoquery1.First;
    while not adoquery1.Eof do
    begin
      // 根据字段名取你要的数据
      adoquery1.Next;  // 滚动到下一条记录 
    end;