PARADOX本地表能实现事务嵌套吗?(100分)

  • 主题发起人 主题发起人 坏蟑螂
  • 开始时间 开始时间

坏蟑螂

Unregistered / Unconfirmed
GUEST, unregistred user!
//like this

DataBase1.StartTransaction;
.......//写数据表
try
DataBase1.Commit;
except
DataBase1.RollBack;
end;

我试了试,开始说要将DataBase1.TransIsolation置tiDirtyRead,
我改了,程序不出错,但事务不起作用。

why?
how to do?


 
Paradox数据库不支持事务处理。
 
query1.CachedUpdates:=true;
paradox支持事务处理
 

哎,提问之前自己都没试验清楚,
我刚才又试了,行!
原来本地表是支持事务的,我忘了RollBack之后Refresh Table1了。

看来,这100分要我自己得了。呵呵。
 
呵呵, 如果是多个操作会不会出问题???
如insert 3条记录, 第三条出错, 前两条同时撤消???
 
Paradox不支持事务处理的:
请看Delphi源代码:

//DBTables.pas:
procedure TDatabase.StartTransaction;
begin
...
if <font color=#FF0000>not IsSQLBased and (TransIsolation <> tiDirtyRead)</font> then
DatabaseError(SLocalTransDirty, Self);
...
end;

procedure TDatabase.SetDatabaseFlags;
begin
...
FSQLBased := <font color=#FF0000>StrIComp(Buffer, szCFGDBSTANDARD) <> 0</font>;
...
end;

//BDE.int: BDE.pas的Interface部分
const
...
<font color=#FF0000>szCFGDBSTANDARD = 'STANDARD';</font>
...

也就是说
Standard类型数据库的IsSQLBased属性为False;
那么TransIsolation必须为tiDirtyRead
那还叫什么事务处理??
只不过实现了单个线程内出错后的Undo而已
我认为不过是伪事务处理。

文件型数据库本身的存取方式决定了它不可能支持事务处理,
BDE作出这么一个fake的已经很对得起观众了。

所以,将就着用吧!或者换数据库,至少换成Access
 
说得好!
thanks!
 
过奖过奖!
 
后退
顶部