Delphi XE10 跨平台三层数据库基本连接

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;

重点注意:此单元最好引用MidasLib单元,否则会出现一些莫名其妙的问题报错。

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

4.发布运行
测试通过后即可在prj树中右键Release菜单中选build制作release版本,见图十一,否则默认都是debug版本。注意win7防火墙弹出阻止时,许可它过外网
在这里插入图片描述
经测试xe10下编译的服务器程序,只需要发布exe和sdb文件即可,无需其他驱动或dll等,并且在win7,winxp,win10下均能正常服务

【DataSnap的跨平台客户端设计】
1.生成客户端框架
File->New->Muti-Device Application
在这里插入图片描述
选择第一个空白的吧“BlankAppliction”, 白纸好涂鸦啊

为了逻辑和界面分离,New一个 DataModule,这一步就不截图了,估计大家都会

2.设置连接
在DataModule中放入TSQLConnection、TDSPProviderConnection、TClientDataSet和TDataSource四个控件

按照逻辑用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 调试”状态
在这里插入图片描述
这时候,在Delphi的工具栏右上方自动出现手机型号,见图二十,此时可以直接点击运行,约等待1分中,就自动在手机上安装好了
在这里插入图片描述
​正式发布手机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文件,无需安装其他驱动、库,无需设置注册等恼人的活动

另外,按上面的设置方法完成以后,如果想要查询其它功能,可以操作客户端的ClientDataSet1,用法跟FDQuery一样,如下:

   with DataModule2.ClientDataSet1 do
   begin
     Close;
     CommandText:='select PerID,PerName from PerFile;
     Open;
   end;

这样客户端可以根据自己的需求进行查询,别忘了将服务端的TDataSetProvider控件的Options下面的poAllowComandText设置为True,这个功能是允许客户端发送查询命令用的。

好了,本文全部编写完毕,相信已经写得够清楚了,适用于菜鸟专用。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi XE10是一种集成开发环境(IDE),可用于创建平台的应用程序。平台三层http是指在Delphi XE10中使用三层架构进行平台的http通信。 三层架构是一种软件设计模式,将软件系统划分为三个层次:表示层、业务逻辑层和数据访问层。在平台的应用开发中,三层架构可以帮助开发人员将应用程序的逻辑和数据访问与UI(用户界面)分离,以便在不同的平台上进行部署和使用。 Delphi XE10提供了强大的组件和工具,可以轻松地实现平台的http通信。通过Delphi XE10的http组件,开发人员可以在应用程序中发送和接收http请求和响应。这使得应用程序能够与web服务器进行通信,并使用http协议获取和传输数据。 使用Delphi XE10的平台三层http通信,开发人员可以方便地在不同的平台上开发和部署应用程序,无论是在Windows、Mac还是移动设备上。由于Delphi XE10的http组件具有高度可定制性和灵活性,开发人员可以根据自己的需求进行扩展和定制,以实现更复杂的http通信功能。 总之,Delphi XE10提供了平台三层http通信的解决方案,为开发人员在各种平台上创建功能强大的应用程序提供了便利。无论是进行数据传输还是与web服务器进行通信,Delphi XE10的强大功能和易用性为开发人员提供了更好的开发体验。 ### 回答2: Delphi XE10是一款强大的集成开发环境(IDE),可以用于平台开发。它支持多个操作系统,包括Windows、Mac、iOS和Android等,并且可以轻松实现平台的HTTP通信。 平台三层HTTP是一种常见的应用架构模式,用于在客户端和服务器之间通过HTTP协议进行通信。它将应用程序分为三层:表示层、业务逻辑层和数据存储层。 表示层负责呈现用户界面,并与用户进行交互。Delphi XE10提供了丰富的用户界面设计工具,可以使用可视化方式设计平台的界面,并实现与用户的交互操作。 业务逻辑层是应用程序的核心,负责处理业务逻辑和数据处理。Delphi XE10内置了强大的编程语言和框架,可以轻松实现业务逻辑的处理和数据管理。开发人员可以使用Delphi XE10提供的组件和功能,编写业务逻辑代码,并进行数据处理和操作。 数据存储层负责管理和存储数据。Delphi XE10支持多种数据库连接,可以轻松实现与不同数据库的数据交互。开发人员可以使用Delphi XE10提供的组件和工具,连接数据库,并进行数据的读取、写入和管理。 总结来说,Delphi XE10是一款强大的平台开发工具,可以实现三层HTTP架构模式。它提供了丰富的界面设计工具、强大的编程语言和框架,以及灵活的数据库连接功能,使开发人员可以轻松构建平台的应用程序,并实现与服务器的HTTP通信。 ### 回答3: Delphi XE10是一种集成开发环境(IDE),用于创建平台应用程序。它支持创建三层架构的应用程序,并可以使用HTTP协议进行数据传输。 平台三层意味着应用程序的架构被分为三个层次:表示层、业务逻辑层和数据访问层。在Delphi XE10中,开发人员可以使用不同的界面设计工具创建用户界面,例如FireMonkey和VCL。这些界面可以在不同的操作系统上运行,例如Windows、iOS和Android。 业务逻辑层是应用程序的核心部分,用于处理业务逻辑和数据处理。通过使用Delphi XE10的对象导向编程语言,我们可以编写适应不同平台的代码逻辑,以便应用程序在各个平台上都能正常运行。 数据访问层负责与数据库进行交互,从中读取和写入数据。Delphi XE10支持许多数据库引擎,例如MySQL、SQLite和Oracle。通过使用Delphi XE10提供的数据访问组件,开发人员可以轻松地建立与数据库连接,执行查询和更新数据。 在平台三层架构中,HTTP协议用于实现不同层之间的数据传输。开发人员可以使用Delphi XE10提供的HTTP客户端组件进行数据的发送和接收。这种方式可以在不同的平台上实现数据的交换,使得应用程序能够平台运行。 总的来说,Delphi XE10支持开发平台的三层架构应用程序,并提供了HTTP协议进行数据传输。这使得开发人员能够在不同的操作系统和平台上创建功能强大的应用程序,并能够方便地处理业务逻辑和与数据库的交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值