报错List index out of bounds (1),越界异常。求解。

报错List index out of bounds (1),越界错误。。求解。。
//初始药品名称下拉菜单单的内容
  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)

------解决方案--------------------
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;
------解决方案--------------------
ADOQuery1.ExecSQL;这一句可以不用
------解决方案--------------------
/初始药品名称下拉菜单单的内容
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;
------解决方案--------------------
http://topic.csdn.net/u/20120425/19/127f0b5f-207d-49fa-9a18-618ef7364e0d.html?60672
------解决方案--------------------
记录数与列数 明显用法不正确呀
------解决方案--------------------
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;