还是三层开发中的ClientDataSet更新问题,参阅了好几个贴子还是解决不了! ( 积分: 100 )

  • 主题发起人 主题发起人 zjjxxw
  • 开始时间 开始时间
Z

zjjxxw

Unregistered / Unconfirmed
GUEST, unregistred user!
我试用D2006学习三层开发,采用InterBase数据库,中间层用了IBDataBase-->IBQuery-->DataSetProvider,同时IBQuery指定了IBTransaction,各控件基本上采用默认设置,IBQuery的SQL为"select * from 表名"。我在客户端通过SocketConnection-->ClientDataSet-->DataSoure-->DBGrid,打开ClientDataSet后可进行更改数据,然后用ApplyUpdates(-1)提交更新,然后关闭ClientDataSet再打开它,发现更新已保存,但此时如用数据库工具打开数据库查看该表时,数据却未得到更新,同样如果在客户端通过另外的DataSetProvider代理打开同样的表,也会发现数据库确实未更新到,但当我退出客户端的程序后,再检查数据库发现此时数据却更新了,请教各位高手,这是怎么回事?是不是要提交事务,哪么又该在中间层还是在客户层提交事务呢?又该怎样提交?
 
怎么没人指点一下喽,是不是我说的太罗索了?还是问题没讲清楚?
 
ApplyUpdates 后其它客户端程序(包括数据库工具)如果原来就处于打开状态就必须刷新才能看到变更的数据,如果是新打开的程序,立即就能看到新数据。
 
ApplyUpdates(-1)后你Refresh看看,如果出错就说明没有提交!
 
从你的描述来看你的Session还没有提交;
但当你退出客户端的程序后,再检查数据库发现此时数据却更新了--
这说明你的事务提交方式是Session关闭时自动提交的,而且是手工开始事务。
查一下IBTransaction你的配置参数
 
好好看一下:
IBTransaction.AutoStopAction
 
非常感谢easykoala,你的指点解决了困绕我一个星期的问题,再次感谢!
 
后退
顶部