zoukankan      html  css  js  c++  java
  • 怎样提交FIREDAC数据集的DELTA到中间件然后保存进数据库

    你可以在客户端序列FireDAC数据集的DELTA , 将序列后的STREAM发送给中间件,

    中间件的TFDQuery或TFDMemTable调用LOADFROMSTREAM()方法加载流,

    然后调用ApplyUpdates()将数据保存进数据库中。

    怎样转换TFDQuery或TFDMemTable的Delta为STREAM?

    你将需要设置FDQuery或TFDMemTable的ResourceOptions.StoreItems 为 [siDelta]或 [siMeta, siDelta]。

    然后调用SaveToStream()方法即可。

    下面是演示用的代码:

    var
    Stream:TMemoryStream;
    begin
    // qryDataSource have 100 records,modified 1 record,so have 1
    delta record
    Stream := TMemoryStream.Create;
    qryDataSource.ResourceOptions.StoreItems :=
    [siData,siMeta,siDelta];
    Stream := TMemoryStream.Create;
    qryDataSource.SaveToStream(Stream);
    //restore StoreItems
    // qryDataSource.ResourceOptions.StoreItems :=
    [siData,siMeta,siDelta];

    Stream.Position := 0;
    // remote app,transports stream by http
    qryRemote.Close;
    qryRemote.CachedUpdates := True;
    qryRemote.UpdateOptions.KeyFields := 'ID';
    qryRemote.UpdateOptions.UpdateTableName := 'BAS_COLORS';
    qryRemote.SQL.Text := 'select * from BAS_COLORS where 1=0';

    qryRemote.ResourceOptions.StoreItems := [siMeta,siDelta,siData];
    //It load 100 reocrds,not only 1 delta record
    qryRemote.LoadFromStream(Stream);
    Stream.Free;
    // commit and refresh
    qryRemote.ApplyUpdates();
    qryDataSource.CommitUpdates;
    qryDataSource.Refresh;

    end;

  • 相关阅读:
    滚~滚~滚动条(移动端 )
    JS数据模板分离(告别字符串拼接)-template
    五子棋大战(人机)
    数据结构——队列
    数据结构——栈
    mysql下的SELECT INTO语句
    海明校验码
    android 调出显示标题栏(title bar)
    Windows failed to start.界面下修复win8引导
    android 修改背景色(转)
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/3974440.html
Copyright © 2011-2022 走看看