一个例子说明如何在DataSnap中使用FireDAC

一、FireDAC调用DataSnap远程方法查询数据示例

1、服务端使用FDQUERY查询数据并返回TDATASET:

function TServerMethods1.GetData(var sqlstr: string): TDataSet;
var
  qry:TFDQurey;
begin
  qry := TFDQuery.Create(nil);
  try
    qry.Connection := TServerContainer1.FDConnection1;
    qry.Open(sql);
    Result := TFDMemTable.Create(nil);
    TFDMemTable(Result).Data := qry.Data;
  finally
    qry.Free;
  end;
end;
2、客户端既可以用FDConnection连接DataSnap中间层,也可以用SQLConnection连接DataSnap中间层,如果用FDConnection连接DataSnap,则可以用FDStoredProc访问远程方法,如:
procedure TForm1.Button1Click(Sender: TObject);
begin
  FDConnection1.Connected := true;
  FDStoredProc1.Close;
  FDStoredProc1.Unprepare;
  FDStoredProc1.StoredProcName := 'TServerMethods1.GetData';
  FDStoredProc1.Prepare;
  FDStoredProc1.ParamByName('sqlstr').Value := 'select * from bas_goods';
  FDStoredProc1.Open;
  FDMemTable1.Close;
  FDMemTable1.Data := FDStoredProc1.Data;
  FDStoredProc1.Close;
end;
二、使用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;
  try
    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 := '上机记录表';
    qryRemote.SQL.Text := 'select * from 上机记录表 where 1=0';
  
    //qryRemote.ResourceOptions.StoreItems := [siMeta,siDelta,siData];
    //It load 100 reocrds,not only 1 delta record
    qryRemote.LoadFromStream(Stream);
    // commit and refresh
    qryRemote.ApplyUpdates();
    qryDataSource.CommitUpdates;
    qryDataSource.Refresh;
  finally
    Stream.Free;
  end;
end;


版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/xieyunc/p/4839594.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DataSnap一个用于构建多层架构的工具包,可以帮助开发者构建跨平台的客户端-服务器应用程序。在DataSnap,多线程例子通常用于处理并发请求和提高服务器端的性能。 一个常见的DataSnap多线程例子是创建一个服务器应用程序,该应用程序可以同时处理多个客户端请求。通过使用多线程,可以让服务器同时处理多个客户端的请求,提高了服务器的处理性能和并发能力。 对于一个简单的DataSnap多线程例子,可以通过以下步骤实现: 1. 创建一个DataSnap服务器应用程序,并添加一个多线程处理模块; 2. 在处理模块编写多线程代码,以便服务器可以同时处理多个客户端请求; 3. 在客户端应用程序,编写发送并发请求的代码,并测试服务器的处理能力; 4. 通过监控服务器端的性能数据,如处理请求数、响应时间等指标,来验证多线程处理能力的提高。 另外,DataSnap还提供了一些内置的多线程支持,比如TThreadPool和TTask,开发者可以直接使用这些组件来简化多线程编程,提高开发效率。 总之,DataSnap多线程例子可以帮助开发者学习如何利用多线程来提高服务器端的并发处理能力,从而改善客户端-服务器应用程序的性能和稳定性。同时,通过使用DataSnap内置的多线程支持,开发者可以更加方便地实现多线程编程,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值