有一表中有字段 id ,然后有个flag的标记 值为0或者1,当查出某个ID对应的值后点击确认按钮就,修改这个flag的值为1,可以同时查出多条数据,
原来我用了一条语句去修该 条件语句如下
where id in ('xxx','xxxx','xxx')
;但是要求要用循环修改 ,也就是每个值 就执行一次修改语句,并且前面要加事务语句,没写过事务,哪位高手能给个例子么,最好是能对例子进行讲解一下,小弟唯有以100%的结贴率来回报大家。
原来我用了一条语句去修该 条件语句如下
where id in ('xxx','xxxx','xxx')
;但是要求要用循环修改 ,也就是每个值 就执行一次修改语句,并且前面要加事务语句,没写过事务,哪位高手能给个例子么,最好是能对例子进行讲解一下,小弟唯有以100%的结贴率来回报大家。
ADOConnection.BeginTrans;
try
ADOConnection.Execute('update ...');
ADOConnection.CommitTrans;
except
ADOConnection.RollbackTrans;
end;
adoquery1.sql.text:='select * from tablename';
adoquery1.open;
while not adoquery1.eof do
begin
adoquery2.sql.clear;
adoquery2.sql.text := 'update tablename set col1=1 where col2=''' + adoquery1.fieldbyname('col1').asstring + '''';
adoquery2.execute;
adoquery1.next;
end这样子没有办法保证所有都update成功或所有都失败。
try
//我用adoquery1绑定connection属性为adoconnection,使用adoquery操作,也能 回滚
ADOConnection.CommitTrans;
except
ADOConnection.RollbackTrans;
end;
方法
try
socketConnection1.appserver.transactionStart;
XXXXXXXX
XXXXXXXX 这里是要写的内容
socketConnection1.appserver.transactionCommit;
except
on E:Exception do
begin
socketConnection1.appserver.transactionRollback;
end;
end;跟楼上一样