zoukankan      html  css  js  c++  java
  • (原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码

    背景:
    1、很多情况下我们的终端与服务器是分离的,并且操作系统也可能会存在很大的不同。
    2、近些年火爆的WebService技术和SaaS等概念也让我们的思想得以解放。
    3、Lazarus是一款可以跨平台开发的工具,在精神上基本满足了我们Once Code愿望。
    4、但Lazarus还存在很多的问题,即使原生的类、函数、过程也还会报错。
    问题:
    1、我需要做一个三层架构,实现WinCE(或Linux)终端进行数据采集处理。
    2、涉及到跨网等情况不可能采用直连数据库的方式,而Lazarus对WebService又是一团糟。
    3、我打算回到原始状态,建立三层架构(客户端、服务器、数据库)形式,客户端和服务器之间以Tcp方式进行数据交互。
    4、Lazarus已经没有了TClientDataSet,经查找取而代之的是TMemDataset。
    架构思路:
         1、服务器接收客户端请求,进行数据(与数据库交互)的处理,处理结果以流方式进行压缩、传输。
         2、客户端接收到流后进行解压、还原,进行本地化操作处理,将本地处理结果打包,发送至服务器。
     
    核心技术:
    1、Tcp传输,我采用lnet组件,因为它支持:Linux、Windows、Wince,参见我的另一个贴子,可以多线程处理事务。
    2、DataSet网络传输,我打算做成XML再传,==吧想了很多方式但未实现,最后官网上看到了TMemDataset的介绍,用它解决了DataSet在服务器与客户端的类型化问题。
    3、困扰了我两天的问题,下面是我写可行性测试代码关于DataSet处理的。
     
    请各位笑纳:
     
    procedure TFormMain.DataSetMethod();
    var
       DSetSource,DSetObject:TMemDataset;
       streamSource,streamObject:TStream;
       str:String;
    begin
       //发送端
       //进行原始数据集的处理
       DSetSource:=TMemDataset.Create(Self);
       DSetSource.FieldDefs.Add('NAME',ftString,20);
       DSetSource.CreateTable;
       DSetSource.Open;
       DSetSource.Append;
       DSetSource.FieldByName('NAME').Value:='aaa';
       DSetSource.Post;
       DSetSource.Append;
       DSetSource.FieldByName('NAME').Value:='bbb';
       DSetSource.Post;
       streamSource := TMemoryStream.Create;
       streamObject := TMemoryStream.Create;
       DSetSource.SaveToStream(streamSource);
       streamSource.ReadBuffer(str, streamSource.Size);          //从流读至串
       DSetSource.Close;
       //好了,在开始在这里写网络传输吧
       //这写了很多代码

       //接收端
       //进行目标数据处理
       streamSource.WriteBuffer(str, Length(str));               //从串写至流
       DSetObject.LoadFromStream(streamSource);
       DSetObject.Open;
       DBGridEmployee.DataSource.DataSet:=DSetObject;
    end;
     
       欢迎各位留言交流。

  • 相关阅读:
    SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)
    服务注册与发现Nacos
    Nacos配置管理
    Spring Cloud Stream
    MySQL查询优化explain
    索引
    MySQL架构
    mysql事务、视图
    多表查询
    分布式为什么使用python
  • 原文地址:https://www.cnblogs.com/spymaster/p/1968981.html
Copyright © 2011-2022 走看看