Delphi XE5 for Android (十)
2013-11-25 19:44
483 查看
我觉得Delphi最强大的的功能之一就是开发数据库三层应用的DataSnap,在Android上的实现,首先是完成服务器的设计:
(1)利用向导完成DataSnap服务器的框架,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091209-cb06b3b1ff234d57aa5f1b72cbaee3d7.png)
由于是实验,所以选择VCL程序,如果是实际应用,建议Service程序
![](http://images.cnitblog.com/blog/124433/201310/17091220-1371db1e9dac43619dd2ab0d67da434b.png)
我习惯使用TCP/IP作为通讯协议,简单且速度快,Sample Methods是演示和测试用
![](http://images.cnitblog.com/blog/124433/201310/17091246-70fc2a9b2a39413c91a1173b5c22bb78.png)
缺省211端口
![](http://images.cnitblog.com/blog/124433/201310/17091304-dd8b2a29a1a84def938eac9f6eb2842e.png)
使用TDSServerModule作为数据服务提供主体,非常方便变更为Service应用服务
![](http://images.cnitblog.com/blog/124433/201310/17091333-522401de3d484ef99e80e1a00dc8df38.png)
(2)设置服务器数据
在TDSServerModule中设置数据,为简便起见,采用BDE引擎的DBDEMOS下animals.dbf数据库,有文字也有图片,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091401-eb09a76e229f43c1b73772c3109b6a19.png)
放置一个TDataSetProvider连接该数据源,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091418-1c04362f04df41c19387275ef79dab76.png)
服务器至此设计完成,没有编写一行代码,只是调整了部分控件和窗体的名称。手动启动该应用服务程序。
(3)新建Android客户端程序
新建一个android客户端程序,在工程中增加一个TDataModule模块,用于放置与应用服务器的连接和数据,在模块窗体上放置TSQLConnection、TDSPProviderConnection、TClientDataSet三个控件,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091430-fdafc7d3f5644d9f820fc76d8978f18c.png)
其中TSQLConnection的属性设置中LoginPrompt要设为False,TDSPProviderConnection的属性设置如下:
![](http://images.cnitblog.com/blog/124433/201310/17091436-09564cb1d64541788c67a748eb56e517.png)
其中ServerClassName是指应用服务器上作为数据服务提供主体的TDSServerModule的实例类名称,在这里我习惯性地重新命名了,缺省一般是TServerMethods1。TClientDataSet的设置如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091442-c02c6805990e487b86bd3e4cf62b8c1c.png)
为实现应用服务器上Sample Methods在客户端的调用,需要创建服务类在客户端的实现类,右键点击TSQLConnection选择生成,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091451-f8b9ae73f0f04567ae1c4d2cf9351a63.png)
新生成的类定义如下:
![](http://images.cnitblog.com/blog/124433/201310/17091459-304c295f1c1f40379a71d633b3bf7faa.png)
以上过程完全同Windows下的DataSnap客户端开发。
(4)Android界面显示数据
Android下对数据的显示,与Windows下开发最大的区别是,无法使用TDBEdit一类的数据感应控件,取而代之的是标准控件,通过LiveBindings技术实现数据感应。要实现该过程,首先是在窗体上放置用于数据展示的标准控件,这里采用了TListBox和TGrid,通过TTabControl分开,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091512-462c340db4354e2684dd7f419f726da5.png)
IP和Port输入框是为了更灵活地连接服务器,下面的按钮OnClick事件代码如下:
procedure TfrmMain.Button1Click(Sender: TObject);
var
dm : TdmServerMethodsClient;
begin
try
//连接指定IP和Port的应用服务器
dmMain.SQLConn.Close;
dmMain.SQLConn.Params.Values['HostName'] := edtIP.Text;
dmMain.SQLConn.Params.Values['Port'] := edtPort.Text;
try
dmMain.SQLConn.Open;
try
//创建应用服务器上的Sample Methods在客户端的实现类
dm := TdmServerMethodsClient.Create(dmMain.SQLConn.DBXConnection);
//执行服务器上的方法
ShowMessage(dm.ReverseString(edtIP.Text));
finally
dm.Free;
end;
//开启客户端数据集
dmMain.cdsanimals.Close;
dmMain.cdsanimals.Open;
except
on E: Exception do
ShowMessage(E.Message);
end;
finally
dmMain.SQLConn.Close;
end;
end;
客户端界面与数据集之间采用LiveBindings方式,最好是打开LiveBindings设计页面,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091517-8762a3e369224c079e4c40fda43329b8.png)
![](http://images.cnitblog.com/blog/124433/201310/17091521-9f61f0a5631648ed94b922597e8d6bf3.png)
由于TListBox只能显示一个字段数据,所以用另外一个窗体单独显示某条记录的详细信息,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091531-dfec9e3b931f4831a8b57d20099e78e5.png)
启动并运行,点击按钮执行服务器函数后界面如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091544-5c32a7805a424ff790a351666d836e19.png)
TGrid展示数据如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091601-5cf94c644e7547faa6386a4e0b73c733.png)
TlistBox展示数据如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091608-d5f007d0a7ee41a2abd88c7a9976e578.png)
点击某条记录后,显示明细窗体,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091615-3958bf7a1d0d474887518c3d74fa514c.png)
结论:
(1)Android下开发DataSnap客户端,对数据的处理和服务函数调用与Windows下一致;
(2)Android客户端展示不能使用数据感应控件,只能使用标准控件,通过LiveBindings技术来实现数据关联;
(3)Windows下使用TClientDataSet需要用到Midas.dll,在Android下这个问题不存在了,也不需要单独部署Midas支持的相关文件,但是看材料iOS下好像还要部署,没试过。
(1)利用向导完成DataSnap服务器的框架,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091209-cb06b3b1ff234d57aa5f1b72cbaee3d7.png)
由于是实验,所以选择VCL程序,如果是实际应用,建议Service程序
![](http://images.cnitblog.com/blog/124433/201310/17091220-1371db1e9dac43619dd2ab0d67da434b.png)
我习惯使用TCP/IP作为通讯协议,简单且速度快,Sample Methods是演示和测试用
![](http://images.cnitblog.com/blog/124433/201310/17091246-70fc2a9b2a39413c91a1173b5c22bb78.png)
缺省211端口
![](http://images.cnitblog.com/blog/124433/201310/17091304-dd8b2a29a1a84def938eac9f6eb2842e.png)
使用TDSServerModule作为数据服务提供主体,非常方便变更为Service应用服务
![](http://images.cnitblog.com/blog/124433/201310/17091333-522401de3d484ef99e80e1a00dc8df38.png)
(2)设置服务器数据
在TDSServerModule中设置数据,为简便起见,采用BDE引擎的DBDEMOS下animals.dbf数据库,有文字也有图片,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091401-eb09a76e229f43c1b73772c3109b6a19.png)
放置一个TDataSetProvider连接该数据源,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091418-1c04362f04df41c19387275ef79dab76.png)
服务器至此设计完成,没有编写一行代码,只是调整了部分控件和窗体的名称。手动启动该应用服务程序。
(3)新建Android客户端程序
新建一个android客户端程序,在工程中增加一个TDataModule模块,用于放置与应用服务器的连接和数据,在模块窗体上放置TSQLConnection、TDSPProviderConnection、TClientDataSet三个控件,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091430-fdafc7d3f5644d9f820fc76d8978f18c.png)
其中TSQLConnection的属性设置中LoginPrompt要设为False,TDSPProviderConnection的属性设置如下:
![](http://images.cnitblog.com/blog/124433/201310/17091436-09564cb1d64541788c67a748eb56e517.png)
其中ServerClassName是指应用服务器上作为数据服务提供主体的TDSServerModule的实例类名称,在这里我习惯性地重新命名了,缺省一般是TServerMethods1。TClientDataSet的设置如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091442-c02c6805990e487b86bd3e4cf62b8c1c.png)
为实现应用服务器上Sample Methods在客户端的调用,需要创建服务类在客户端的实现类,右键点击TSQLConnection选择生成,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091451-f8b9ae73f0f04567ae1c4d2cf9351a63.png)
新生成的类定义如下:
![](http://images.cnitblog.com/blog/124433/201310/17091459-304c295f1c1f40379a71d633b3bf7faa.png)
以上过程完全同Windows下的DataSnap客户端开发。
(4)Android界面显示数据
Android下对数据的显示,与Windows下开发最大的区别是,无法使用TDBEdit一类的数据感应控件,取而代之的是标准控件,通过LiveBindings技术实现数据感应。要实现该过程,首先是在窗体上放置用于数据展示的标准控件,这里采用了TListBox和TGrid,通过TTabControl分开,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091512-462c340db4354e2684dd7f419f726da5.png)
IP和Port输入框是为了更灵活地连接服务器,下面的按钮OnClick事件代码如下:
procedure TfrmMain.Button1Click(Sender: TObject);
var
dm : TdmServerMethodsClient;
begin
try
//连接指定IP和Port的应用服务器
dmMain.SQLConn.Close;
dmMain.SQLConn.Params.Values['HostName'] := edtIP.Text;
dmMain.SQLConn.Params.Values['Port'] := edtPort.Text;
try
dmMain.SQLConn.Open;
try
//创建应用服务器上的Sample Methods在客户端的实现类
dm := TdmServerMethodsClient.Create(dmMain.SQLConn.DBXConnection);
//执行服务器上的方法
ShowMessage(dm.ReverseString(edtIP.Text));
finally
dm.Free;
end;
//开启客户端数据集
dmMain.cdsanimals.Close;
dmMain.cdsanimals.Open;
except
on E: Exception do
ShowMessage(E.Message);
end;
finally
dmMain.SQLConn.Close;
end;
end;
客户端界面与数据集之间采用LiveBindings方式,最好是打开LiveBindings设计页面,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091517-8762a3e369224c079e4c40fda43329b8.png)
![](http://images.cnitblog.com/blog/124433/201310/17091521-9f61f0a5631648ed94b922597e8d6bf3.png)
由于TListBox只能显示一个字段数据,所以用另外一个窗体单独显示某条记录的详细信息,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091531-dfec9e3b931f4831a8b57d20099e78e5.png)
启动并运行,点击按钮执行服务器函数后界面如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091544-5c32a7805a424ff790a351666d836e19.png)
TGrid展示数据如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091601-5cf94c644e7547faa6386a4e0b73c733.png)
TlistBox展示数据如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091608-d5f007d0a7ee41a2abd88c7a9976e578.png)
点击某条记录后,显示明细窗体,如下图:
![](http://images.cnitblog.com/blog/124433/201310/17091615-3958bf7a1d0d474887518c3d74fa514c.png)
结论:
(1)Android下开发DataSnap客户端,对数据的处理和服务函数调用与Windows下一致;
(2)Android客户端展示不能使用数据感应控件,只能使用标准控件,通过LiveBindings技术来实现数据关联;
(3)Windows下使用TClientDataSet需要用到Midas.dll,在Android下这个问题不存在了,也不需要单独部署Midas支持的相关文件,但是看材料iOS下好像还要部署,没试过。
相关文章推荐
- Delphi XE5 for Android (九)
- Delphi XE5 for Android (八)
- Delphi XE5 for Android (七)
- Delphi XE5 for Android (五)
- Delphi XE5 for Android (四)
- Delphi XE5 for Android (三)
- Delphi XE5 for Android (二)
- Delphi XE5 for Android (一)
- Delphi版本的淘宝接口(TopAPI)开发
- Delphi xe5 firemonkey关闭应用程序
- Delphi 使用 Format格式话字符串的用法
- delphi学习笔记(2) 专家模式
- 在Delphi7中调试COM+
- Delphi 学习笔记 (1) 定义函数 调试输出
- delphi用createfile打开usb设备
- Delphi 中的全局快捷键+给指定窗体发送按键
- Dll学习一_Dll 创建并动态引用窗体且释放窗体Demo
- Dll学习一_Dll 创建并动态引用窗体且释放窗体Demo
- 通过修改Delphi 的 RTL,加快Delphi开发的应用程序速度和稳定性
- 关于在DELPHI 里如何调用USB设备