我的数据库的事务处理的问题,附源码,谢谢!(200分)(200分)

  • 主题发起人 主题发起人 hbgrape
  • 开始时间 开始时间
H

hbgrape

Unregistered / Unconfirmed
GUEST, unregistred user!
adoconnection1.BeginTrans;
try
adoquery1.Close;
adoquery1.SQL.Clear;
sqltext := 'disk init name="xfxd_dat",physname='+
'"'+frm_ini.frdatabase1.Edit1.Text+'",vdevno=7,size='+
inttostr(strtoint(frm_ini.frdatabase1.Edit2.Text)*512);
adoquery1.SQL.Add(sqltext);
adoquery1.ExecSQL;
except
showmessage('创建数据库设备文件错误!');
adoconnection1.RollbackTrans;
exit;
end;
//adoconnection1.CommitTrans;
adoconnection1.RollbackTrans; //这里不管是提交还是回滚都没用,SQL都已经执行了,为什么?
showmessage('数据设置完毕!谢谢使用!');
我用的是SQL SERVER7.0的个人版,locktype 改为 ltBatchOptimistic了。
请各位dfw帮我看看。分不够再加。
 
没看出来,是不是要升级你的ado,以前我用事物处理也出了莫名其妙的错误,后来重写了
一下,好了
 
adoconnection1.BeginTrans;
try
adoquery1.Close;
adoquery1.SQL.Clear;
sqltext := 'disk init name="xfxd_dat",physname='+
'"'+frm_ini.frdatabase1.Edit1.Text+'",vdevno=7,size='+
inttostr(strtoint(frm_ini.frdatabase1.Edit2.Text)*512);
adoquery1.SQL.Add(sqltext);
adoquery1.ExecSQL;
connection1.CommitTrans;>>加在这儿!
showmessage('数据设置完毕!谢谢使用!');
except
showmessage('创建数据库设备文件错误!');
adoconnection1.RollbackTrans;
exit;
end;
 
还是adoquery1的connection是不设为adoconnection1
 
to 天真:
1.adoquery1的connection是设为adoconnection1.
2.按您的方法改了,没有用,我即使把adoconnection1.CommitTrans改为
adoconnection1.RollbackTrans,sql语句还是执行成功,不回滚。
麻烦再看看。
 
你是不是在adoquery1的事件中写了提交事务的代码.
 
to hbezwwl:
没有啊!你看我的源码,其实就是提交了一条创建设备的命令。
 
你在adoconnection1.BeginTrans;
开头处设置断点,然后用F7单步调试看adoquery1.execsql;之后还有什么代码执行.
 
adoquery1.execsql;之后没有执行什么。
是不是adoconnection1和adoquery1的属性设置有问题?那位DFW告诉下有什么特殊要求。
 
你先把属性设置贴出来看看?
 
我想一定是adoconnection1和adoquery1的属性设置有问题?
我将此段代码放在一个新程序里(只执行它)还是有问题。
 
把属性贴出来看看,老兄.
 
adoconnection1:
attributes=[]
CommandTimeout = 30
ConnectionString =
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Data ' +
'Source=(local)'
ConnectionTimeout = 15
DefaultDatabase = 'master'
IsolationLevel = ilCursorStability
LoginPrompt = False
Mode = cmReadwrite
Provider = 'SQLOLEDB.1'
 
adoquery1.Active=false;
adoquery1.AutoCalcFields =true
adoquery1.CommandTimeout=30
adoquery1.CacheSize=1
adoquery1.Connection=adoconnection1
adoquery1.CursorLocation=cluseclient
adoquery1.EnableBCD=true
adoquery1.ExecuteOptions=[]
adoquery1.Filter=''
adoquery1.Filtered=false
adoquery1.LockType=ltBatchOptimistic
adoquery1.MarshalOptions=moMarshalAll
adoquery1.MaxRecords=0
adoquery1.ParamCheck=true
adoquery1.Prepared=false
 
用查询分析器执行一下如下语句——

SET XACT_ABORT ON

 
我真怀疑是不是这句SQL语句不需要事物处理的!
 
我对sqlserver不熟悉,但在oracle中,事务只对DML有效,即update、delete、insert、select之类
对DDL是无效的,比如create table之类,执行一个DDL将立即commit已有的事务
所以我的看法,disk init 是不能回滚的
 
反正其它的地方看不出有什么问题,建议hbgrape把那句SQL换成UPDATE试试,如果
能够回滚,说明你的这句可能真的不需要事务处理.
 
呵呵,跟我的想法一样
 
pipi说的对,谢谢!
接受答案!
 
后退
顶部