现在我有这样一个项目,服务端使用ADO控件访问Access数据库,具体是ADOConnection控件建立连接,ADOQuery执行相关操作。使用Data Access的DataSetProvider1控件向客户端返回数据集。并将以上控件放在Remote Data Module的容器中,供由客户端进行连接。
在客户端用SocketConnection连接服务端,使用Data Access的ClientDataSet操作数据。
现在如果不考虑异常情况功能已经可以实现了,但是有个要求是在同一批数据导入时,如果有重复数据,该批数据全部不能导入。所以我想到使用事务来进行处理,问题是我不知道如何在这种环境下进行事务处理。另外,我知道ADO中,使用Connection.BeginTrans();Connection.CommitTrans();Connection.RollbackTrans();来处理事务,
我想知道在远程连接中如何处理事务。最好能够给出示例代码,谢谢。

解决方案 »

  1.   

    MIDAS(COM版)没有封装数据库事务操作,需要自己实现,实际上就是自行定义一组接口方法对ADOConnection的BeginTrans/CommitTrans/RollbackTrans作一下包装
      

  2.   

    HOW?
    自定义接口是在哪里定义?
    能给几行示例代码吗?
    谢谢你的回复
      

  3.   

    定义接口方法可以用Type Library工具,直接修改默认的接口代码文件XXX_TLB.pas也行
      

  4.   

    我现在的操作步骤是这样:
    1.建立Application。其Form取名为FormServer,Project名为PrjServer;
    2.File->New->Other…,在弹出的New Items对话框中选择Multitier页,在该页中选择Remote Data Module,确定;
    3.在弹出的Remote Data Module Wizard对话框中,在coclass一栏中填入AccessServer,Instancing与Threading Model保持默认,即表示不同线程之间互相独立,确定后即生成一个RemoteDataModule的派生类AccessServer
    4.在程序所在的文件夹中新建一个名为data的文件夹,在其下放入一个名为my.mdb的Access数据库文件,其中有一个名为person的表,该表中只有两个字段,分别为name和age,都是文本类型;
    5.远程数据模块AccessServer上放置各个控件,并设置好属性接下来在view->Type Library中我应该怎么做?
    我现在是在IAccessServer上右键,new->method,输入BeginTrans
    然后在客户端使用SocketConnection1.AppServer.BeginTrans();
    但是会报错,具体应该怎么做?
      

  5.   

    报的错是Invalid variant operation
      

  6.   

    嗯,在客户端加上
    SocketConnection1.Connected := true;
    之后再
    SocketConnection1.AppServer.XXXX();
    调用定义的方法就可以了。现在我去测试如何把数据传递到服务端,使用事务。
    周三结贴,希望各位大侠能再指点一下。
      

  7.   

    你在定义服务端的存数据方法时,参数都用Variant,方法的返回值,也就是Out,retVal用Variant*
    在这个方法中你就可以用Adoconnection的事务了,保存成功后,方法的返回值为Boolean类型的,字符类型都可以