笨死了,还是关于tlist的问题(50分)

  • 主题发起人 主题发起人 pjxy
  • 开始时间 开始时间
P

pjxy

Unregistered / Unconfirmed
GUEST, unregistred user!
一下我是想通过判断如果xm_id相同的成员则sfje相加,
//通过list.delete(k), 同时合并为一个新成员。
//(意思是假设list有三个成员,如果第2和第3条的xm_id 相同,则
//第2和第3条sfje相加,同时list变成两个成员)
用list.delete(k),提示出错.

procedure Tf_hj.BitBtn3Click(Sender: TObject);
var
i:integer;
j,k,id:integer;
s:currency;
begin
//如果处方列表没有处理就退出
if not cflb then
begin
exit;
end;

if not cflb then
begin
exit;
end;
for j:=0 to list.Count -1 do
begin
id:=cf(list.Items[j]^).xm_id;
s:=cf(list.Items[j]^).sfje;
for k:=j+1 to list.Count -1 do
if id=cf(list.Items[k]^).xm_id then
s:=s+cf(list.Items[k]^).sfje;
cf(list.Items[j]^).sfje:=s;
list.delete(k);
//一下我是想通过判断如果xm_id相同的成员则sfje相加,
//通过list.delete(k), 同时合并为一个新成员。
//(意思是假设有三个成员,如果第2和第3条的xm_id 相同,则
//第2和第3条sfje相加,同时变成两个成员)
end;
for j:=0 to list.Count -1 do
begin
with sp1 do
begin
ParamByName('@xm_id').AsInteger :=cf(list.Items[j]^).xm_id;
ParamByName('@sfje').AsCurrency :=cf(list.Items[j]^).sfje;
paramByname('@cfhm').AsString :='';
end;
sp1.ExecProc ;
cf(list.Items[j]^).cf_id:=sp1.parambyname('result').AsInteger;
cf(list.Items[j]^).cfhm :=sp1.parambyname('@cfhm').AsString;
end;
end;
 
你的逻辑实现有问题

要用while 不要用for ,因为用for 循环变量不能手工改变。
if id=cf(...).xmid then
begin
s := ...
cf().sfje := s
list.delete(k)
dec(k);
end;
 
还是不对。不知为啥?

j:=0;
while j<=list.Count-1 do
begin
id:=cf(list.Items[j]^).xm_id;
s:=cf(list.Items[j]^).sfje;
k:=m+1;
while k<=list.Count-1 do
begin
if id=cf(list.Items[k]^).xm_id then
begin
s:=s+cf(list.Items[k]^).sfje;
cf(list.Items[j]^).sfje:=s;
list.Delete(k);
inc(k);//我觉的用inc,用dec也不对
end;
inc(j);
end;

//循环是不是应该重新开始,(因为成员发生变化)
m:=0;
while m<=list.Count -1 do
with sp1 do
begin
ParamByName('@xm_id').AsInteger :=cf(list.Items[m]^).xm_id;
ParamByName('@sfje').AsCurrency :=cf(list.Items[m]^).sfje;
end;
sp1.ExecProc ;
cf(list.Items[m]^).cfhm :=sp1.parambyname('@cfhm').AsString;
inc(m);
end;
 
接受答案了.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
922
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部