Delphi在iOS客户端应用程序中连接企业级数据库

这篇教程描述了在iOS客户端应用程序中连接企业级数据库。

 要连接到企业级数据库,你需要一个客户端的库。在多数情况下,客户端库由数据库供应商以DLL文件格式提供。这个方式不能在iOS Device上运行,因为没有可用的客户端库。要解决这个问题,你可以开发一个中间层来连接到一个企业级数据库,你的iOS应用程序可以与这个中间层会话。

 RAD Studio提供DataSnap框架来让你不需要写代码就能够开发这个中间层(并且访问这个中间层)。这篇教程描述了开发这个中间层,以及开发iOS客户端的步骤。

 
客户端

创建中间层,一个DataSnap Server

 首先,创建一个DataSnap Server,从数据库数据器导出一个表。这篇教程使用一个DataSnap Server VCL Forms Application作为DataSnap Server。

 注:在这篇教程中,DataSnap Server(VCL应用程序)在多层数据库应用程序中作为中间层。你可以轻松创建并删除一个DataSnap Server。在你理解这些基本步骤之后中,你可以将这个中间层转换成Windows服务程序。

 创建一个DataSnap Server VCL Application

 1. 创建一个新的工程。选择File>New>Other,然后从New Items对话框中选择Delphi Projects>Data Snap Server>DataSnap Server来创建一个新的Delphi工程。

新的Delphi工程
2.弹出New DataSnap Server向导,你需要按照这些步骤,不需要修改太多参数。
弹出New DataSnap Server向导
在New DataSnap Server向导中:
        1. 第一步,选择VCL Forms Application作为应用程序类型。
        2. 第二步,选择TCP/IP协议,Server Methods Class,和Sample Methods。

        3.第三步,保持默认的TCP/IP通讯端口为211。这会保证客户端和服务端的通讯通过默认的DataSnap端口。
        4. 最后一步(第四)选择TDSServerModule作为Server Methods的父类。
3. 保存窗体单元为DataSnapServerUnit.pas。
4. 切换到DataSnapServerUnit,更改窗体的Name属性为DSServerForm。
5. 保存Server Mothods单元(向导默认创建为:ServerMethodsUnit1)为ServerModuleUnit.pas。
6. 保存Server Containter单元(向导默认创建为:ServerContainerUnit1)为ServerContainerUnit.pas。
7. 保存新的工程为DataSnapServerProject.droj。
8. 在Project Manager中选择ProjectGroup1,然后保存这个工程为DataSnapTutorialProjectGroup.groupproj。

 选择ProjectGroup1

 在DataSnap Server上定义一个数据集
1. 切换到ServerContainerUnit.pas文件,然后替换在Implementation中的Uses子句为:uses Winapi.Windows, ServerModuleUnit;
2.切换到ServerModuleUnit.pas文件。
3.在Form Designer中,更改Server Module的Name属性为DSServerModule_EMPLOYEE。
4.在Server Module上配置如下组件:

•拖放一个TSQLConnection组件在Server Module,然后设置如下属性:

TSQLConnection组件
TSQLConnection封装了一个数据库服务器的dbExpress连接。
•设置Name属性为SQLConnection_EMPLOYEE。
•设置LoginPrompt属性为False。
•设置Driver为InterBase。
•展开Drive节点,设置DataBase属性为C:\Users\Public\Documents\RAD Studio\11.0\Samples\Data\EMPLOYEE.GDB。
•更改Connected属性为True。如果你遇到一个错误,再次检查一下Driver属性。
•拖放一个TSQLDataSet组件到Server Module上,设置如下属性:

TSQLDataSet用来连接使用dbExpress接收到的数据。
•设置Name属性为SQLDataSet_EMPLOYEE。
•设置SQLConnection属性为SQLConnection_EMPLOYEE。
•设置CommandType属性为ctTable。
•设置CommandText属性为EMPLOYEE。
•更改Active属性为Ture。如果你遇到一个错误,再次查检你刚才配置过的属性。
•拖放一个TDataSetProvider组件到Server Module上,然后设置如下属性:
TSQLDataSet
TDataSetProvider将一个数据集里面的数据打包,然后将这些可以传输的数据包到DataSnap客户端。
•设置Name属性为DataSetProvider_EMPLOYEE 。
•设置DataSet属性为SQLDataSet_EMPLOYEE :
TDataSetProvide
注:这篇教程使用InterBase作为例子。然而,你可以连接到任意数据库服务器,使用相同的步骤。选择合适的Driver,以及其他属性指向你的数据库。

 从DataSnap Server导出DataSet

