delphi 中的事务对存储过程起作用吗
delphi 中的事务对存储过程起作用吗
比如
try
data1.ADOConnection1.BeginTrans;
ADOQueryTmp := nil;
ADOQueryTmp := TADOQuery.Create(ADOQueryTmp);
ADOQueryTmp.Connection := Data1.ADOConnection1;
s_sql:='delete t_StockInDetail where F_BillID='''+F_BillID+'''';
ADOQueryTmp.SQL.Clear ;
ADOQueryTmp.SQL.Add(s_sql) ;
ADOQueryTmp.ExecSQL;
s_sql:='delete t_StockIn where F_BillID='''+F_BillID+'''';
ADOQueryTmp.SQL.Clear ;
ADOQueryTmp.SQL.Add(s_sql) ;
ADOQueryTmp.ExecSQL;
data1.ADOConnection1.CommitTrans;
Application.MessageBox('删除成功','提示',mb_ok);
except
data1.ADOConnection1.RollbackTrans;
Application.MessageBox('删除不成功','提示',mb_ok);
end;
这个是delphi的事务
如果是下面这种用存储过程来表示
try
data1.ADOConnection1.BeginTrans;
ADOQueryTmp := nil;
ADOQueryTmp := TADOQuery.Create(ADOQueryTmp);
ADOQueryTmp.Connection := Data1.ADOConnection1;
s_sql:=exec pr_stock '''+F_BillID+'''';
ADOQueryTmp.SQL.Clear ;
ADOQueryTmp.SQL.Add(s_sql) ;
ADOQueryTmp.ExecSQL;
data1.ADOConnection1.CommitTrans;
Application.MessageBox('删除成功','提示',mb_ok);
except
data1.ADOConnection1.RollbackTrans;
Application.MessageBox('删除不成功','提示',mb_ok);
end;
而存储过程中的代码为
delete t_StockInDetail where F_BillID=@F_BillID
delete t_StockIn where F_BillID=@F_BillID
这样能对存储过程起作用吗,如果能,那我只要在delphi中使用事务了,存储过程可以不管事务了吗
[解决办法]
可以,一般BeginTrans放在try前面,except之后触发异常.
你动态创建的query需要手工释放
[解决办法]
当然可以起作用!
------解决方案--------------------
其实也没要问,自己测试一下不就可以了!
[解决办法]
我觉得事务尽量放在程序中控制,存储过程中可以做为事务点来用
[解决办法]
确定对存储过程起作用
[解决办法]
肯定有作用...
事务是对于这个LINK来说的...就是TADOConnection.