有关使用ApplyUpdates更新服务器上数据的问题(100分)

  • 主题发起人 主题发起人 decem
  • 开始时间 开始时间
D

decem

Unregistered / Unconfirmed
GUEST, unregistred user!
如果我添加一条记录,用ApplyUpdates(0)保存更新一条记录时,操作正常
但是我如果一次添加2条以上记录时,再用ApplyUpdates(0)保存更新操作时,则保存失败,数据库没有新增记录,请问这是为什么? 急阿,昨天找了一天的bug都没发现问题。
各位大虾帮忙阿,在线等候答复
 
没遇到过。
 
我晕,大哥,你没遇到不用告我把,我是想解决问题的哦
 
又一个?
刚刚回复一个
你用的什么控件?
 
我的是3层构架,在新增记录时通过一个保存按钮来保存多条记录的同时添加,通过取消按钮来取消那些操作。如果我逐条添加时(添一个保存一个则一切正常),如果添加好多条后再保存则保存失败,数据库没有更新。数据库连接一切正常。
 
令我纳闷的是,CancelUpdates就能一下把多条记录的添加Cancel掉,而为什么ApplyUpdates就不能一下把多天记录提交数据库吗?
 
我用的BDE,怎么?更新多条记录不能用ApplyUpdates(0)吗?
它不是可以提交多个更新操作吗?
 
你怎么不比较一下他们的参数?
为了大家思考方便你就不能说说你用的到底是什么控件吗?
 
参数是设置允许的错误把,好像与这个没关系把
我用的是ClientDataSet阿,难道ApplyUpdates(0)不能提交多条记录吗?
请赐教
 
no body can help me??help help help,faint
5555555555555555
 
if (ClientDataSet1.ChangeCount > 0) then

ClientDataSet1.ApplyUpdates(-1);
 
在中间层上把相关控件的UpdateMode设为upWhereChanged或upWhereKeyOnly试一下应该行的,你怎么不试,哎哟急死我了
 
参数设为-1,只有1条记录提交
按照一个朋友的建议,我在ClientDataSet的onReconcileError中察看报错信息如下:
key violation
违反了PRIMARY KEY约束'PK_Plan_LabourReqIt_24927108'。不能在对象'Plan_LabourReqItem'中,插入重复键
什么意思?难道是数据库主键的问题吗?我每次添加时主键都是更新的阿,如s1,s2,s3....
请大家赐教
 
哈哈,问题找到了,我知道怎么回事了,是主键的问题
我添加一个记录后,读库中的最后一条记录的主键,在它的基础主键做加1操作了,可以更新。
但是当我又添加一条记录时,主键还是在库中的最后一条记录的基础上做加1操作的,并没有读刚才添加的那条记录的主键(因为该记录还没有ApplyUpdates),所以主键就重复了,不能再继续往库里写记录了。我要实现的就是通过一个保存按钮把一次提交的好多记录同时ApplyUpdates,我的读主键的操作是在服务器上,大家想想看怎么改一下呢??
 
先POST
然后再ApplyUpdates
试下
我是这样做的
 
先在服务器上将主键的值设为inkey,客户端录入时如主键重复就会有'key violation'
 
DataSetProvider 上,options里有个属性poAllowMutiRecordUpdate 变为true.
试试
 
我觉得你的主键生成应该在服务器上生成就解决了
在Dataset的BeforeUpdateRecord事件中编写生成主键代码
procedure TAutoIncMDForm.DataSetProvider1BeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TClientDataSet;
UpdateKind: TUpdateKind;
var Applied: Boolean);
begin
if (UpdateKind = ukInsert) then

begin
//你主表生成主键的代码
//GetCode是生成主键的自定义函数
DeltaDS.FieldByName('ID').NewValue:=GetCode;
end;

end;

 
楼上的,你说将主键的生成放在服务器端生成。那客户端怎样知道你自动生成的ID号呢?
 
自动生成的ID号是需要重新刷新到客户端的
 
后退
顶部