(原)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;
欢迎各位留言交流。
转载于:https://www.cnblogs.com/spymaster/archive/2011/03/02/1968981.html
(原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码相关推荐
- NHibernate 配置文件的处理和使用多数据库的多层架构思路(第二部分)
二.数据访问层 这里演示了一个 一对多的例子: 两个表:事件表和日志表,事件表 (1: n) 日志表. 以下是两个实体类和对应的配置文件.我单独建了一个项目来存放它们,它们不算是数据访问层!数据访问层 ...
- 2020全国大学生数学建模A题思路讲解与核心代码
2020全国大学生数学建模A题思路讲解与核心代码 题目 核心方法: 问题一 问题二 问题三和问题四 答案如下: 题目 核心方法: 热传导 有限差分法 遍历法 问题一 建立焊接区域中心温度变化规律模型, ...
- 企业大数据平台下数仓建设思路
免费开通大数据服务:https://www.aliyun.com/product/odps 介然(李金波),阿里云高级技术专家,现任阿里云大数据数仓解决方案总架构师.8年以上互联网数据仓库经历,对系统 ...
- 首创一主多侧架构,比原链BaaS平台Bystack白皮书发布
作者 | Apatheticco 经历了10年的高速发展,区块链已经成为政府.行业.企业等多方认可和推崇的创新技术,但还远没有达到成熟阶段. 随着区块链应用落地不断加速,公链.联盟链.私有链.区块链即 ...
- 今日头条架构演进之路——高压下的架构演进专题(含PPT)
今日头条架构演进之路--高压下的架构演进专题(含PPT) 原创 2016-07-06 夏绪宏 高可用架构 导读:高可用架构在 6 月 25 日举办了『高压下的架构演进』专题沙龙,进行了闭门私董会研讨及 ...
- 今日头条架构演进之路——高压下的架构演进专题
导读:高可用架构在前段时间举办了『高压下的架构演进』专题沙龙,进行了闭门私董会研讨及对外开放的四个专题的演讲,期望能促进业界应对峰值方法及工具的讨论,本文是 夏绪宏 介绍今日头条架构演进经验. 夏绪宏 ...
- 【软考系统架构设计师】2017下系统架构师案例分析历年真题
[软考系统架构设计师]2017下系统架构师案例分析历年真题 2017下系统架构师案例分析历年真题 [软考系统架构设计师]2017下系统架构师案例分析历年真题 2017下系统架构师案例分析试题一(系统架 ...
- 三级综合医院数据集成平台建设与架构设计 | 实践分享
1.医院数据集成平台建设的背景 国内大多数三级医院信息化起步于上世纪90年代初,至今发展有将近30年历史,主要分为四个阶段: 第一阶段,财务电子化模式:上世纪90年代中期,北上广的三甲医院已开始引入基 ...
- 电商平台中的架构实践
从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流. 原文出处:http://blog.csdn.net/yangbutao/article/details/ ...
最新文章
- mysql root情况
- react如何获取option的下标和值_react中option标签如何确定selected?
- 使用Forms验证存储用户自定义信息
- Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员
- C语言 · 单词数统计
- 笑谈ArcToolbox (1) ArcToolbox 的发展方向
- for-in和for-of,forEach和Map
- 顶点计划:辅导员与学生关系讨论
- layui 弹窗自适应高度_layui弹框自适应高度
- java datagrid导出excel_Datagrid数据导出到Excel文件给客户端下载的几种方法
- onenote导入html文件,OneNote加入:获取HTML内容
- java中refresh是什么_浅析Spring IoC源码(三)分析refresh()方法前的准备篇(一)
- 七、常用类(高琪java300集+java从入门到精通笔记)
- 操作系统内核框架图整理
- 【CRM】ReferenceError: XXX is not defined at eval(eval at RunHandlerInternal)
- 机器人摘果子看图写话_二年级摘苹果看图写话范例
- 学会Python如何利用业余时间赚外快?分享几个接单途径
- powershell自定义字体
- seate底层原理_Seate
- Android 下使用 FFmpeg 命令行工具与问题排查
热门文章
- linux ctrl c 子进程,ctrl c会向Linux中的父进程和子进程发送SIGINT信号吗?
- java AST 表达式_Atitti.java exp ast java表达式语法ast构造器
- python三大神器_常用Python代码及花式写法(函数调用自身+三大神器)
- 自研分布式web漏洞扫描平台WDScanner
- 【机器学习-西瓜书】三、逻辑回归(LR);线性判别分析(LDA)
- pytorch学习笔记(三十八):Image-Augmentation
- RecSys Challenge 历年推荐赛题汇总
- NanoDet-Plus的学习笔记
- 循环赛日程安排(构造、分治)
- Eclipse中移除未使用的类引用的三种办法