事务处理(100分)

  • 主题发起人 主题发起人 longwx
  • 开始时间 开始时间
L

longwx

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:

小弟正在学显示事务控制,做个很简单的程序,按下按纽则执行一个查询事务,源程序如下:
procedure TFormMain.Button1Click(Sender: TObject);
begin
DataBase.Connected:=True;
If DataBase.InTransaction=true then
DataBase.RollBack;
DataBase.StartTransaction;
With Query do
Begin
Close;
SQL.Clear;
SQL.Add('select * from jh_t099 where rq="19990726";');
Open;
Active:=True;
End;
DataBase.Commit;
DataBase.Connected:=False;

end;

但执行到“DataBase.StartTransaction”;时程序显示"Operation not applicable,Transaction not available"错误,这是为什么?正确的显示事务

处理程序应该怎么呢?谢谢!

另外,lhz叫我把111927问题处理掉,可是我从163很难登录进去,希望大家能帮我处理掉它。
 
你的这段程序是实际编译通过的吗?在我的机器上用database不行,换成database1.
你用的是什么数据库,会否是数据库不支持事务处理。程序应该没问题,我在
Interbase上运行成功。

另:处理掉问题可以让板主决定,你给他个信就行了。但最好还是你自己处理。
 
虽然没有象wuyi那样试过,但是觉得说的对.
向服务器写数据采用事务处理,一般查询无所谓事务处理.没有什么意义.
 
您得到的错误信息表明您使用的数据库不支持事务处理,
事务处理一般用在需要保证操作一次全部完成,如果完不成
则必须全部取消重来的场合,例如从一个账户转账到另一个账户等等
 
我服务器端用的是SCO UNIX5.05+Informix Online 5.0,编译已通过
另外,我也想使用InterBase,可是打开数据库时询问我密码,而我并不知道密码,
你能告诉我吗?谢谢!
 
hehe, 在InterBase的帮助文件里面有原始的用户名和密码
 
BDE 中的Informix SQL Link 的连接库是针对Informix 7 和 9的 ,
事务处理过程也是针对Informix 7 和 9的 ,
至于Informix 5 Online 就可能难以奏效了,
可以做如下试验, 在SQL Explor中连接数据库, 工具条上有一个
事务按钮, 启动一下, 如果报同样的错, 答案就是因为BDE不支持
Informix 5 Online 的事务处理. (可以试一下ODBC方式)
 
InterBase password:masterkey
 
那是你的数据库服务器不支持事务处理(你用的是acess?,太土了吧)

换一个就好了
 
首先:使用Transaction处理数据库是非常正确的。
但是根据你所写出的代码分析,你只是想要查询符合条件的数据,对数据没有任何改变,因此建议你不要用事务处理的方法,使用事务的目的是保证数据库的完整性,一般是在对库中的数据有改动时使用,如:insert update delete create drop。
你所提出的问题原因很可能是你所使用的DataBase不支持事务处理的方法,wuyi大侠说的非常对,使用的TDataBase控件不能命名为:DataBase.

 
有些小型的数据库用Transaction必须设为tiDirtyRead
试试:
with Database do
begin
AliasName := EditDB.Text;
Params.Clear;
Params.Add('USER NAME=' + EditUser.Text);
Params.Add('PASSWORD=' + EditPassword.Text);
LoginPrompt := False;
Open;
if IsSQLBased then
TransIsolation := tiReadCommitted
else
TransIsolation := tiDirtyRead;
StartTransaction;
end;
 
又你的例子有几处不妥:
a. If DataBase.InTransaction=true then DataBase.RollBack;
其实可以少写几个字:
If DataBase.InTransaction then DataBase.RollBack;
b.光做查询不需要用事物
c.With Query do
Begin
Close;
....
Open; //这两行只要一行就行乐
Active:=True; //
End;

xixi的屁话太多
 
多人接受答案了。
 
后退
顶部