有下面一段代码,我不知道delphi是怎么去处理它自己的事务的!
ADOConnection1.BeginTrans ;
try
ADOCommand1.CommandText :='insert into test1(id,name) values(:number,:char)';
ADOCommand1.Parameters.Items[0].Value := 1;
ADOCommand1.Parameters.Items[1].Value := 'a';
ADOCommand1.Execute ; ADOCommand1.CommandText :='insert into test1(id,name) values(:number,:char)';
ADOCommand1.Parameters.Items[0].Value := 2;
ADOCommand1.Parameters.Items[1].Value := 'b';
ADOCommand1.Execute ; ADOCommand1.CommandText :='insert into test1(id,name) values(:number,:char)';
ADOCommand1.Parameters.Items[0].Value := 3;
ADOCommand1.Parameters.Items[1].Value := 'c';
ADOCommand1.Execute ; ADOConnection1.CommitTrans ; except
ADOConnection1.RollbackTrans ;
end;
我想知道的是,要是正好有2台电脑在进行这过程的时候,就是说数据库当前正在执行2个事务,要是时间刚刚好,那么这里的提交事务和回滚事务,他们这两个事务是否是独立的?互不影响?有没有可能第一台电脑回滚了或者提交了第二台电脑的事务?要是我改成存储过程的话,我在存储过程里面只有一个开始事务的句子,而存储过程结束的地方没有提交或者回滚的事务,而在程序里面根据提示来确定究竟是提交事务还是回滚事务,那么同样,两台不同的电脑的事务是否互相影响?
ADOConnection1.BeginTrans ;
try
ADOCommand1.CommandText :='insert into test1(id,name) values(:number,:char)';
ADOCommand1.Parameters.Items[0].Value := 1;
ADOCommand1.Parameters.Items[1].Value := 'a';
ADOCommand1.Execute ; ADOCommand1.CommandText :='insert into test1(id,name) values(:number,:char)';
ADOCommand1.Parameters.Items[0].Value := 2;
ADOCommand1.Parameters.Items[1].Value := 'b';
ADOCommand1.Execute ; ADOCommand1.CommandText :='insert into test1(id,name) values(:number,:char)';
ADOCommand1.Parameters.Items[0].Value := 3;
ADOCommand1.Parameters.Items[1].Value := 'c';
ADOCommand1.Execute ; ADOConnection1.CommitTrans ; except
ADOConnection1.RollbackTrans ;
end;
我想知道的是,要是正好有2台电脑在进行这过程的时候,就是说数据库当前正在执行2个事务,要是时间刚刚好,那么这里的提交事务和回滚事务,他们这两个事务是否是独立的?互不影响?有没有可能第一台电脑回滚了或者提交了第二台电脑的事务?要是我改成存储过程的话,我在存储过程里面只有一个开始事务的句子,而存储过程结束的地方没有提交或者回滚的事务,而在程序里面根据提示来确定究竟是提交事务还是回滚事务,那么同样,两台不同的电脑的事务是否互相影响?
解决方案 »
- FormCreate和FormShow事问题
- 怎么能把2万条记录快速加到ListView中显示[在线等待中...]
- Excel驻留内存问题
- 大家说说“PRIMARY KEY”与 “NOT NULL加UNIQUE”有什么区别
- FastReport 和 OpenDialog1 一起用怎么就打印不了 兼容性 ?
- FieldByName("price"+IntToStr(pricetype)).
- 有关Delphi 数据库的报表制作的问题请教??
- 急急!ADO多表连接查询,直接在DBGRID上插入数据???
- 谁能投资100万回报1000万!!!
- delphi调用:不断调用新的子程序
- 双击DBGrid的数据。怎样才能把里面的数据拿到一个text中?
- 请问如何在Delphi7中加入QuickReport打印控件??
关于会话,在SQL SERVER中简单角本,SQL SERVER有自处理、自优化。特殊情况下,可加锁,
当然一定要注意发生死锁的现象.这个问题,就SQL SERVER而言。1.其实每一个执行单元默认是隐式事务。2.在SQL SERVER中:
begin tran
insert..........
if @@error<>0
begin
rollback tran
return
end
update..........
if @@error<>0
begin
rollback tran
return
end
insert..........
if @@error<>0
begin
rollback tran
return
end
commit tran
--------------当然,普通违犯约束、输入错误可用
SET XACT_ABORT ON
insert.........
update..........
insert..........
SET XACT_ABORT ON
是在程序里实现的
两个机器应该也没问题
只是没试过这样写会不会回滚
偶都是用
append;
.......
........
post;
是可以全部回滚的