Delphi XE 10 跨平台三层数据库应用教程

Delphi XE 开始越来越庞大,比经典的Delphi7难用,但依然是目前所有跨平台开发工具中开发效率最高、最容易上手的,其快速设计RAD理念是无与伦比的符合人性(什么?是懒惰)。

目前网上XE10类似教程很少,而且学习途中遇到一些问题就难以继续了,经本菜鸟千辛万苦的求索,特推出Delphi XE 10系列教程。

三层数据库应用是目前最简单、方便、易扩展的架构,而跨平台应用又是所谓的“互联网+”最需要的,下面的教程分服务器端和客户端两大部分完成该设计。

一、Delphi XE10 datasnap服务器设计

(1)生成DataSnap服务器的框架

初学者都是呆子,还是用向导吧,主菜单“File”->“New”->“Other…”得到“New Items”向导对话框。见图一。

图一、向导

一般选择有窗口的Forms程序,如果是正式场合,建议Service程序。见 图二。

图二、选择应用类型

如果服务器程序运行在Windows平台就选“VCLapplication”,如果要跨平台,还是选“FireMonkeyapplication”,但生成的文件要大一些。见图三。

图三、选择应用基本库源

​默认TCP/IP为通讯协议,简单快速,菜鸟专用的Sample Methods用于测试,见图四。

图四、选择通讯等参数

​缺省211端口,别忘了“Test Port”一下更健康,见图五。

图五、测试端口

不要使用默认的“TComponent”,而用TDSServerModule作为数据服务提供主体,非常方便以后变更为能挣钱的Service应用服务。

图六、选择服务模式

​Finish这个向导后,硬盘一阵轰鸣,自动生成了工程及其三个主文件,图七:

ServerContainerUnit1.pas   放的是网络服务相关控件,非高手莫入

ServerMehtodsUnit1.pas    就是我们第二步主要的活动场所。

Unit1.pas    服务器主界面,放个TLabel表示“我是服务器”即可,不必关注。

图七、完成框架

(2) 数据库设置

进入ServerMehtodsUnit1.pas 对应的窗口

可用老旧简单的 BDE或ADO,也可用最新高大上的FireDAC,都XE10了,还是高点吧。

拖入(好吧,当一次C程序员嘲笑的Delphi拖拉员)三个控件即可:

TFDConnection,  TFDQuery  和  TDataSetProvider

由下图八可知FireDAC连接逻辑简单,而且大跨数据库平台!

图八、数据库连接构架

库驱动连接器: TFDConnection

把自带的SqlLite例子库复制到当前目录下备用:

C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data\fddemos.sdb

右键菜单“Connection Editor…”设置并测试,  设置Connected属性为True,图九和十。

图九、连接器设置入口

图十、连接器设置并检测

数据集:TFDQuery,设置其Connection属性为刚才测试好的FDConnection1,

设置SQL属性为任意sql语句如:select * from orders, 再令其Active属性为True

最后拖入TDataSetProvider 将数据集对外服务,用其DataSet属性连接到刚才的FDQurey1​

如果不用Connecton Editor.., 可以设置FDConnection1.Params的内容为:

Database=E:\prj\t\server\fddemo.sdb

//若改为 Database=.\fddemo.sdb 则表示db文件和exe文件在同一个目录下

DriverID=SQLite

注意:需要确保sdb文件存在,否则firedac会直接生成一个空的sdb同名文件,不报错,直到运行后客户端程序访问才报xxTable does not exist .

最后拖入TDataSetProvider 将数据集对外服务,用其DataSet属性连接到刚才的FDQurey1。

(3) 增加服务内容

向导生成的ServerMethord1单元只提供了两个简单的服务函数

function EchoString(Value: string): string;

functionReverseString(Value: string): string;

现在增加一个有用点的:

function TServerMethods1.ChangeSql(Value:string): Integer;
beginFDQuery1.Active := False;FDQuery1.SQL.Text := Value;FDQuery1.Active := True;Result := FDQuery1.RecordCount;end;

最后可在主窗口Form1中加入个Tlabel,设置Text 为“服务中…”表示自己是个服务器,要不然后面客户端连接不上时,找不到服务器界面。

(4) 发布运行

测试通过后即可在prj树中右键Release菜单中选build制作release版本,见图十一,否则默认都是debug版本。注意win7防火墙弹出阻止时,许可它过外网。

图十一、制作发行版

​经测试xe10下编译的服务器程序,只需要发布exe和sdb文件即可,无需其他驱动或dll等,并且在win7和winxp下均能正常服务。

二、DataSnap的跨平台客户端设计

(1) 生成客户端框架

File->New->Muti-Device Application, 图十二。

图十二、新建跨平台程序

选择第一个空白的吧“BlankAppliction”, 白纸好涂鸦啊!

为了逻辑和界面分离,New一个 DataModule

(2) 设置连接

在DataModule中放入TSQLConnectionTDSPProviderConnectionTClientDataSetTDataSource四个控件,

