list index out of bounds(1)

YY_MM_DD 2008-11-03 10:56:55
这是怎么会越界?

function TForm1.ZHInverseEN(zhStr: String): String;
var
tempStr:String;
count :integer;
begin
with DM do
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select FIELD_DBNAME from TB0002_FIELD_INDEX where FIELD_TITLE=:aa');
ADOQuery2.Parameters.Items[0].Value:=zhStr;
ADOQuery2.Open;
ADOQUery2.First;
while not ADOQuery2.Eof do
begin
tempStr:= ADOQuery2.Fields.Fields[0].Value;
result:= tempStr;
ADOQuery2.Next;
end;
end;
end;

。。。。。。。。。。
。。。。。。。。。。。。
for count:=0 to listbox.Count-1 do
begin
tempStrList.Append(self.ZHInverseEN(listbox.Items.Strings[count]));--问题处
end;
。。。。。。。。。。。。。
...全文
196 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
kye_jufei 2008-11-05
  • 打赏
  • 举报
回复
越界?
设置断点跟踪调试一下~~~
wjbwjb 2008-11-04
  • 打赏
  • 举报
回复
ADOQuery2.SQL.Add('select FIELD_DBNAME from TB0002_FIELD_INDEX where FIELD_TITLE=:aa');
aa没有符值
数据连接错误,连接了没执行的数据
auqfiudh 2008-11-04
  • 打赏
  • 举报
回复
这是做什么 用 的.... 我在读取权限时也出现过这个错误.原因是 超出
huanghua 2008-11-04
  • 打赏
  • 举报
回复
procedure TStringList.InsertObject(Index: Integer; const S: string;
AObject: TObject);
begin
if Sorted then Error(@SSortedListError, 0);
if (Index < 0) or (Index > FCount) then Error(@SListIndexError Index);
InsertItem(Index, S, AObject);
end;
@SListIndexError =List index out of bounds (%d)

就是说你插入的索引当大于或者等于Tstringlist对象里的函数就会出现这个错误。
自己排错下。我一般用ADD
YY_MM_DD 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hj3000 的回复:]
tempStrList.Append(self.ZHInverseEN(listbox.Items.Strings[count]));--没有什么意义
你是想把记录逐条写到listbox还是写到tempStrList?
你说出你的想法大家才能帮你
[/Quote]
我就是你说的意思。。。难道append()方法不对?
应该listbox项的索引是从0开始,listbox.count-1结束呀
我也用showmessage(count)跟踪过数据呀
也可以显示呀,就是到了最后一顼,就出那个错误。。
郁闷。。。。
谢谢大家的支持呀
YY_MM_DD 2008-11-03
  • 打赏
  • 举报
回复

function TForm1.getQueryStrList(listbox: TListBox):TStringList;
var
tempStrList:TStringList;
count:integer;
begin
tempStrList := TStringList.Create();--我也有create();好象没有你说的create(nil)方法
for count:=0 to listbox.Count-1 do
begin
tempStrList.Append(self.ZHInverseEN(listbox.Items.Strings[count]));
end;
result:=tempStrList;
end;
panrongzeng 2008-11-03
  • 打赏
  • 举报
回复
咦。楼上哥们升星了,不散分不厚道哦,哈哈
fangsp 2008-11-03
  • 打赏
  • 举报
回复
for count:=0 to listbox.Count-1 do
begin
tempStrList.Append(self.ZHInverseEN(listbox.Items.Strings[count]));--问题处
end;
这是没有问题的
你在这段代码的前面加上这句话 试一下
tempStrList := TStringList.Create(nil);
估计是你的tempStrList没有创建
hj8090 2008-11-03
  • 打赏
  • 举报
回复
tempStrList.Append(self.ZHInverseEN(listbox.Items.Strings[count]));--没有什么意义
你是想把记录逐条写到listbox还是写到tempStrList?
你说出你的想法大家才能帮你
huanghua 2008-11-03
  • 打赏
  • 举报
回复
ADOQUery2.First;
把这个去掉试下。
HapBegin 2008-11-03
  • 打赏
  • 举报
回复

listbox中没有数据,

。。。。。。。。。。
。。。。。。。。。。。。
if listbox.count>0 then
for count:=0 to listbox.Count-1 do
begin
tempStrList.Append(self.ZHInverseEN(listbox.Items.Strings[count]));--问题处
end;
。。。。。。。。。。。。。
jerry8 2008-11-03
  • 打赏
  • 举报
回复
调试下看count为多少的时候报错
YY_MM_DD 2008-11-03
  • 打赏
  • 举报
回复
???????????
tjg5202 2008-11-03
  • 打赏
  • 举报
回复
貌似都不知道listbox是出自何处呢。。。。
YY_MM_DD 2008-11-03
  • 打赏
  • 举报
回复
我想问问题出在哪里,append不就是在TStringList追加记录?
报的错误应该是越界错呀
那在哪越界,谢谢,麻烦了
CaiBirdy 2008-11-03
  • 打赏
  • 举报
回复
    ADOQUery2.First;
while not ADOQuery2.Eof do
begin
tempStr:= ADOQuery2.Fields.Fields[0].Value;
result:= tempStr;
ADOQuery2.Next;
end;


这里没啥意义,没断点

还有
for count:=0 to listbox.Count-1 do
begin
tempStrList.Append(self.ZHInverseEN(listbox.Items.Strings[count]));
end;
result:=tempStrList;

不要用Append,用add,不知你用append的意图在哪。。。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