我的环境是 Delphi7 + DbExpress + oracle92
下面这段话,我其实什么都没有干,就是测试一下 DBExpress 的事务控制;
procedure Tform1Button1Click(Sender: TObject);var
aTd : TTransactionDesc;
begin
if SQLConnection1.InTransaction then
begin
ShowMessage('事务中');
Exit;
end; try
aTd.TransactionID := 1;
aTd.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(aTd);
SQLConnection1.Commit(aTd);
except
on E:
Exception do
begin
SQLConnection1.Rollback(aTd);
end;
end;
end;
单步跟踪运行 到 SQLConnection1.StartTransaction(aTd); 的时候就报错:“dbexpress Error: Multiple transactions not enabled”后来我加了一句话就不报错了,如下:
procedure Tform1Button1Click(Sender: TObject);var
aTd : TTransactionDesc;
sMsg :string;
begin
if SQLConnection1.InTransaction then
begin
ShowMessage('事务中');
Exit;
end; try
aTd.TransactionID := 1;
aTd.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(aTd);
sMsg:='123'; //加上这句话就不报错;
SQLConnection1.Commit(aTd);
except
on E:
Exception do
begin
SQLConnection1.Rollback(aTd);
end;
end;
end;
真是莫名其妙;
我想既然 加了 sMsg:='123'; 这句废话能保证不报错,也就这样处理吧;可是我用
procedure Tform1.Button2Click(Sender: TObject);
begin
button1.click;
end;
这样还是报和上面一样的错误;我的SQLConnection1 的配置文件参数为:
DriverName=Oracle
database=erp
User_Name=erp
Password=erp
RowsetSize=20
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
Oracle TransIsolation=ReadCommited
OS Authentication=Ture
Multiple Transaction=Ture
Trim Char=False
这些参数我不是很明白,把里面的True或False 调来调去,都没有用;
我通过下面这段话
if SQLConnection1.MultipleTransactionsSupported then
ShowMessage('ok')
else
ShowMessage('error');
判断出 MultipleTransactionsSupported 属性一直为 False;
就算把
配置文件设置成:
Multiple Transaction=Ture
也无济于事;
而且 SQLConnection1.MultipleTransactionsSupported 是只读的。
就算能手工把它修改成True ,我怀疑一样能报那样的错。
网上关于DbExpress 事务控制的说明不多。
急死我了!希望朋友们帮帮我啊!
我一直用Ado驱动,用了6,7年;
但是数据记录太多的时候,速度比较慢,
加上李维老师强烈推荐DbExpress.
就用上了,没想到被它的事务处理给卡住了。
想想Ado控制事务多简单
AdoConnection1.beginTrans;
try
..
AdoConnection1.Commit;
except
AdoConnection1.Roolback;
end;
怎么到了DbExpress里就那样麻烦呢,麻烦也就算了,网上找个能顺利运行的Demo都没有。 希望朋友们能给我希望之光。
下面这段话,我其实什么都没有干,就是测试一下 DBExpress 的事务控制;
procedure Tform1Button1Click(Sender: TObject);var
aTd : TTransactionDesc;
begin
if SQLConnection1.InTransaction then
begin
ShowMessage('事务中');
Exit;
end; try
aTd.TransactionID := 1;
aTd.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(aTd);
SQLConnection1.Commit(aTd);
except
on E:
Exception do
begin
SQLConnection1.Rollback(aTd);
end;
end;
end;
单步跟踪运行 到 SQLConnection1.StartTransaction(aTd); 的时候就报错:“dbexpress Error: Multiple transactions not enabled”后来我加了一句话就不报错了,如下:
procedure Tform1Button1Click(Sender: TObject);var
aTd : TTransactionDesc;
sMsg :string;
begin
if SQLConnection1.InTransaction then
begin
ShowMessage('事务中');
Exit;
end; try
aTd.TransactionID := 1;
aTd.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(aTd);
sMsg:='123'; //加上这句话就不报错;
SQLConnection1.Commit(aTd);
except
on E:
Exception do
begin
SQLConnection1.Rollback(aTd);
end;
end;
end;
真是莫名其妙;
我想既然 加了 sMsg:='123'; 这句废话能保证不报错,也就这样处理吧;可是我用
procedure Tform1.Button2Click(Sender: TObject);
begin
button1.click;
end;
这样还是报和上面一样的错误;我的SQLConnection1 的配置文件参数为:
DriverName=Oracle
database=erp
User_Name=erp
Password=erp
RowsetSize=20
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
Oracle TransIsolation=ReadCommited
OS Authentication=Ture
Multiple Transaction=Ture
Trim Char=False
这些参数我不是很明白,把里面的True或False 调来调去,都没有用;
我通过下面这段话
if SQLConnection1.MultipleTransactionsSupported then
ShowMessage('ok')
else
ShowMessage('error');
判断出 MultipleTransactionsSupported 属性一直为 False;
就算把
配置文件设置成:
Multiple Transaction=Ture
也无济于事;
而且 SQLConnection1.MultipleTransactionsSupported 是只读的。
就算能手工把它修改成True ,我怀疑一样能报那样的错。
网上关于DbExpress 事务控制的说明不多。
急死我了!希望朋友们帮帮我啊!
我一直用Ado驱动,用了6,7年;
但是数据记录太多的时候,速度比较慢,
加上李维老师强烈推荐DbExpress.
就用上了,没想到被它的事务处理给卡住了。
想想Ado控制事务多简单
AdoConnection1.beginTrans;
try
..
AdoConnection1.Commit;
except
AdoConnection1.Roolback;
end;
怎么到了DbExpress里就那样麻烦呢,麻烦也就算了,网上找个能顺利运行的Demo都没有。 希望朋友们能给我希望之光。
解决方案 »
- 大家来说说写程序时最恶心的事。
- 有一句SQL语句关于日期查找帮忙 谢谢
- 几十台客户端同时从局域网服务器中下载文件的思路与方法
- 你还在为生计而烦恼吗?这里可以让你比做项目更有快感~~~
- 急呀!如何的treeview的背景设为透明的??????????????
- 我想问一下,是在DELPHI中程序设计中,怎么样进行数据库记录的统计和显示当前记录号
- 我公司QQ被封了,我不想用代理,那位程序员朋友使用MSN,与我建立联系!共同探讨问题,!!!!!!!!!!!MSN,MSN,MSN,MSN!!!!!
- 关于文件读入的问题在pascal中?
- 怎么在csdn上发布软件呀?
- 调用外部dll 的问题。。
- delphi多线程问题
- 关于window录音机录音控制设定问题?
http://liwei.csdn.net/Forum/topic.aspx?topicid=6822cc:
http://bbs.2ccc.com/topic.asp?topicid=254550大富翁
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3656164
Tran:TTransactionDesc;
begin
if (SQLConnection1.MultipleTransactionsSupported) then
begin
Tran.TransactionID:=1;
Tran.IsolationLevel:=xilREPEATABLEREAD;
SQLConnection1.StartTransaction(Tran);
try
if ClientDataSet1.ApplyUpdates(0)>0 then Raise MyError.Create('提交出错!') //出错时自己触发
if ClientDataSet2.ApplyUpdates(0)>0 then Raise MyError.Create('提交出错!') //出错时自己触发
SQLConnection1.Commit(Tran);
except
SQLConnection1.Rollback(Tran);
end;
end;
end;它要求 SQLConnection1.MultipleTransactionsSupported 必须为True可是我在Delphi7 + express +oracle92 下不知道如何把
SQLConnection1.MultipleTransactionsSupported 搞成ture;
就算搞成Ture了,也不知道是否就解决问题了。
Multiple Transaction=True
2. 然后,在dephi 7 dbexpress 控件的sqlconnection 那里,把 LoadParamsOnConnect 设为 True (默认为false)。这样我就搞定了。
你试试看行不行吧,可以的话要给分哦^_^