问一个三层的数据库问题.(急)(50分)

  • 主题发起人 xiaotiantian
  • 开始时间
X

xiaotiantian

Unregistered / Unconfirmed
GUEST, unregistred user!
应用服务器端是adodataset和adoconnection来处理数据库的.

客户端就是clientdataset.

adodataset是用sql连接两个表的.
如下:select * from sales,stores where sale.stor_id=stores.stor_id
在客户端用updatabatch更新数据为什么不能写入数据库呢?
而且还不报错呢?
检查delta是可以传到应用服务器的.
请问是怎么回事呢?
 
大家发表一下看法呀.
 
三层中,数据处理方式不一样,比如POST不能更新数据等。
 
把客户端的更新语句详细贴出来会诊请。
 
两张表连接更新??这总需要你设置一下。
 
UpdateRecord
然后
close
 
楼上的能说的准确些么?
 
用SQL更新是肯定可以的。。。

用Post更新的话,要看情况。。。
 
SQL我倒没做过,
POST不好用的.
POST要看什么情况呢?
 
POST之后要ApplyUpdates(0);
在你的TClientDataSet的 OnReconcileError事件中显示错误。如果不行,用SQL SERVER的
工具看你程序生成的SQL语句是什么。。。
procedure TDMBase.CDSReconcileError( DataSet: TClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind;
var Action: TReconcileAction);
begin
showMessage(E.message);
Action := raCancel;
end;
 
同上,客户端调用 ApplyUpdates 更新数据库
 
请TDataSetProvider的ResolveToDataSet的属性设置为True
试一下,不要让MIDAS的SQL Resolver来更新数据,而使用ADO本身的
能力来更新数据。
 
ApplyUpdates 也试过了.

不好用!
 
如果你用的是无状态的MIDAS,那就只能通过传送ClientDataSet进行更新。。

或者SQL进行更新。。。
 
你们谁自己试一下看看呀.

你们的方法我都试了.


不好用牙.
 
终于解决了.
如夏雨天所说: TDataSetProvider的ResolveToDataSet的属性设置为True
然后在把TDataSetProvider的updatemode取值为:upchangewhere.
但这个也有一个弊端就是delta不能访问了.
如果访问delta总是提示delta为空的.
谁能说一下其中的原因么?
这个问题算是解决一半.
还不知道原理呀.
继续讨论.

 
ResolveToDataSet的属性设置为false
TDataSetProvider的updatemode取值为:upchangewhere.
delta也好用了.
这个问题终于解决了.

 
顶部