按照逻辑用DSProviderConnection1就可用连接到服务器了,可Delphi偏偏要用TSQLConnection。选择置其属性ConnectionName中自然列出的“DataSnapCONNECTION”,紧临的属性Driver值自动变为DataSnap。

TDSPProviderConnection.ServerClassName 为服务器端对应类名 TServerMethods1,

接下来只需要 把TDSPProviderConnection.SqlConnection 连接到TSQLConnection,TClientDataSet.RemoteServer连接到TDSPProviderConnection,即可把他们三个串通一气。当然TDataSource.DataSet也要连接到TClientDataSet。见图十三。

图十三、设置数据连接路线

注意:

现在该是激活他们的时候了:TSQLConnection.Active 设置为True(这时可能会有数据库口令验证),TDSPProviderConnection.Connected自动变为True了,然后在TClientDataSet.ProviderName才能看见传递过来的名称“DataSetProvider1”,选择之。最后设置TClientDataSet..Active 为True,没有错误提示才算真正连接好了。

(3) 制作界面

制作界面在主窗口unit1里进行。作为数据库客户端的基本配置,TBindSourceDB和TGrid组合来代LiveBinding替老Delphi7时代的“数据敏感”,以适应不支持“数据敏感”的OS系统如Android。当然加入一个TBindNavigator能让你浏览数据时更舒服一点,不加也无大碍。见图十四。

图十四、加入显示数据控件

TBindSourceDB.DataSet  和  DataSource 必须要  uses了datamodule: unit2.pas 后才会自动出现DataModule2.ClientDataSet1 和  DataModule2.DataSource1,选择设置之。

---

​接下来就是要所谓“LiveBinding”了,TBindSourceDB的右键菜单上有个“BindVirsully..”从老Delphi7来的人好怕怕哦,没见过这架势如图十五:

图十五、绑定数据连接

图十五中蓝色箭头就是我们需要画出来的。

关闭后回去发现多出一个BindingList1的控件来,而且数据已经输送过来啦!

图十六。

图十六、连通数据库

​太高兴了,赶紧保存并编译运行,结果大失所望,没有数据。原来还有很多工作没有做,如控制连接、生成服务器对应方法等。

遇到问题与解决: 

  1.   提示 Cannot change this property when using LiveBindings

解决方式:


在unit2的窗口中生成服务器对应方法GenerateDataSnap client classes菜单选择后,图十七,自动生成unit3,其中主要是TServerMethods1Client类及其方法,都是服务器上的服务器方法映射到客户端来的,方便client调用服务,具体代码不必去看(什么,不求甚解,是脑力不济)。

图十七、自动生成服务方法映射

控制连接:在界面窗口中加入IP和端口(默认为211,是不是想自诩为中国的名牌大学出品)

图十八、加入控制连接控件

​“连接”按钮button1代码如下:

procedure TForm1.Button1Click(Sender:TObject);

var

dm: TServerMethods1Client; //就是上一步自动生成的unit3里的那个映射类

begin                      // 别忘了uses Unit3, Unit2;

try

//连接指定IP和Port的应用服务器

DataModule2.SQLConnection1.Close; // DataModule2就是放连接器那个数据模块

DataModule2.SQLConnection1.Params.Values['HostName'] := edtIP.Text;

DataModule2.SQLConnection1.Params.Values['Port'] := edtPort.Text;

try

DataModule2.SQLConnection1.Open;

try

//创建应用服务器上的方法在客户端的实现类: 即映射方法类

dm :=TServerMethods1Client.Create(DataModule2.SQLConnection1.DBXConnection);

//执行服务器上的方法

ShowMessage(dm.ReverseString(edtIP.Text)); //系统带的例子方法

dm.ChangeSql(edtSql.Text); // 我们在服务器程序中手工添加的执行sql方法

finally

dm.Free;

end;

DataModule2.ClientDataSet1.Close;

DataModule2.ClientDataSet1.Open; //开启客户端数据集

except

on E: Exception do

ShowMessage(E.Message);

end;

finally

DataModule2.SQLConnection1.Close;

end;

end;

注意:如果启动就连接执行,在win32下正常,在Android上会黑屏。

Win32版在xp上不能正常使用数据库功能,普通服务方法能用。

(4) 手机调试和发布

用usb连接上手机,并安装好手机驱动(如果是华为手机,则安装华为手机助手),并设置手机为“USB 调试”状态,见图十九。

图十九、设置USB连接手机为调试状态

这时候,在Delphi的工具栏右上方自动出现手机型号,见图二十,此时可以直接点击运行,约等待1分中,就自动在手机上安装好了。

图二十、确保Delphi识别连接好的手机型号

​正式发布手机apk时注意:

默认的Release配置会有位置、通话记录、摄像头等许多令人不悦的隐私选项,统统的设置为false,见图二十一,只留一个“Internet”为true(不知到为什么,那就别搞软件开发了)。

图二十一、手机隐私权限设置

最后build “Release”版,见图二十二,在目录xxx\client\Android\Release\Project1\bin下面一个Project1.apk赫然在目,美中不足是大了点约9.5MB。安装在各种手机上测试吧!见图二十三。

