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

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;

begin

FDQuery1.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的控件来,而且数据已经输送过来啦!图十六。

图十六、连通数据库

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

在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文件,无需安装其他驱动、库,无需设置注册等恼人的活动。

虽然发布简单,功能强大,可以从客户端用SQL语句访问服务器端任何数据,然而,实际应用还是需要在服务器程序上做复杂的权限控制、流量监控、负载均衡、缓冲池等,不过这些是任何服务器程序都不可回避的,不能怪Delphi吧

原文地址:https://www.cnblogs.com/m0488/p/9607474.html

时间: 2024-10-20 02:06:44

Delphi XE 10 跨平台三层数据库应用教程的相关文章

【转】10 个MySQL数据库备份教程推荐

10 个MySQL数据库备份教程推荐 MySQL是动态网站开发中最著名的开源数据库系统.如果你在网站中使用了MySQL,那么你应该定期备份你的数据以防止它丢失. 本文将介绍自动或手动备份MySQL数据库的10个教程,看看有没有最适合你的方法. 1.Backing Up Using MySQLDump(利用MySQLDump备份MySQL数据库) 可以使用MySQL自带的mysqldump工具来备份数据.在mysqldump中提供了许多的示例,包括如何将数据库备份到一个文件.另一个服务器,甚至gz

delphi xe 10.2 TeeChart 安装方法

按下图先调整区域与语言为"英语",然后重启电脑. 安装完成后,重新设置回来中文(简体中文),不然一些软件运行会有异常 原文地址:https://www.cnblogs.com/limuzi/p/9124349.html

为何没有人用DELPHI IDHTTP + WEB做三层应用

---恢复内容开始--- 为何没有人用DELPHI IDHTTP + WEB + MYSQL(或其他数据库)做三层应用,我个人觉得这样做也不错.不过这样写需要开发人员懂的范围相对广一些,对于初入门的朋友来说,可能有点困难.需要对PHP或其他WEB框架有所认识,了解并懂得如何使用JSON. 现在JSON应用得这么广泛,DELPHI也支持(XE10肯定支持,其他版本不清楚,请自行测试). ThinkPHP是一个挺成熟的PHP框架,用它来做WEB层(服务层)是不错的选择,当然可以用其他的,例如JAVA

Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决(对三层的例子配置有帮助)

Delphi IDE中包含一个Data Explorer的组件,如下图所示: 该组件基于dbExpress(包含TSQLConnection.TSQLDataSet.TSQLQuery.TSQLStoredProc.TSQLTable.TsqlServerMethod.TSQLMonitor.TSimpleDataSet).但是因为该组件只提供了各种数据库的抽象驱动,没有提供底层的与数据库直接交互的驱动库,因此,要想使用具体某种数据库,还需要搭配提供商驱动.本文以Delphi XE在Window

Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决

Delphi IDE中包含一个Data Explorer的组件,如下图所示: 该组件基于dbExpress(包含TSQLConnection.TSQLDataSet.TSQLQuery.TSQLStoredProc.TSQLTable.TsqlServerMethod.TSQLMonitor.TSimpleDataSet).但是因为该组件只提供了各种数据库的抽象驱动,没有提供底层的与数据库直接交互的驱动库,因此,要想使用具体某种数据库,还需要搭配提供商驱动.本文以Delphi XE在Window

gzip, deflate delphi xe 2 解码 成功 哈哈

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 http://bbs.csdn.net/topics/190020986 function CFFunc.Compression.Zlib.DeCompressionStream(const AInStream,   AOutStream: TStream) : Boolean; var   ds : TDeCompressionStream;   buff : array[

Delphi XE Starter Essentials 中文目录

Table of Contents1. Delphi XE Starter IDE 1Delphi and C++Builder ....................................................................... 1 2007版的时候,IDE称为RAD Studio,并包括一个Delphi for .NET个性. 2009版的时候,Delphi for .NET被Delphi Prism for .NET代替,IDE保留了 Delphi

Delphi XE程序设计系列 2-开发DataSnap/REST服务器

转载于:http://blog.csdn.net/shuaihj/article/details/6129271 Delphi XE程序设计系列 2-开发DataSnap/REST服务器 分类:            编程语言-Delphi2011-01-11 15:524122人阅读评论(1)收藏举报 delphi服务器restjavascriptfunction 在上次的文章中讨论了如何把传统的Delphi 主从架构应用程序逐渐转换为DataSnap JSON服务器,在本篇文章中让我们正式讨

MySql数据库安装教程

数据库安装教程 1.双击安装包 2.点击next下一步 3.选择安装模式 4.修改安装路径 5.进行安装 6.进入配置向导 7.进行配置 8.选择配置模式 9.选择数据库类型 10.选择数据库功能 11.配置信息生成地址 12.设置数据库连接人数 13.数据库连接配置 14.数据库语言设置 15.数据库环境设置 16.数据库账号与密码 17.配置生成 18注意:当前如果出现未响应,是因为计算机中可能残留数据库文件等,我们需要将C盘中的MYSQL文件删除干净 C:/ProgramData/mysq