关于使用checklistbox出现的问题 |
尚未結案
|
liangzai
初階會員 發表:77 回覆:91 積分:33 註冊:2004-08-13 發送簡訊給我 |
请教各位前辈:
小弟现在使用checklistbox来显示oracle 9i中一些table的数据。
比如说其中一个例子:
......
self.SQLStoredProc9.ExecProc;
hmax:=bcdtointeger(SQLStoredProc9.Params[0].AsFMTBCD);
(hmax就是该table的记录数)
setlength(htemp1,hmax 1);
self.SQLQuery2.Open;
sqlquery2.First;
i:=1;
while not sqlquery2.Eof do
begin
htemp1[i].empno:=sqlquery2.Fields[0].AsString;
htemp1[i].lname:=sqlquery2.Fields[1].AsString;
htemp1[i].gname:=sqlquery2.Fields[2].AsString;
htemp1[i].cname:=sqlquery2.Fields[3].AsString;
htemp1[i].sect:=sqlquery2.Fields[4].Asstring;
htemp1[i].crp:=sqlquery2.Fields[5].AsString;
sqlquery2.Next;
i:=i 1;
end; self.CheckListBox2.Items.Clear;
self.CheckListBox2.Items.BeginUpdate;
for i:=1 to hmax ------(1)
begin
self.CheckListBox2.Items.Append(
format('%-7s|%-16s|%-25s|%-13s|%-10s|%-33s',[htemp1[i].empno,htemp1[i].lname,htemp1[i].gname,htemp1[i].cname,htemp1[i].sect,htemp1[i].crp])
);
...... 通过这种方式显示数据,如果该table被清空,也就是hmax=0时,则会出现错误:‘List index out of bounds (0)’,
如果我把上面code中的(1)处改为for i:=0 to hmax,则checklistbox中就会在最开始增加一条无用的记录,而这条记录会影响到table的记录号,从而影响到对正常记录的修改,删除等。
尝试过当hmax=0时,不刷新checklistbox,反之刷新,但是仍然出现同样错误。 请那位前辈指点一下,谢谢!
|
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
htemp1 的下届是从 0 开始的,所以你必须从0开始。 例如你的程序这样写:
for i:=0 to hmax-1 do begin self.CheckListBox2.Items.Append( format('%-7s|%-16s|%-25s|%-13s|%-10s|%-33s',[htemp1[i].empno,htemp1[i].lname,htemp1[i].gname,htemp1[i].cname,htemp1[i].sect,htemp1[i].crp]) ); ...... |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
補充:
hmax:=bcdtointeger(SQLStoredProc9.Params[0].AsFMTBCD); (hmax就是該table的記錄數) setlength(htemp1,hmax); self.SQLQuery2.Open; sqlquery2.First; i:=0; while not sqlquery2.Eof do begin htemp1[i].empno:=sqlquery2.Fields[0].AsString; htemp1[i].lname:=sqlquery2.Fields[1].AsString; htemp1[i].gname:=sqlquery2.Fields[2].AsString; htemp1[i].cname:=sqlquery2.Fields[3].AsString; htemp1[i].sect:=sqlquery2.Fields[4].Asstring; htemp1[i].crp:=sqlquery2.Fields[5].AsString; sqlquery2.Next; i:=i 1; end; self.CheckListBox2.Items.Clear; self.CheckListBox2.Items.BeginUpdate; for i:=0 to hmax -1 do With htemp1[i] do self.CheckListBox2.Items.Append( format('%-7s|%-16s|%-25s|%-13s|%-10s|%-33s',[empno,lname,gname,cname,sect,crp]) ...如果再不改錯誤的話!邏輯錯誤被允許的情況下。 在 For 前加一條 if hMax>0 then .. ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~ |
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |