我接手了个别人的程序,是三层结构。客户端是Clientdateset + Socketconnection。
我想问下有没有办法像AdoConnection那样,用数据源创建个事务,接着执行所要的数据命令,再提交事务,或是回滚。
因为我在一个事件里除了ClientDataSet.ApplyUpdates(0) 外还会多加好几个命令式的增删改。
如果是都在一起的话可以直接把所有的命令都整在一起,用begin end 。但最惨的就是在这增删改中间会多出条ClientDataSet.ApplyUpdates(0);而且有的还需要上一步的新增命令执行完,然后取值在下一步进行修改。
所以想问下有没有办法实现类似
try
adoconnection1.BeginTrans;
...//执行命令
ADOConnection1.CommitTrans
except
ADOConnection1.RollbackTrans;
end;
我想问下有没有办法像AdoConnection那样,用数据源创建个事务,接着执行所要的数据命令,再提交事务,或是回滚。
因为我在一个事件里除了ClientDataSet.ApplyUpdates(0) 外还会多加好几个命令式的增删改。
如果是都在一起的话可以直接把所有的命令都整在一起,用begin end 。但最惨的就是在这增删改中间会多出条ClientDataSet.ApplyUpdates(0);而且有的还需要上一步的新增命令执行完,然后取值在下一步进行修改。
所以想问下有没有办法实现类似
try
adoconnection1.BeginTrans;
...//执行命令
ADOConnection1.CommitTrans
except
ADOConnection1.RollbackTrans;
end;
解决方案 »
- iwdbgrid如何实现记录自动滚动
- IDHTTP问题
- 请问,谁知道,在什么地方能下到DELHPI的完整需求及分析
- delphi调用协议
- 请教高手:编译时出现如下错误是什么原因?
- 请问那里可以买到专门讲OBJECT PASCAL 的书(非电子版)
- 有谁知道InterNetExpress中的InetXPageProducer控件怎么用?
- Application.CreateForm(TFormMain, FormMain)跟 formMain:=TformMain.create(Application)有什么区别没
- 请zzheaptech(风的往事)进来,谢谢你的回答送分给你,顺便再问一下。
- TPanel改了背景颜色后,运行程序后不变,什么原因?
- Tclientdataset 取TMemoField 字段的值
- 这种时间格式怎么转换?
还有什么其他办法吗?还是说多加个什么控件?
我网上看到有人提到TAdoConnection或TDataBase控件 但具体怎么关连怎么操作不清楚
如果是Ado,就直接支持事务了。
用存储过程有办法处理dbgrid上的更新吗?
Conn.BeginTrans;
try
{更新资料的代码} if Conn.InTransaction then
Conn.CommitTrans ;
except
on E:Exception do
begin
if Conn.InTransaction then
Conn.RollbackTrans ;
raise Exception.Create(E.Message);
end ;
end ;
楼上你那种是在服务器上的数据源进行事务。
但如果多个客户端同时使用时就会有问题了,要么出错,要么要等别人处理完了才能!
因为我这边做的客户端是不少,有的操作时间可能会长一点。所以不能一有人处理别人就在等。总不能一个客户端就在服务器上配一个ADOCOnnection去连接吧。
我想要的就是最好能在客户端上把事务处理好,然后直接发给服务器。可能有点麻烦吧!
我现在是多个ClientDataSet同时处理,ClientDataSet.ApplyUpdates(0)和 ClientDataSet.Execute交叉使用。
比如:
..
ClientDataSet.Execute;
..
ClientDataSet.ApplyUpdates(0);
..
ClientDataSet..Execute;
这些是要在同一个事件里完成。那要是最后一个出错,不都完了!!
所以想做弄个事务,保险点!
你说‘操作几笔资料后就自动更新到服务器’这要怎么做啊?
服务器是用TADOConnection+TADOQuery,再用一个Tbc_server的窗体(以.tlb结尾)写函数。
中间是用borland socket server设置端口。
客户端在执行SQL语句时是用TClientdateset调用服务器上自己写函数,把SQL命令以字符的形式传过去,而服务器就把传过来的字符串用TADOQuery执行。若有返回数据集就用Variant的形式返回客户端。
Clientdateset.data := Clientdateset.RemoteServer.AppServer.fun_getdatasql('SQL语句')最后一个是服务器上的函数名。
但也可以用Clientdateset.CommandText;Clientdateset.open;