数据集组件的更新与回滚问题。(50分)

  • 主题发起人 主题发起人 huzhaowei
  • 开始时间 开始时间
H

huzhaowei

Unregistered / Unconfirmed
GUEST, unregistred user!
请问用adotable,adoquery控件,如何进行数据的更新与回滚的,假如有如下一段代码:
try
with DataModule1.product do
begin
Append;
FieldByName('产品类号').AsString:=edit1.Text;
FieldByName('产品编号').AsString:=edit1.Text+'.'+(edit5.Text);
FieldByName('产品名称').AsString:=trim(edit2.Text);
FieldByName('产品类别').AsString:=trim(edit1.Text);
FieldByName('成品率').AsString:=trim(edit6.Text);
FieldByName('规格型号').AsString:=trim(edit3.Text);
FieldByName('计量单位').AsString:=trim(edit7.Text);
FieldByName('产品说明').AsString:=trim(edit8.Text);
FieldByName('产品图片').AsString:=pimagepath;
FieldByName('最大单位').AsString:=trim(edit14.Text);
FieldByName('最小单位').AsString:=trim(edit15.Text);
FieldByName('换算关系').AsFloat:=strtofloat(trim(edit16.Text));
FieldByName('是否审核').AsString:='0';
Post;
end;
if stringgrid1.Cells[0,1]<>'' then
begin
for i := 1 to StringGrid1.RowCount -2 do
begin
DataModule1.productc.Append;
DataModule1.productc.FieldByName('产品编号').AsString:=edit1.Text+'.'+(edit5.Text);
DataModule1.productc.FieldByName('材料编号').AsString:=trim(StringGrid1.Cells[0,i]);
DataModule1.productc.FieldByName('材料名称').AsString:=trim(StringGrid1.Cells[1,i]);
DataModule1.productc.FieldByName('材料价格').AsString:=trim(StringGrid1.Cells[2,i]);
DataModule1.productc.FieldByName('材料数量').AsString:=trim(StringGrid1.Cells[3,i]);
DataModule1.productc.FieldByName('材料单位').AsString:=trim(StringGrid1.Cells[4,i]);
DataModule1.productc.FieldByName('材料用途').AsString:=trim(StringGrid1.Cells[5,i]);
DataModule1.productc.Post;
end;
end;
except
showmessage('添加数据失败!');
exit;
end;
如果下一个表productc提交错误,或未能提交,则将上一个表的提交取消,应当如何回滚。
 
TAdoConnection.BeginTrans;
try
.......
TAdoConnection.CommitTrans;
except
TAdoConnection.RollbackTrans;
end;
 
直接用Tadotable,Tadoquery,有没有相关的这种功能呀。
 
就象楼上说的,用事物进行控制
adoconnnection有。

TAdoConnection.BeginTrans; //加在这里
try
with DataModule1.product do
begin
Append;
FieldByName('产品类号').AsString:=edit1.Text;
FieldByName('产品编号').AsString:=edit1.Text+'.'+(edit5.Text);
FieldByName('产品名称').AsString:=trim(edit2.Text);
FieldByName('产品类别').AsString:=trim(edit1.Text);
FieldByName('成品率').AsString:=trim(edit6.Text);
FieldByName('规格型号').AsString:=trim(edit3.Text);
FieldByName('计量单位').AsString:=trim(edit7.Text);
FieldByName('产品说明').AsString:=trim(edit8.Text);
FieldByName('产品图片').AsString:=pimagepath;
FieldByName('最大单位').AsString:=trim(edit14.Text);
FieldByName('最小单位').AsString:=trim(edit15.Text);
FieldByName('换算关系').AsFloat:=strtofloat(trim(edit16.Text));
FieldByName('是否审核').AsString:='0';
Post;
end;
if stringgrid1.Cells[0,1]<>'' then
begin
for i := 1 to StringGrid1.RowCount -2 do
begin
DataModule1.productc.Append;
DataModule1.productc.FieldByName('产品编号').AsString:=edit1.Text+'.'+(edit5.Text);
DataModule1.productc.FieldByName('材料编号').AsString:=trim(StringGrid1.Cells[0,i]);
DataModule1.productc.FieldByName('材料名称').AsString:=trim(StringGrid1.Cells[1,i]);
DataModule1.productc.FieldByName('材料价格').AsString:=trim(StringGrid1.Cells[2,i]);
DataModule1.productc.FieldByName('材料数量').AsString:=trim(StringGrid1.Cells[3,i]);
DataModule1.productc.FieldByName('材料单位').AsString:=trim(StringGrid1.Cells[4,i]);
DataModule1.productc.FieldByName('材料用途').AsString:=trim(StringGrid1.Cells[5,i]);
DataModule1.productc.Post;
end;
end;
TAdoConnection.CommitTrans; //加在这里
except
TAdoConnection.RollbackTrans; //加在这里
showmessage('添加数据失败!');
exit;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
658
import
I
I
回复
0
查看
786
import
I
后退
顶部