我使用的是ORACLE 9数据库,开发语言是delphi6
通过Tsqldataset- Tdatasetprovider-Tclientdataset 连接到数据库
我希望在Tdatasetprovider中提取到Tclientdataset.Delta数据,
并对变化的数据生成SQL语句存放在如下表中:---------------------------------
  序号 |  sql语句 | 是否使用标志
---------------------------------请问如何实现?
最好附上源代码。
    
谢谢!

解决方案 »

  1.   

    TDataSetProvider的onUpdateData事件以及BeforeUpdateRecord事件中有客户端提交上来的DELTA数据,或者你可以用两端的BeforeApplyUpdates事件中的OwnerData将TClientDataset的DELTA来进行传递。
      

  2.   

    好象很难~~~~~~~ 挺AI的~~~~~~
        除非生成SQL语句的过程是一个模式~~~~~~   那么用一定格式的表达式可以完成填写,然后写入表格即可~~~~~  但是如果数据流向的每种情况都不一样,你怎么办~~~~~~?
      

  3.   

    生成sql语句时不要把关键字写进去,要用时再stringReplace()
      

  4.   

    我这样做,大家看看提提意见:
    将Tclientdataset中的delta数据赋给Tdbgrid,根据数据状态加适当的标志
    然后根据dbgrid中的每一条记录的情况生成SQL语句。
      

  5.   

    我希望在Tdatasetprovider中提取到Tclientdataset.Delta数据,
    并对变化的数据生成SQL语句存放在如下表中:---------------------------------
      序号 |  sql语句 | 是否使用标志
    ---------------------------------请问如何实现?
    最好附上源代码。---对变化的数据生成SQL语句,光是这一个功能就很难实现了呀
    这还是做一个动态生成SQL语句的模块了
      

  6.   

    如果只是传ClientDataSet1.Delta的话,看下面的合不合乎你的要求:procedure TForm1.DataSetProvider1BeforeApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    begin
       OwnerData (传入的修改数据集)
    end;procedure TForm1.ClientDataSet1BeforeApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    begin
     OwnerData:=ClientDataSet1.Delta;
    end;其实以你的需求,何不直接在数据库中写一个触发器呢,简单省事。
      

  7.   

    这个代码可能会比较多的,要具体看你的要求而定了,首先得问你个问题,DELTA的数据格式你了解吗?
    若了解就比较容易,若不了解就有点麻烦,不过李维的三层结构的书里有比较好的解释,你可以去看一下.了解DELTA的数据存储形式后,按照俺说的去做,绝对没什么问题,就是打开数据集循环读记录,分析和写SQL语句记录的事情了.