1.我在客户端对远程的数据数据库为什么不能修改?代码如下:
ClientDataSet1->Open() ;
ClientDataSet1->Edit() ;
修改操作。
ClientDataSet1->Post() ;
ClientDataSet1->ApplyUpdates(-1);
ClientDataSet1->Close();
2.若已知ClientDataSet1->fieldbyname("name1")->AsString和ClientDataSet1->fieldbyname("name2")->AsString,由这两个值作索引
获得name3,怎么实现?写个简单的例子!!!

解决方案 »

  1.   

    1:
    看看应用程序服务器的Query的属性REquestlive等,当然还有别的原因可能引起的,比如query的sql是不是多表连接等。
    2:locate(‘name1;name2',vararrayof([fieldbyname('name1').asstring,fieldbyname('name2').asstring]));
      

  2.   

    1、更新数据时有可能出现了错误,但你又没有处理 OnReconcileError 事件!    更新数据出现错误时,会激发 TClientDataSet 的 OnReconcileError 事件。你要编写该事件的相关代码才行,另外还要添加一个 reconcile error dialog 到你的项目中。 这样你就知道那些数据没有更新成功!The following code shows an OnReconcileError event handler that uses the reconcile error dialog from the RecError unit which ships in the object repository directory. (To use this dialog, add RecError to your uses clause.)procedure TForm1.ClientDataSetReconcileError(DataSet: TCustomClientDataSet; E: EReconcileError; UpdateKind: TUpdateKind; var Action TReconcileAction);begin
      Action := HandleReconcileError(DataSet, UpdateKind, E);
    end;
    2、用 locate 方法也行,但效率不高。可以用 name1、name2 作为 Where 条件写一个 sql 查询,获得结果后用 ClientDataSet.AppendData。
      

  3.   

    用setkey()和Editkey()能解决吗?
      

  4.   

    三层结构和 CS 结构是有很大区别的,locate 方法之所以效率不高,是因为它需要把所有记录都下载到本地后再进行查找,三层结构应该避免这种情况的发生。 我想 SetKey 的方法可能跟 locate 差不多(没看源码,不知是否如此,只是猜测),建议还是编程解决! 如果不考虑效率,可以使用 locate。
      

  5.   

    请问leapmars(流铭) 小弟初学
    能给小弟讲一下三层结构和 CS 结构吗?
    谢谢
      

  6.   

    to weitao999(涛涛):
    我把所有的query的REquestlive属性设为true,但是编译通不过,'Table is not Indexed'
    这是为什么?
    难道没有高手帮忙吗?
    up有分。
      

  7.   

    sorry,错了,有大字段才需如此!
    原因关注...
      

  8.   

    是多表吗?
    看看providerflags属性
      

  9.   

    TDataSetProvider 的 ResolveToDataSet := True; 这样就可以利用 ADO 组件进行多表更新!
      

  10.   

    to leapmars(流铭) :
    可以讲具体点吗?用ClientDataSet就实现不了吗?
      

  11.   

    好好看看李维的《ADO\MTS\COM+》,上面讲的比较清楚