2个客户端同事运行程序,一个业务流程用事务处理,update 3个表,insert3个表;另外一个客户端连接同一数据库服务器,前一个客户端开始业务、开始事务之后,该客户端查询这几个表之外的表信息,再open时受影响,事务里单步执行调试,执行部分语句或者整个事务commit之后才能open,为什么出现这种情况啊?事务外的表应该不会被锁的啊?
服务器端连接数据库用 Tdatabase,设置参数
DATABASE NAME=dbMy
USER NAME=MyUSER
ODBC DSN=MySQL
OPEN MODE=READ/WRITE
BATCH COUNT=200
LANGDRIVER=
MAX ROWS=-1
SCHEMA CACHE DIR=
SCHEMA CACHE SIZE=24
SCHEMA CACHE TIME=-1
SQLPASSTHRU MODE=SHARED AUTOCOMMIT
SQLQRYMODE=
ENABLE SCHEMA CACHE=FALSE
ENABLE BCD=FALSE
ROWSET SIZE=20
BLOBS TO CACHE=64
BLOB SIZE=32
PASSWORD=MyUSER98
用了session

解决方案 »

  1.   

    问题是我查询的表都不在那个事务里,为什么会受影响呢?我在sql server企业管理器里是可以查我想要的那些表的信息的,但是通过程序来查就有问题,搞不明白,求大家帮忙,谢谢
      

  2.   

    我的所有表都没有用到触发器
    客户端我是用TDCOMConnection 设置ComputerName,ServerName,ServerGUID,设置TSocketConnection的Address,Port,ServerName,然后设socket的Connected为true;
    服务器端,用到Tdatabase的参数如前面所述,
     事务处理通过我的一个接口类里的方法来实现
      IRDMserverW = interface(IAppServer)
      TRDMserverW = class(TRemoteDataModule, IRDMserverW)
      事务处理的时候,sql语句赋值给TQuery控件MyQry,设置MyQry.DatabaseName为database的;
    客户端查询事务不相关的表的时候,设TClientDataSet的RemoteServer,ProviderName,查询语句是通过设置客户端的TClientDataSet的commandtext
    我在一个客户端执行事务处理的过程中设置断点,而另一个客户端做别的查询操作,TClientDataSet在open的时候受到影响求大家帮我分析一下