G
goldfeng
Unregistered / Unconfirmed
GUEST, unregistred user!
只需要一个简单的例子,在一个事务中控制两个数据库连接的处理
环境:WIN2000, ORACLE8.1.7.4(已打补丁),DELPHI7
紧急求助,谢谢。
已经控制了组件对象的事务属性:均为需要事务,现在是针对同一个连接,但是两次调用,这个都搞不定的话就别说两个连接了。单个处理没有任何问题,但出现某条记录KEY重复时并没有象想象中的那样自动回滚,而是一个提交,另一个不提交。DM中的数据库没有自动提交属性。两个对象的源码如下:
控制对象:
procedure TCtrlTwoDBObj.insertDept(const code, name, database: WideString;
out poErrStr: WideString);
var
firstObj : IinsertToFeng;
begin
try
OleCheck(ObjectContext.CreateInstance(CLASS_insertToFeng, IID_IinsertToFeng, firstObj));
firstObj.insertDept('0001', 'feng', '', poErrStr);
if poErrStr <> '' then
begin
SetAbort;
exit;
end;
firstObj.insertDept('0002', 'feng', '', poErrStr);
if poErrStr <> '' then
begin
SetAbort;
exit;
end;
SetComplete;
except
SetAbort;
end;
end;
功能对象:
procedure TinsertToFeng.insertDept(const code, name, database1: WideString;
out poErrStr: WideString);
var
sqlStr : String;
begin
sqlStr := Format('insert into dept values( ''%s'', ''%s'' , ''aaa'') ', [code, name]);
dmFirst := TdmFirst.Create(nil);
try
try
dmFirst.Query1.SQL.Clear;
dmFirst.Query1.SQL.Add(sqlStr);
dmFirst.Query1.ExecSQL;
dmFirst.Query1.Close;
except
on e : Exceptiondo
begin
poErrStr := e.Message + ' : ' + sqlStr;
SetAbort;
end;
end;
SetComplete;
finally
freeAndNil(dmFirst);
end;
end;
环境:WIN2000, ORACLE8.1.7.4(已打补丁),DELPHI7
紧急求助,谢谢。
已经控制了组件对象的事务属性:均为需要事务,现在是针对同一个连接,但是两次调用,这个都搞不定的话就别说两个连接了。单个处理没有任何问题,但出现某条记录KEY重复时并没有象想象中的那样自动回滚,而是一个提交,另一个不提交。DM中的数据库没有自动提交属性。两个对象的源码如下:
控制对象:
procedure TCtrlTwoDBObj.insertDept(const code, name, database: WideString;
out poErrStr: WideString);
var
firstObj : IinsertToFeng;
begin
try
OleCheck(ObjectContext.CreateInstance(CLASS_insertToFeng, IID_IinsertToFeng, firstObj));
firstObj.insertDept('0001', 'feng', '', poErrStr);
if poErrStr <> '' then
begin
SetAbort;
exit;
end;
firstObj.insertDept('0002', 'feng', '', poErrStr);
if poErrStr <> '' then
begin
SetAbort;
exit;
end;
SetComplete;
except
SetAbort;
end;
end;
功能对象:
procedure TinsertToFeng.insertDept(const code, name, database1: WideString;
out poErrStr: WideString);
var
sqlStr : String;
begin
sqlStr := Format('insert into dept values( ''%s'', ''%s'' , ''aaa'') ', [code, name]);
dmFirst := TdmFirst.Create(nil);
try
try
dmFirst.Query1.SQL.Clear;
dmFirst.Query1.SQL.Add(sqlStr);
dmFirst.Query1.ExecSQL;
dmFirst.Query1.Close;
except
on e : Exceptiondo
begin
poErrStr := e.Message + ' : ' + sqlStr;
SetAbort;
end;
end;
SetComplete;
finally
freeAndNil(dmFirst);
end;
end;