zoukankan      html  css  js  c++  java
  • firedac引擎DATASNAP多表查询和多表提交

    firedac引擎DATASNAP多表查询和多表提交


    属性设置
    FDTableAdapter1.SchemaAdapter := FDSchemaAdapter;
    FDTableAdapter1.DatSTableName := 't1';
    FDMemTable1.Adapter := FDTableAdapter1;
    FDTableAdapter2.SchemaAdapter := FDSchemaAdapter;
    FDTableAdapter2.DatSTableName := 't2';
    FDMemTable2.Adapter := FDTableAdapter2;
    FDConection1连接DATASNAP参数设置
    FDConection1.DriverName := 'DS';
    FDConection1.LoginPrompt := False;
    FDStoredProc1.Connection := FDConection1;
    FDStoredProc1.StoredProcName := 'TServerMethods.StreamPost';

    // 客户端多表提交
    procedure TClientForm.PostTables;
    var
    LMemStream: TMemoryStream;
    I: integer;
    LDataSet: TDataSet;
    begin
    for I := 0 to FDSchemaAdapter.Count - 1 do
    begin
    LDataSet := FDSchemaAdapter.DataSets[I];
    if LDataSet <> nil then
    if LDataSet.State in dsEditModes then
    LDataSet.Post;
    end;

    LMemStream := TMemoryStream.Create;
    try
    FDSchemaAdapter.ResourceOptions.StoreItems := [siDelta, siMeta];
    FDSchemaAdapter.SaveToStream(LMemStream, TFDStorageFormat.sfBinary);
    LMemStream.Position := 0;
    FDStoredProc1.Params[0].asStream:= LMemStream;
    FDStoredProc1.ExecProc;
    except
    On E: Exception do
    raise Exception.Create(E.Message);
    end;
    end;
    服务端多表提交方法
    procedure TServerMethods.StreamPost(AStream: TStream);
    var
    LMemStream: TMemoryStream;
    LErrors: Integer;
    begin
    // Retreive entire stream from client
    LMemStream := CopyStream(AStream);
    LMemStream.Position := 0;
    try
    FDSchemaAdapter.LoadFromStream(LMemStream, TFDStorageFormat.sfBinary);
    LErrors := FDSchemaAdapter.ApplyUpdates
    finally
    LMemStream.Free;
    if LErrors > 0 then
    raise Exception.CreateFmt(sErrorsOnApplyUpdates , [GenerateErrorMessage]);
    end;
    end;

    服务端多表查询方法
    function TServerMethods.StreamGet: TStream;
    begin
    Result := TMemoryStream.Create;
    try
    qCustomers.Close;
    qCustomers.Open;
    qOrders.Close;
    qOrders.Open;
    FDSchemaAdapter.SaveToStream(Result, TFDStorageFormat.sfBinary);
    Result.Position := 0;
    except
    raise;
    end;
    end;
    客户端多表查询
    procedure TClientForm.GetTables;
    var
    LStringStream: TStringStream;
    begin
    FDStoredProcGet.ExecProc;
    LStringStream := TStringStream.Create(FDStoredProcGet.Params[0].asBlob);
    try
    if LStringStream <> nil then
    begin
    LStringStream.Position := 0;
    FDSchemaAdapter.LoadFromStream(LStringStream, TFDStorageFormat.sfBinary);
    end;
    finally
    LStringStream.Free;
    end;
    end;

  • 相关阅读:
    Zabbix实现企业微信(WeChat)告警
    Zabbix使用腾讯企业邮箱发送警报邮件,在微信查看警报邮件
    centos7安装pip
    zabbix源码安装3.4.11客户端和yum安装4.2.1客户端
    zabbix中文乱码解决
    centos7配置阿里yum源替换centos自带的yum源(其他镜像yum源配置相似)
    CentOS7.5下Redis5.0.5安装与配置
    LVS+Keepalived搭建高可用负载均衡
    centos7配置双ip(内外网均可访问)
    NSMutableAttributedString 的使用
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/9645912.html
Copyright © 2011-2022 走看看