在客户端向服务端提交要添加的数据时,我想有两种方法:
1:在客户端调用clientdataset1.applyupdates方法。但此方法要求先向服务器下载相应的数据集,再在此数据集的基础上更新,添加才能使delta属性有效。
2:将要添加的数据集打包,用datarequest方法传到服务端,在服务端调用存储过程完成。但又有问题,dataruquest方法的参数类型是olevariant类型,要传递一个数据集,只能先将此数据集转化成Tmemory流对象,在服务器接收到此流对象后再进行重组,重组很麻烦,试了很久,没有成功。哪位大侠能提供更好的方法?或是我上面的方法中哪里有需要改进的地方,小弟实在是头大了,望大侠们不吝赐教!谢谢,小弟分不够,希望各位不要介意。

解决方案 »

  1.   

    (续上)又有问题,datarequest方法的参数是olevariant类型,而我要传递的是一个数据集,因此先要将此数据集转换成Tmemory流对象,在服务器收到此对象后再进行重组,重组很麻烦,而且很容易出错,我试了很久没成功。还有没有更好的方法,或是我上面的方法哪里有错误的地方?请大侠们不吝赐教,小弟实在是头晕了。还有比较抱歉的是小弟分数不够,望大侠们多多包涵。谢谢
      

  2.   

    从客户上传数据集,苹果没用过,苹果只是从服务器下载数据集。
    这样:
    OutData:OleVariant;//你的数据集变量
    ADODataQuery.recordset := IUnknown(OutData) as _RecordSet;//你的ADO数据集。
    我想应该是一样的吧,你试试。
      

  3.   

    1. 你可以 cds.PacketRecords = 0; cds.Open; cds.PacketRecords = -1, 这样是没有数据被下载的(就是有,你也应如此作,d6以后的版本都没有引起下载)
    2. 何必作成 TMemory ?cds 中任何的东东都是可以直接被网络传递的
    cds.DataRequest(cds.Delta),在服务器 new 一个cds, cds.Data := OwnerData 还原。
    仍然, 在下强烈建议不要绕开 MIDAS 的更新机制,还是用 cds.ApplyUpdates, Connection.AppServer.AS_ApplyUpdates(ProviderName :String; ...)
    第一个参数指定 ProviderName 更新