我觉得Delphi最强大的的功能之一就是开发数据库三层应用的DataSnap,在Android上的实现,首先是完成服务器的设计:

(1)利用向导完成DataSnap服务器的框架,如下图:

由于是实验,所以选择VCL程序,如果是实际应用,建议Service程序

我习惯使用TCP/IP作为通讯协议,简单且速度快,Sample Methods是演示和测试用

缺省211端口

使用TDSServerModule作为数据服务提供主体,非常方便变更为Service应用服务

(2)设置服务器数据

在TDSServerModule中设置数据,为简便起见,采用BDE引擎的DBDEMOS下animals.dbf数据库,有文字也有图片,如下图:

放置一个TDataSetProvider连接该数据源,如下图:

服务器至此设计完成,没有编写一行代码,只是调整了部分控件和窗体的名称。手动启动该应用服务程序。

(3)新建Android客户端程序

新建一个android客户端程序,在工程中增加一个TDataModule模块,用于放置与应用服务器的连接和数据,在模块窗体上放置TSQLConnection、TDSPProviderConnection、TClientDataSet三个控件,如下图:

其中TSQLConnection的属性设置中LoginPrompt要设为False,TDSPProviderConnection的属性设置如下:

其中ServerClassName是指应用服务器上作为数据服务提供主体的TDSServerModule的实例类名称,在这里我习惯性地重新命名了,缺省一般是TServerMethods1。TClientDataSet的设置如下图:

为实现应用服务器上Sample Methods在客户端的调用,需要创建服务类在客户端的实现类,右键点击TSQLConnection选择生成,如下图:

新生成的类定义如下:

以上过程完全同Windows下的DataSnap客户端开发。

(4)Android界面显示数据

Android下对数据的显示,与Windows下开发最大的区别是,无法使用TDBEdit一类的数据感应控件,取而代之的是标准控件,通过LiveBindings技术实现数据感应。要实现该过程,首先是在窗体上放置用于数据展示的标准控件,这里采用了TListBox和TGrid,通过TTabControl分开,如下图:

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设计页面,如下图:

由于TListBox只能显示一个字段数据,所以用另外一个窗体单独显示某条记录的详细信息,如下图:

启动并运行,点击按钮执行服务器函数后界面如下图:

TGrid展示数据如下图:

TlistBox展示数据如下图:

点击某条记录后,显示明细窗体,如下图:

结论:

(1)Android下开发DataSnap客户端,对数据的处理和服务函数调用与Windows下一致;

(2)Android客户端展示不能使用数据感应控件,只能使用标准控件,通过LiveBindings技术来实现数据关联;

(3)Windows下使用TClientDataSet需要用到Midas.dll,在Android下这个问题不存在了,也不需要单独部署Midas支持的相关文件,但是看材料iOS下好像还要部署,没试过。

更多相关文章

  1. Android消息处理框架:Looper,Handler,MessageQueue
  2. Android存储之SharedPreferences
  3. android 集合与json之间的相互转换
  4. Android(安卓)监测手机联网状态 wifi、移动数据流量、无联网状态
  5. Android控件之Textview
  6. android页面或组件动画(比如淡出、3D翻转、进入......进入和退出
  7. android 控件的隐藏和显示
  8. RecyclerView的简单使用
  9. Android(安卓)Call Log and SMS Delete 电话记录和短信删除

随机推荐

  1. 手把手教你搞定权限管理,结合Spring Secur
  2. 开发中总结的dart相关的技巧
  3. Elasticsearch aggs 聚合
  4. 用户注册表练习
  5. 这才是你需要的C语言、C++学习路线!
  6. 数学相关函数在PHP中的应用简介
  7. 简单计算器
  8. PHP字符运算、类型转换和系统函数
  9. 简单计算器
  10. 为什么我们要面向接口编程?!