三层结构,执行ApplyUpdates(-1)时不能更改后端数据库?(50分)

  • 主题发起人 david wei
  • 开始时间
D

david wei

Unregistered / Unconfirmed
GUEST, unregistred user!
三层结构,执行ApplyUpdates(-1)时不能更改后端数据库?
后端 Sql 7.0;
中间TQuery,
客户端TClientDataSet控件,执行ApplyUpdates(-1)后,客户端更改后的数据不能保存到SQL
 
你中间层的TQuery 的RequestLive的属性是否设为TRUE.
 
我的中间层的TQuery 的RequestLive的属性已经设为TRUE.就是更新不了?
 
设置cachedupdate为true看看.
 
还是不行!
 
首先, 你是用 TQuery 作中間層的 DataSet, 有兩個問題:
2. TQuery 本身不具備自動更新的功能, 除非你將它的 CatchUpdates 設為
True(這种方式更新有限制, 可參考有關書籍), 或者使用 TUpdateSQL
元件(可用于任何情況, 可參考 Help)
3. 如果你的中間層 TQuery 的更新設置不正确, 那么, 當你的 Client 端
ApplyUpdates 時, TQuery 本身將被更新(它僅是一個 DataSet), 但資料
庫並未更新. 因此 TClientDataSet.RefreshRecord 時, 由于數据不同步
而會產生錯誤.
4. 如果你的中間層沒問題, 我想可能是你的中間層向數据庫更新時出了例外.
由于前端向中間層的更新已經成功, 所以中間層的 TQuery 已改變.
5. 試試定製中間層的 Provider.OnDataUpdate 事件
參考李維著<<delphi實戰篇>>
 
我觉得第四点说得的分析,我认同,不过同样的更新方式,为什么可插入记录,但就是不能删除或修改记录。我用的是C++ Builder3.0+BDE5.01+Ms Sql7.0,我认为可能问题出在BDE,就是中间层更新不了后端数据库。
 
不知你正确設置主鍵沒有, 中間層构造 SQL 需要用
或者你需要將 ResolveToDataset 設為 false.
 
我是用C++ Builder3.0,怎设置ResolveToDataset ,请指导。
 
不能更新的情况多了!
我最惨的一次是怎么都保存不了Blob字段,其他都没问题。后来两个经理座在我背后看我跟踪,花了40多分钟,结果是跟到BDE API里去了,气死!
 
多人接受答案了。
 
顶部