DataSetProvider.ApplyUpdates 三层保存数据问题 ('NorthWind..Customers' 变成 'NorthWind.Cus

  • 主题发起人 主题发起人 wooiguo
  • 开始时间 开始时间
W

wooiguo

Unregistered / Unconfirmed
GUEST, unregistred user!
DataSetProvider.ApplyUpdates 三层保存数据问题 ('NorthWind..Customers' 变成 'NorthWind.Customers')(200)<br />1、保存时,把ClientDataSet的Delta传到中间层,此处有ADOQuery1和DataSetProvider1、ClientDataSet1(不是读数据到客户端的DataSetProvider和ADOQuery);2、设DataSetProvider1.ResolveToDataSet:=true;并且ADOQuery1查询出更新对象,再执行DataSetProvider.ApplyUpdates(Delta,0,ErrorCount),这个方法可保存,但是不想用;3、我想知道,设DataSetProvider1.ResolveToDataSet:=false;怎样才能保存?查了很多资料和帖子,比如ADOQuery1.SQL设成"select * from table where 1=2",或者ClientDataSet1.CommandText设成"select * from table where 1=2",并且在ClientDataSet1中设置关键字段的ProviderFlag加上[pfInKey],之后执行DataSetProvider.ApplyUpdates(Delta,0,ErrorCount),都行不通。那位能帮我解决这个问题?有实例最好!
 
自己顶一下。看了李维的例子、MIDAS例子等等,都没有找到。
 
没有人遇到这种情况吗?都是设DataSetProvider1.ResolveToDataSet:=true吗?
 
你自己可以在中音层通过传来的Delta来处理更新,不一定非要用空个DataSetProvider.ApplyUpdates(Delta,0,ErrorCount),
 
ycluo:谢谢回复!你的意思是,在中间层转换为SQL语句?还是在中间层用ClientDataSet.ApplyUpdates(0)?或者其他办法?因为有blob字段,第一个办法不行。可否推荐你的办法?
 
不知道你想干嘛,不调用接口函数你是还想做什么吗
 
adden_lian:谢谢回复!我定义了接口函数的,涉及多表事务,不过用的是RemObjects+Snap,可以在DataSetProvider1.ResolveToDataSet:=true前提下保存数据,但是觉得效率低,看看能不能在DataSetProvider1.ResolveToDataSet:=false下保存。请指点!
 
我这边的程序也都是DataSetProvider1.ResolveToDataSet:=false,也有涉及多表更新和事务的处理都没有问题的,建议你看一下delphi5开发人员指南介绍midas的那章,我就是根据那个思路做的
 
adden_lian:非常感谢!那个第32章,看来我功力不够,加上好像没有完整实例,没有学到手,还要继续学习!请问adden_lian手头又没有能完整实现这个功能的源码?如有我想要一份:woogle168@sina.com。不是我想偷懒,实在是年纪大水平业余,偏偏又钻牛角尖,已经熬夜几天了,问题没有解决,倒是把CCTV-3那个“闯关东”看完了...
 
我没有做过demo,关键代码就这么几句,procedure ApplyDelta(AProvider: OleVariant;
var Delta: OleVariant);var ErrCount: Integer;
OwnerData: OleVariant;
begin
OwnerData := NULL;
if not VarIsNull(Delta) then
begin
// Delta := (IDispatch(AProvider[]) as IAppServer).AS_ApplyUpdates(AProvider[1],// Delta, 0, ErrCount, OwnerData);
Delta := IAppServerDisp(IDispatch(AProvider[0])).AS_ApplyUpdates(AProvider[1], Delta, 0, ErrCount, OwnerData);
if ErrCount > 0 then
SysUtils.Abort;
end;
end;
 
adden_lian:感谢你的帮助!在delphi5开发人员指南第32章有这段代码,也有调用代码,但是没有说明完整的控件设置,请问可以用在ADO+DataSetProvider的中间层上吗?中间层需要ClientDataSet及设置SQL吗?
 
遍历DFW以前的帖子,终于琢磨出来了,中间层的ADOQuery和ClientDataset都要设置。不过有个问题,不知道是不是D7的bug:当SQL设置为'select * from NorthWind..Customers'时,更新语句会变成:'update......NorthWind.Customers',就是NorthWind后本来应该两个点的,变成只有一个点,更新会失败。谁遇到这种情况?恳请指点一下。
 
把“NorthWind..Customers”改成“NorthWind.dbo.Customers”看看
 
问题解决,谢谢Texense!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部