重题多表更新(MTS),试了好多次还是不行(10分)

  • 主题发起人 主题发起人 ddzhouqian
  • 开始时间 开始时间
D

ddzhouqian

Unregistered / Unconfirmed
GUEST, unregistred user!
见下面代码,table2插入失败时,table1仍然能够存取数据,不明啊?也没分了!探讨吧
procedure TMTSData.Supply_Insert(var vDDatas: OleVariant;
out vDMsg: WideString);
var i:Integer;
begin
vDMsg:='1';
if VarIsArray(vDDatas) then
begin
//取出插入数据
i:=VarArrayLowBound(vDDatas,1);
try
//插入table1
DSP.DataSet.Active:=True;
DSP.DataSet.Append;
DSP.DataSet.FieldByName('Corp_Code').AsString:=vDDatas;
DSP.DataSet.FieldByName('Supplier_Code').AsString:=vDDatas[i+1];
DSP.DataSet.FieldByName('Supplier_Name').AsString:=vDDatas[i+2];
DSP.DataSet.FieldByName('Supplier_Address').AsString:=vDDatas[i+3];
DSP.DataSet.FieldByName('Link_Man').AsString:=vDDatas[i+4];
DSP.DataSet.FieldByName('Station').AsString:=vDDatas[i+5];
DSP.DataSet.FieldByName('Tele').AsString:=vDDatas[i+6];
DSP.DataSet.FieldByName('Fax_Code').AsString:=vDDatas[i+7];
DSP.DataSet.FieldByName('E_Mail').AsString:=vDDatas[i+8];
DSP.DataSet.FieldByName('Http').AsString:=vDDatas[i+9];
DSP.DataSet.FieldByName('Supplier_Account').AsString:=vDDatas[i+10];
DSP.DataSet.FieldByName('Accout_Bank').AsString:=vDDatas[i+11];
DSP.DataSet.FieldByName('Accout_Name').AsString:=vDDatas[i+12];
DSP.DataSet.FieldByName('Remark').AsString:=vDDatas[i+13];
DSP.DataSet.Post;
//插入table2
DSPD.DataSet.Active:=True;
DSPD.DataSet.Append;
DSPD.DataSet.FieldByName('Corp_Code').AsString:=vDDatas;
DSPD.DataSet.FieldByName('Supplier_Code').AsString:=vDDatas[i+1];
DSPD.DataSet.FieldByName('id').AsString:='1';
DSPD.DataSet.Post;
SetComplete;
except
vDMsg:='0';
SetAbort;
end;
end;
end;
 
table2有多少字段?有非空字段无数据
id是不是一个主键?不能重复输入"1"
如果可能的话,你把table2的更新改成用触发器做吧
 
我想知道为什么不行,触发器确实可以实现,
这样也可以实现
ADOC.begin
Trans;
ADOC.CommitTrans;
ADOC.RollbackTrans;
但是,我现在在做三层(MTS),希望找到原因!既然SetComplete与SetAbort;是个两次提交的事务为什么不用呢?
 

Similar threads

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