你刚刚创建一个新的Server Module,包含一个DataSet和DataSetProvider(将数据打包传递给下一层)。下一步是导出这个Server Module到DataSnap Client。
1. 在Form Designer中,打开ServerContainerUnit。
2. 选择DSServerClass1,然后更新已经存在的OnGetClass事件的事件处理过程。添加如下代码到DSServerClass1的事件处理过程中:

 
[delphi] view plaincopy

    procedure TServerContainer1.DSServerClass1GetClass(DSServerClass: TDSServerClass; 
     
      var PersistentClass: TPersistentClass); 
     
    begin 
     
      PersistentClass := TDSServerModule_EMPLOYEE; 
     
    end; 

使用这个事件处理过程,DataSnap Server会导出DataSetProvider,就像这个类中的公共方法一样给一个DataSnap Client。基于上一节你所做的,现在你要导出这个DataSetProvider_EMPLOYEE到你的DataSnap Client。

 运行DataSnap Server

 DataSnap Server的实现已经完成。右击DataSnapServerProject.exe,然后选择Run Without Debugging。

 
DataSnapServerProject.exe
 
现在你可以看到DataSnap Server运行在你的Windows电脑上。因为这个DataSnap Server没有任何界面元素,因此它是一个空窗体:
DataSnap Server1
 
创建一个iOS应用程序连接到DataSnap Server

下一步,创建iOS客户端应用程序

1.在Project Manager中,右击DataSnapTutorialProjectGroup,然后选择Add New Project。
DataSnapTutorialProjectGroup
2.在Delphi Projects页选择FireMonkey Mobile Application:
FireMonkey Mobile Application
3.保存新的单元为DataSnapClientUnit.pas。

4.保存新的工程为DataSnapClientProject.droj。

5.打开DataSnapClientUnit,然后更改窗体的Name属性为DSClientForm。

6.拖放以下组件到FireMonkey Mobile Form Designer上:
•TSQLConnection组件(SQLConenction1)

TSQLConnction封装了一个与数据库服务器的dbExpress连接。当然,它也支持DataSnap Server。
•设置Driver属性为DataSnap。
•展开Driver属性,然后设置HostName属性为DataSnap Server的主机名。
•设置LoginPrompt属性为False。
•设置Connected属性为True。

如果你遇到一个错误,请再次检查你刚设置的属性。
•TDSProviderConnection组件(DSProviderConnection1)

TDSProviderConnection组件使用dbExpress提供与DataSnap Server的连接。
•设置SQLConnection属性为SQLConnection1。
•设置ServerClassName为TDSServerModule_EMPLOYEE。这个名称需要与DataSnap Server里的Server Module的类名匹配。
•设置Connected属性为True。
•TClientDataSet组件(ClientDataSet1)

TClientDataSet实现了一个与数据库无关的数据集,它可以用作一个其他数据集的本地内存缓冲。
•设置RemoteServer属性为DSProviderConnection1。
•设置ProviderName属性为DataSetProvider_EMPLOYEE。这个名称需要与DataSnap Server里的DataSetProvider的名称匹配。
•设置Active属性为True。
•TListBox组件
•设置Align属性为alClient。TClientDataSet1
TClientDataSet
7.打开LiveBindings Designer,按照下图连接数据和用户界面:
1. 点击BindSourceDB1中的FULL_NAME,然后拖动鼠标指针到ListBox1的Item.Text上去:
2. 现在你已经创建并配置了一个在iOS上的DataSnap Client了。你应该能够在IDE中看到从DataSnap Server中的数据了:

 
DataSnap Server
 
布署MIDAS库到iOS Simulator

要在iOS Simulator中执行你的应用程序,你需要布置下列文件:
1.MIDAS库
2.通过选择Project>Deployment来打开Deployment Manager。
3.选择Add Featured Files():
4.选择如下模板,然后点击OK,关闭Deployment Manager:

•MIDAS库

 
MIDAS库
 
在iOS模拟器,或iOS Device上运行你的应用程序

 现在你的应用程序可以准备运行了。

在Project Manager中,选择iOS Simulator或iOS Device作为目标平台,然后运行你的应用程序。你应该可以浏览到数据。