D
dylb
Unregistered / Unconfirmed
GUEST, unregistred user!
下列程序原来是没有加事务处理语句的,可以正常Insert数据到几个表中
但是在增加了事务处理语句后就无法Insert数据了,并且RollbackTrans后面的错误提示窗口
也没有显示,程序有点长,请各位高手指点一下!谢谢!!!!
追加: 进行单步调试时查询完全正确执行,及到了
PartNoDM.lhSQLADOQ.Connection.CommitTrans;
这一句后就End结束,并没有触发 Except 后面的错误语句,但是数据还是没有 Insert到数据库中
procedure TPartNoAddForm.AddPartNO;
var
i,ID:integer;
begin
if PartNoDM.lhSQLADOQ.Connection.InTransaction then
PartNoDM.lhSQLADOQ.Connection.CommitTrans;
PartNoDM.lhSQLADOQ.Connection.BeginTrans;
try
PartNoDM.lhSQLADOQ.close;
PartNoDM.lhSQLADOQ.sql.Clear;
PartNoDM.lhSQLADOQ.sql.Add('Insert 料号_基本资料表(料号名称,品名,料号类别,生产类别,属性,录入人员,录入日期)');
PartNoDM.lhSQLADOQ.sql.Add('valuesP0,1,2,3,4,5,6)');
PartNoDM.lhSQLADOQ.sql.Add('select @@Identity as ID');
PartNoDM.lhSQLADOQ.parameters[0].Value:=lhmcEdit.Text;
PartNoDM.lhSQLADOQ.parameters[1].Value:=pmggEdit.Text;
PartNoDM.lhSQLADOQ.parameters[2].Value:=lhlbCBox.Text;
PartNoDM.lhSQLADOQ.parameters[3].Value:=sclbCBox.Text;
PartNoDM.lhSQLADOQ.parameters[4].Value:='新稿';
PartNoDM.lhSQLADOQ.parameters[5].Value:='';
PartNoDM.lhSQLADOQ.parameters[6].Value:=now;
PartNoDM.lhSQLADOQ.Open;
ID:=PartNoDM.lhSQLADOQ.fieldbyname('ID').AsInteger;
PartNoDM.lhSQLADOQ.sql.Clear;
PartNoDM.lhSQLADOQ.sql.Add('Insert 客户_料号对应表(客户ID,料号ID) valuesP0,1)');
PartNoDM.lhSQLADOQ.parameters[0].Value:=integer(khmcCBox.Items.Objects[khmccbox.ItemIndex]);
PartNoDM.lhSQLADOQ.parameters[1].Value:=ID;
PartNoDM.lhSQLADOQ.ExecSQL;
PartNoDM.lhSQLADOQ.close;
PartNoDM.lhSQLADOQ.sql.Clear; //加上事务后,从这里开始就导致不再Insert数据了
PartNoDM.lhSQLADOQ.sql.Add('insert 料号_明细资料表(料号ID,长,宽,高,糊盒,糊盒方式,装订,装订方式)');
PartNoDM.lhSQLADOQ.sql.Add('valuesP0,1,2,3,4,5,6,7)');
PartNoDM.lhSQLADOQ.parameters[0].Value:=ID;
PartNoDM.lhSQLADOQ.parameters[1].Value:=cdEdit.Text;
PartNoDM.lhSQLADOQ.parameters[2].Value:=kdEdit.Text;
PartNoDM.lhSQLADOQ.parameters[3].value:=gdEdit.Text;
PartNoDM.lhSQLADOQ.parameters[4].Value:=hhCBox.Checked;
PartNoDM.lhSQLADOQ.parameters[5].Value:=hhfsCBox.Text;
PartNoDM.lhSQLADOQ.parameters[6].Value:=zdCBox.Checked;
PartNoDM.lhSQLADOQ.parameters[7].Value:=zdfsCBox.Text;
PartNoDM.lhSQLADOQ.ExecSQL;
PartNoDM.lhSQLADOQ.Close;
PartNoDM.lhSQLADOQ.SQL.Clear;
PartNoDM.lhSQLADOQ.SQL.Add('Insert 料号_部件资料表(料号ID,部件名称,材质ID,印刷,PS版ID,颜色名称,印刷面数,正面色数,');
PartNoDM.lhSQLADOQ.SQL.Add('反面色数,印刷长度,印刷宽度,台数,模数,上光,上光方式,裱浪,裱浪方式,裱浪材质,裱浪长度,');
PartNoDM.lhSQLADOQ.SQL.Add('裱浪宽度,轧盒,刀模ID,裁切,裁切长度,裁切宽度,折纸,折纸方式,单独打印,关键部件,委外,附件)');
PartNoDM.lhSQLADOQ.SQL.Add('valuesP0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,');
PartNoDM.lhSQLADOQ.SQL.Add('18,19,20,21,22,23,24,25,26,27,28,29,30)');
for i:=0 to bjPageControl.PageCount-1 do
begin
with FindComponent('bj'+bjpageControl.Pages.Name) as TPartFrame do
begin
PartNoDM.lhSQLADOQ.Parameters[0].Value:=ID;
PartNoDM.lhSQLADOQ.Parameters[1].Value:=bjmcEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[2].Value:=mzczEdit.Tag;
PartNoDM.lhSQLADOQ.Parameters[3].Value:=ysCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[4].Value:=psbhEdit.Tag;
PartNoDM.lhSQLADOQ.Parameters[5].Value:=ysmcCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[6].Value:=smRBtn.Checked;
PartNoDM.lhSQLADOQ.Parameters[7].Value:=zmEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[8].Value:=fmEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[9].Value:=yscdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[10].Value:=yskdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[11].Value:=tsEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[12].Value:=msEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[13].Value:=sgCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[14].Value:=sgfsCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[15].Value:=blCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[16].Value:=blfsCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[17].Value:=blczCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[18].Value:=blcdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[19].Value:=blkdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[20].Value:=zhCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[21].Value:=dmEdit.Tag;
PartNoDM.lhSQLADOQ.Parameters[22].Value:=cqCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[23].Value:=cqcdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[24].Value:=cqkdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[25].Value:=zzCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[26].Value:=zzfsCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[27].Value:=dddyCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[28].Value:=gjbjCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[29].Value:=wwjgCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[30].Value:=fjCBox.Checked;
PartNoDM.lhSQLADOQ.ExecSQL;
end;
end;
PartNoDM.lhSQLADOQ.close;
PartNoDM.lhSQLADOQ.Connection.CommitTrans;
except
PartNoDM.lhSQLADOQ.Connection.RollbackTrans;
messagedlg('由于数据库突发性错误,新增料号资料的请求被取消,请重新尝试',mterror,[mbok],0);
end;
end;
但是在增加了事务处理语句后就无法Insert数据了,并且RollbackTrans后面的错误提示窗口
也没有显示,程序有点长,请各位高手指点一下!谢谢!!!!
追加: 进行单步调试时查询完全正确执行,及到了
PartNoDM.lhSQLADOQ.Connection.CommitTrans;
这一句后就End结束,并没有触发 Except 后面的错误语句,但是数据还是没有 Insert到数据库中
procedure TPartNoAddForm.AddPartNO;
var
i,ID:integer;
begin
if PartNoDM.lhSQLADOQ.Connection.InTransaction then
PartNoDM.lhSQLADOQ.Connection.CommitTrans;
PartNoDM.lhSQLADOQ.Connection.BeginTrans;
try
PartNoDM.lhSQLADOQ.close;
PartNoDM.lhSQLADOQ.sql.Clear;
PartNoDM.lhSQLADOQ.sql.Add('Insert 料号_基本资料表(料号名称,品名,料号类别,生产类别,属性,录入人员,录入日期)');
PartNoDM.lhSQLADOQ.sql.Add('valuesP0,1,2,3,4,5,6)');
PartNoDM.lhSQLADOQ.sql.Add('select @@Identity as ID');
PartNoDM.lhSQLADOQ.parameters[0].Value:=lhmcEdit.Text;
PartNoDM.lhSQLADOQ.parameters[1].Value:=pmggEdit.Text;
PartNoDM.lhSQLADOQ.parameters[2].Value:=lhlbCBox.Text;
PartNoDM.lhSQLADOQ.parameters[3].Value:=sclbCBox.Text;
PartNoDM.lhSQLADOQ.parameters[4].Value:='新稿';
PartNoDM.lhSQLADOQ.parameters[5].Value:='';
PartNoDM.lhSQLADOQ.parameters[6].Value:=now;
PartNoDM.lhSQLADOQ.Open;
ID:=PartNoDM.lhSQLADOQ.fieldbyname('ID').AsInteger;
PartNoDM.lhSQLADOQ.sql.Clear;
PartNoDM.lhSQLADOQ.sql.Add('Insert 客户_料号对应表(客户ID,料号ID) valuesP0,1)');
PartNoDM.lhSQLADOQ.parameters[0].Value:=integer(khmcCBox.Items.Objects[khmccbox.ItemIndex]);
PartNoDM.lhSQLADOQ.parameters[1].Value:=ID;
PartNoDM.lhSQLADOQ.ExecSQL;
PartNoDM.lhSQLADOQ.close;
PartNoDM.lhSQLADOQ.sql.Clear; //加上事务后,从这里开始就导致不再Insert数据了
PartNoDM.lhSQLADOQ.sql.Add('insert 料号_明细资料表(料号ID,长,宽,高,糊盒,糊盒方式,装订,装订方式)');
PartNoDM.lhSQLADOQ.sql.Add('valuesP0,1,2,3,4,5,6,7)');
PartNoDM.lhSQLADOQ.parameters[0].Value:=ID;
PartNoDM.lhSQLADOQ.parameters[1].Value:=cdEdit.Text;
PartNoDM.lhSQLADOQ.parameters[2].Value:=kdEdit.Text;
PartNoDM.lhSQLADOQ.parameters[3].value:=gdEdit.Text;
PartNoDM.lhSQLADOQ.parameters[4].Value:=hhCBox.Checked;
PartNoDM.lhSQLADOQ.parameters[5].Value:=hhfsCBox.Text;
PartNoDM.lhSQLADOQ.parameters[6].Value:=zdCBox.Checked;
PartNoDM.lhSQLADOQ.parameters[7].Value:=zdfsCBox.Text;
PartNoDM.lhSQLADOQ.ExecSQL;
PartNoDM.lhSQLADOQ.Close;
PartNoDM.lhSQLADOQ.SQL.Clear;
PartNoDM.lhSQLADOQ.SQL.Add('Insert 料号_部件资料表(料号ID,部件名称,材质ID,印刷,PS版ID,颜色名称,印刷面数,正面色数,');
PartNoDM.lhSQLADOQ.SQL.Add('反面色数,印刷长度,印刷宽度,台数,模数,上光,上光方式,裱浪,裱浪方式,裱浪材质,裱浪长度,');
PartNoDM.lhSQLADOQ.SQL.Add('裱浪宽度,轧盒,刀模ID,裁切,裁切长度,裁切宽度,折纸,折纸方式,单独打印,关键部件,委外,附件)');
PartNoDM.lhSQLADOQ.SQL.Add('valuesP0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,');
PartNoDM.lhSQLADOQ.SQL.Add('18,19,20,21,22,23,24,25,26,27,28,29,30)');
for i:=0 to bjPageControl.PageCount-1 do
begin
with FindComponent('bj'+bjpageControl.Pages.Name) as TPartFrame do
begin
PartNoDM.lhSQLADOQ.Parameters[0].Value:=ID;
PartNoDM.lhSQLADOQ.Parameters[1].Value:=bjmcEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[2].Value:=mzczEdit.Tag;
PartNoDM.lhSQLADOQ.Parameters[3].Value:=ysCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[4].Value:=psbhEdit.Tag;
PartNoDM.lhSQLADOQ.Parameters[5].Value:=ysmcCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[6].Value:=smRBtn.Checked;
PartNoDM.lhSQLADOQ.Parameters[7].Value:=zmEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[8].Value:=fmEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[9].Value:=yscdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[10].Value:=yskdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[11].Value:=tsEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[12].Value:=msEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[13].Value:=sgCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[14].Value:=sgfsCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[15].Value:=blCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[16].Value:=blfsCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[17].Value:=blczCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[18].Value:=blcdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[19].Value:=blkdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[20].Value:=zhCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[21].Value:=dmEdit.Tag;
PartNoDM.lhSQLADOQ.Parameters[22].Value:=cqCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[23].Value:=cqcdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[24].Value:=cqkdEdit.Text;
PartNoDM.lhSQLADOQ.Parameters[25].Value:=zzCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[26].Value:=zzfsCBox.Text;
PartNoDM.lhSQLADOQ.Parameters[27].Value:=dddyCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[28].Value:=gjbjCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[29].Value:=wwjgCBox.Checked;
PartNoDM.lhSQLADOQ.Parameters[30].Value:=fjCBox.Checked;
PartNoDM.lhSQLADOQ.ExecSQL;
end;
end;
PartNoDM.lhSQLADOQ.close;
PartNoDM.lhSQLADOQ.Connection.CommitTrans;
except
PartNoDM.lhSQLADOQ.Connection.RollbackTrans;
messagedlg('由于数据库突发性错误,新增料号资料的请求被取消,请重新尝试',mterror,[mbok],0);
end;
end;