我想将数据库中的DwName字段的数据读出来放到一个TStringList里,为什么会出现
越界的错误  'List Index Out Of Bounds(4) '的错误,我的数据库中有4条纪录
程序如下“
Procedure GetNameList();
Begin
  With MyData.AdoQuery1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('Select Distint DwName from Goods');
    Open;
  end; 
  MyData.AdoQuery1.first;
  While Not MyData.AdoQuery1.Eof do
  begin
    NameList.Add(MyData.AdoQuery1.FieldByName('DwName').AsString);
    MyData.AdoQuery1.Next; 
  end;
End;
当然,在实际应用中,我的NameList是个全局变量, 在form.Show中Create,在Form中Free,每当这个过程结束时出现那个错误,请各位帮忙!谢谢!

解决方案 »

  1.   

    NameList是怎么声明和配置的??
      

  2.   

    NameList:TstringList;
    在本窗体的Private里,只是让他在本窗体里使用Procedure Form1.Show(...);
    begin
      NameList:=TstringList.create;
    end;Procedure Form1.Close(...);
    Begin
     NameList.Free;
    end;
      

  3.   

    NameList:TstringList;定义自本窗体的Private里
    procedure form1.show(..)
    begin
    NameList:=TStringList.create;
    GetNameList;
    end;Procedure Form1.Close(..);
    begin
    NameList.free;
    end;
      

  4.   

    不要放在OnShow事件里, 会多次Create的.放在Form的Create方法或者OnCreate事件里.下标越界似乎不应该出现. 具体哪一行?
      

  5.   

    檢查MyData.AdoQuery1.FieldByName('DwName').AsString,可能有null值吧!!!因為,我覺得人的代碼沒什麼問題啊!!
      

  6.   

    Delphi的索引是从0开始的,你不会用到了NameList.strings[4]一类的代码了吧!