帮我看看那儿错了?(200分)

  • 主题发起人 主题发起人 少爷的拐杖
  • 开始时间 开始时间

少爷的拐杖

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm7.SpeedButton7Click(Sender: TObject);
var
i,loop:integer;
begin
if application.MessageBox('可以将出库清单中的药品入二级库吗?','药品出库登记',mb_yesno+mb_iconquestion)=6 then
begin
loop:=ListView2.Items.Count-1;
Form1.Database1.StartTransaction;
try
for i:=0 to loop do
begin
showmessage('当前行号'+inttostr(i));
//修改基本药品库
UpData_Xiyao_ku_out.ParamByName('库存').AsInteger:=StrToInt(Listview2.Items.Item.SubItems.Strings[4]);
UpData_Xiyao_ku_out.ParamByName('OLD_药品名称').AsString:=Listview2.Items.Item.Caption;
UpData_Xiyao_ku_out.ParamByName('OLD_规格').AsString:=Listview2.Items.Item.SubItems.Strings[0];
UpData_Xiyao_ku_out.ParamByName('OLD_单位').AsString:=Listview2.Items.Item.SubItems.Strings[1];
Updata_Xiyao_ku_out.ExecSQL;
showmessage(inttostr(i)+'---'+'修改基本药库通过!');
//登记出库单据
Updata_Xiyao_out.ParamByName('药品名称').AsString:=ListView2.Items.Item.Caption;
Updata_Xiyao_out.ParamByName('规格').AsString:=Listview2.Items.Item.SubItems.Strings[0];
Updata_Xiyao_out.ParamByName('单位').AsString:=Listview2.Items.Item.SubItems.Strings[1];
Updata_Xiyao_out.ParamByName('批发价').AsFloat:=StrToFloat(Listview2.Items.Item.SubItems.Strings[2]);
Updata_Xiyao_out.ParamByName('零售价').AsFloat:=StrToFloat(Listview2.Items.Item.SubItems.Strings[3]);
Updata_Xiyao_out.ParamByName('出库数量').AsInteger:=StrToInt(Listview2.Items.Item.SubItems.Strings[4]);
Updata_Xiyao_out.ParamByName('药品去向').AsString:=Listview2.Items.Item.SubItems.Strings[5];
Updata_Xiyao_out.ParamByName('出库日期').AsDateTime:=StrToDate(Listview2.Items.Item.SubItems.Strings[6]);
Updata_Xiyao_out.ExecSQL;
showmessage(inttostr(i)+'---'+'修改出药库通过!');
//修改二级药品库
Query_Set.Close;
Query_Set.SQL.Clear;
Query_Set.SQL.Add('select count(药品名称) from XiYao_ku_Second');
Query_Set.SQL.Add('where 药品名称='''+ListView2.Items.Item.Caption+'''');
Query_Set.SQL.Add('and 规格='''+Listview2.Items.Item.SubItems.Strings[0]+'''');
Query_Set.SQL.Add('and 单位='''+Listview2.Items.Item.SubItems.Strings[1]+'''');
Query_Set.Open;
if Query_Set.Fields.Fields[0].AsInteger>0 then
begin //药品已经存在,修改数据
Updata_Query_Second.Close;
Updata_Query_Second.SQL.Clear;
Updata_Query_Second.SQL.Text:=ListBox2.Items.Strings[0];
Updata_Query_Second.ParamByName('OLD_药品名称').AsString:=Listview2.Items.Item.Caption;
Updata_Query_Second.ParamByName('OLD_规格').AsString:=Listview2.Items.Item.SubItems.Strings[0];
Updata_Query_Second.ParamByName('OLD_单位').AsString:=Listview2.Items.Item.SubItems.Strings[1];
end
else //药品不存在,新增加数据
begin
Updata_Query_Second.Close;
Updata_Query_Second.SQL.Clear;
Updata_Query_Second.SQL.Text:=Listbox2.Items.Strings[1];
end;
Updata_Query_Second.ParamByName('药品名称').AsString:=ListView2.Items.Item.Caption;
Updata_Query_Second.ParamByName('规格').AsString:=Listview2.Items.Item.SubItems.Strings[0];
Updata_Query_Second.ParamByName('单位').AsString:=Listview2.Items.Item.SubItems.Strings[1];
Updata_Query_Second.ParamByName('库存').AsInteger:=StrToInt(Listview2.Items.Item.SubItems.Strings[4]);
Updata_Query_Second.ParamByName('批发价').AsFloat:=StrToFloat(Listview2.Items.Item.SubItems.Strings[2]);
Updata_Query_Second.ParamByName('零售价').AsFloat:=StrToFloat(Listview2.Items.Item.SubItems.Strings[3]);
Updata_Query_Second.ParamByName('有效期').AsDateTime:=StrToDate(Listview2.Items.Item.SubItems.Strings[7]);
Updata_Query_Second.ParamByName('拥有单位').AsString:=Listview2.Items.Item.SubItems.Strings[5];
Updata_Query_Second.ParamByName('类别').AsString:=Listview2.Items.Item.SubItems.Strings[8];
Updata_Query_Second.ExecSQL;
showmessage(inttostr(i)+'---'+'修改二级药库通过!');
end;
except //写入时发生错误
Form1.Database1.Rollback;
showmessage('错误!');
exit;
end;
Form1.Database1.Commit;
ListView2.Items.Clear;
end;
end;
我加了很多showmessage()看看那儿执行错误。看到循环的第一次顺利完成。
可是到了第二次就出了问题了。只能显示出第一个showmessage。
可是我看了半天也看不出来那里错了。
大家帮帮忙吧
 
估计是你的某个数组越界了。建议去掉异常处理运行,看看出现何种错误,或者将第二个showmessage
以前的语句,注释掉几句,看看会有什么结果。
 
to:韧峰
如果越界会报错的。可是它就是一个等待的光标在那里,好像死循环了一样。
 
用逐步跟踪(trace into)判断到底是那个语句出错,这应该比showmessage精确多了
 
用F7,F8跟踪看看。
 
当然有问题了,Commit的位置写错了吧,应该这样才对
procedure TForm7.SpeedButton7Click(Sender: TObject);
var
i, loop: integer;
begin
if application.MessageBox('可以将出库清单中的药品入二级库吗?', '药品出库登记', mb_yesno + mb_iconquestion) = 6 then
begin
loop := ListView2.Items.Count - 1;
Form1.Database1.StartTransaction;
try
for i := 0 to loop do
begin
showmessage('当前行号' + inttostr(i));
//修改基本药品库
UpData_Xiyao_ku_out.ParamByName('库存').AsInteger := StrToInt(Listview2.Items.Item.SubItems.Strings[4]);
UpData_Xiyao_ku_out.ParamByName('OLD_药品名称').AsString := Listview2.Items.Item.Caption;
UpData_Xiyao_ku_out.ParamByName('OLD_规格').AsString := Listview2.Items.Item.SubItems.Strings[0];
UpData_Xiyao_ku_out.ParamByName('OLD_单位').AsString := Listview2.Items.Item.SubItems.Strings[1];
Updata_Xiyao_ku_out.ExecSQL;
showmessage(inttostr(i) + '---' + '修改基本药库通过!');
//登记出库单据
Updata_Xiyao_out.ParamByName('药品名称').AsString := ListView2.Items.Item.Caption;
Updata_Xiyao_out.ParamByName('规格').AsString := Listview2.Items.Item.SubItems.Strings[0];
Updata_Xiyao_out.ParamByName('单位').AsString := Listview2.Items.Item.SubItems.Strings[1];
Updata_Xiyao_out.ParamByName('批发价').AsFloat := StrToFloat(Listview2.Items.Item.SubItems.Strings[2]);
Updata_Xiyao_out.ParamByName('零售价').AsFloat := StrToFloat(Listview2.Items.Item.SubItems.Strings[3]);
Updata_Xiyao_out.ParamByName('出库数量').AsInteger := StrToInt(Listview2.Items.Item.SubItems.Strings[4]);
Updata_Xiyao_out.ParamByName('药品去向').AsString := Listview2.Items.Item.SubItems.Strings[5];
Updata_Xiyao_out.ParamByName('出库日期').AsDateTime := StrToDate(Listview2.Items.Item.SubItems.Strings[6]);
Updata_Xiyao_out.ExecSQL;
showmessage(inttostr(i) + '---' + '修改出药库通过!');
//修改二级药品库
Query_Set.Close;
Query_Set.SQL.Clear;
Query_Set.SQL.Add('select count(药品名称) from XiYao_ku_Second');
Query_Set.SQL.Add('where 药品名称=''' + ListView2.Items.Item.Caption + '''');
Query_Set.SQL.Add('and 规格=''' + Listview2.Items.Item.SubItems.Strings[0] + '''');
Query_Set.SQL.Add('and 单位=''' + Listview2.Items.Item.SubItems.Strings[1] + '''');
Query_Set.Open;
if Query_Set.Fields.Fields[0].AsInteger > 0 then
begin //药品已经存在,修改数据
Updata_Query_Second.Close;
Updata_Query_Second.SQL.Clear;
Updata_Query_Second.SQL.Text := ListBox2.Items.Strings[0];
Updata_Query_Second.ParamByName('OLD_药品名称').AsString := Listview2.Items.Item.Caption;
Updata_Query_Second.ParamByName('OLD_规格').AsString := Listview2.Items.Item.SubItems.Strings[0];
Updata_Query_Second.ParamByName('OLD_单位').AsString := Listview2.Items.Item.SubItems.Strings[1];
end
else //药品不存在,新增加数据
begin
Updata_Query_Second.Close;
Updata_Query_Second.SQL.Clear;
Updata_Query_Second.SQL.Text := Listbox2.Items.Strings[1];
end;
Updata_Query_Second.ParamByName('药品名称').AsString := ListView2.Items.Item.Caption;
Updata_Query_Second.ParamByName('规格').AsString := Listview2.Items.Item.SubItems.Strings[0];
Updata_Query_Second.ParamByName('单位').AsString := Listview2.Items.Item.SubItems.Strings[1];
Updata_Query_Second.ParamByName('库存').AsInteger := StrToInt(Listview2.Items.Item.SubItems.Strings[4]);
Updata_Query_Second.ParamByName('批发价').AsFloat := StrToFloat(Listview2.Items.Item.SubItems.Strings[2]);
Updata_Query_Second.ParamByName('零售价').AsFloat := StrToFloat(Listview2.Items.Item.SubItems.Strings[3]);
Updata_Query_Second.ParamByName('有效期').AsDateTime := StrToDate(Listview2.Items.Item.SubItems.Strings[7]);
Updata_Query_Second.ParamByName('拥有单位').AsString := Listview2.Items.Item.SubItems.Strings[5];
Updata_Query_Second.ParamByName('类别').AsString := Listview2.Items.Item.SubItems.Strings[8];
Updata_Query_Second.ExecSQL;
showmessage(inttostr(i) + '---' + '修改二级药库通过!');
end;
Form1.Database1.Commit;//****************************************
except //写入时发生错误
Form1.Database1.Rollback;
showmessage('错误!');
exit;
end;
ListView2.Items.Clear;
end;
end;
 
不对,应该写成
...........
..............
...............
Updata_Query_Second.ExecSQL;
Form1.Database1.Commit;//****************************************
showmessage(inttostr(i) + '---' + '修改二级药库通过!');
end;
except //写入时发生错误
Form1.Database1.Rollback;
showmessage('错误!');
exit;
end;
ListView2.Items.Clear;
end;
end;
 
try
StartTransaction;
.
.
.
.
Commit;
except
Rollback;
.
.
end;
 
我眼花了。。。。
这个都没看到。谢谢各位了。
 
多人接受答案了。
 
后退
顶部