图二十二、制作手机发行版apk文件

图二十三、手机上用SQL语句自由访问服务器

​在有的手机上安全软件会提示有广告插件:a.banner.doubleClick,网上查了下,是google自带的什么东东,脑力不济,管不了这么多了。

三、总结

本教程完成了Delphi XE 10 下,跨平台三层数据库程序例子,其中服务器程序连接数据库,客户端程序可以是PC、Android手机,发布仅需要一个exe或apk文件,无需安装其他驱动、库,无需设置注册等恼人的活动。

Delphi XE 10 跨平台三层数据库应用教程相关推荐

  1. Delphi XE 10 跨平台三层数据库笔记

    Delphi XE 开始越来越庞大,比经典的Delphi7难用,但依然是目前所有跨平台开发工具中开发效率最高.最容易上手的,其快速设计RAD理念是无与伦比的符合人性. 目前网上XE10类似教程很少,而 ...

  2. delphi mysql 三层_Delphi XE 10 跨平台三层数据库应用 datasnap

    (1)生成DataSnap服务器的框架 初学者都是呆子,还是用向导吧,主菜单"File"->"New"->"Other-"得到& ...

  3. delphi XE 10实现App和PC下TreeView调用ImageList和Sqlite数据

    delphi XE 10实现App和PC下TreeView调用ImageList和Sqlite数据 一.工程 program TreeView; usesSystem.StartUpCopy,FMX. ...

  4. Delphi XE 10.4 FMX ListView 一个不易察觉的 BUG

    Delphi XE 10.4 FMX ListView 一个不易察觉的 BUG 在使用 ListView DynamicAppearance 时发现非常强大,可以加很多东西,但没有发现复选框(哪位大佬 ...

  5. delphi xe 10.3 firemonkey stringdrig 插入,删除,添加

    以下是在WIN7 64 ,delphi xe 10.3 以下成功运行: 运行界面: 代码 unit Unit1; interface uses   System.SysUtils, System.Ty ...

  6. delphi xe 10.3 用FastReport打印预览当前记录

    以下在WINDOWS10  + DELPHI XE 10.3   FireDAC +SQL SERVER 2008   下通过: 第一步,创建如下表单: 第二步  拖入以下几个控件: frxDBDat ...

  7. DELPHI XE 10.3开发安卓APP的经过

    首先要感谢CSDN和各位上传东西上CSDN的朋友,我原来有900多分的,为上下载相关的东西,花掉了400多分. 本来想安装XE10.4的,无奈PJ不了,XE10.4前两天在一台WIN7 64位上成功安 ...

  8. Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到nbsp;变问号?的处理

    用CEF4Delphi取网页元素时碰到ElementInnerText里含有" " 比如网页源码里是"内容 "取出来显示就变成"内容?" 搜 ...

  9. delphi cef写入html,Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到nbsp;变问号?的处理...

    用CEF4Delphi取网页元素时碰到ElementInnerText里含有" " 比如网页源码里是"内容 "取出来显示就变成"内容?" 搜 ...

最新文章

  1. C#者重建C++之路 - 运行机制的差异
  2. 【收藏】Maven 生成打包可执行jar包
  3. SQL编程where子句与操作符
  4. 鸿蒙os2.0发布回放,华为HarmonyOS 2.0系统发布会内容大全 鸿蒙os6月2日直播回放地址入口...
  5. 服务器配置和性能,服务器性能配置(硬件)
  6. php json 压缩传输,php json数据使用gzip压缩输出
  7. 质量故事(2)---降落伞的真实故事
  8. Eplan2.7 安装教程
  9. HTML5期末大作业:京东商城网站设计——京东商城购物网站(4页) 基于Html+Css+javascript的网页制作(购物主题)
  10. kotlin-android-extensions过时了,迁移到ViewBinding
  11. 百度Apollo的dreamview的frontend的数据传输部分简单梳理
  12. flash player官网地址 建议不要下载flash.cn的
  13. web页超过2G以上大视频分片秒传方案
  14. ubuntu下载安装google浏览器
  15. 单相变压器的平衡方程式
  16. RabbitMQ应用案例
  17. 微信开发 -- 二维码生成
  18. Oracle 19c 新特性:ADG的自动DML重定向增强读写分离--ADG_REDIRECT_DML
  19. 【微处理器与嵌入式】实验2——蜂鸣器+流水灯 汇编
  20. 使用java实现语音朗读

热门文章

  1. jlszyy(吉林省中医药管理局官网)
  2. Stata12 下载和安装
  3. JS基础-字符串拆分、截取、查找汇总
  4. 面试常问的40个问题(1-27)
  5. AC. Anu Has a Function
  6. 如何应对用智行火车票购买机票后的高额退改手续费???
  7. MySQL关闭慢查询日志
  8. java项目总结范文_java工程师年终总结及明年计划范文
  9. JAVA命名规范(数据库 and 后端)
  10. 微软亚洲研究院4人团队完成视觉识别里程碑式突破