我觉得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下好像还要部署,没试过。

Delphi XE5 for Android (十)的更多相关文章

  1. Delphi XE5 for Android (八)

    delphi xe5 编译的程序在启动时会有短暂的黑屏出现,这个现象产生是因为启动首个activity时会加载一些初始化数据,整个时间大约在2~3秒,如何处理? 网上有些资料,这里主要参考和整理了CS ...

  2. Delphi XE5开发Android程序使用自定义字体文件.

    万事大吉,只欠根据字体文件(.ttf文件)切换阅读字体,通常Android系统只带三种以下字体.一般用Java/Eclipse开发的话比较简单,typeface的createFromAsset,cre ...

  3. Delphi XE5的Android开发平台搭建[转]

    Delphi XE5支持Android ARM的开发,可以在Android虚拟机里运行,因此建议将XE5安装在64bit的Windows,内存可以大于3GB Delphi XE5安装光盘中包含了最基本 ...

  4. Delphi XE5 for Android (一)

    Delphi XE5 出来了,支持Android的开发,试用了一下,有几个问题: 1.只支持ARM7的设备,不支持Inter设备.手上刚好有一个华硕K004,很遗憾用不上,只能用手机试了. 2.要支持 ...

  5. Delphi XE5的Android开发平台搭建

    Delphi XE5支持Android ARM的开发,可以在Android虚拟机里运行,因此建议将XE5安装在64bit的Windows,内存可以大于3GB Delphi XE5安装光盘中包含了最基本 ...

  6. Delphi XE5 for Android (七)

    Delphi XE5下,TMainMenu和TPopupMenu不可用,那么如何支持Android的菜单呢? 查看了一些资料,不得要领,只是摸索着先模拟一下吧. 首先在窗体上放置一个TPanel,在其 ...

  7. Delphi XE5 for Android (九)

    Delphi XE5 下TEdit控件有个属性:KeyboardType,如下图:   该属性决定了当焦点进入TEdit时,系统弹出的输入窗体,按照其帮助文件说明,不同取值的输入窗体不同,如下图: 根 ...

  8. 解决 Delphi XE5 写Android程序的No resource identifier found for attribute... 错误【转】

    原文:http://www.hxhlb.cn/article/32142aaeb67bbc05379369c3.html 那一天,我装上了RAD Studio XE5. 当天晚上,我就写了一个小小的A ...

  9. RAD DELPHI XE5的android开发环境配置

    RAD XE5 支持本地化跨平台编译(IOS,OS-X,WIN 64,WIN32,ANDROID) 对于android的开发环境,XE5支持模拟器,和真机设备两种模式: 1. 模拟器:(支持4.0.3 ...

随机推荐

  1. UVa 202 Repeating Decimals(抽屉原理)

    Repeating Decimals 紫书第3章,这哪是模拟啊,这是数论题啊 [题目链接]Repeating Decimals [题目类型]抽屉原理 &题解: n除以m的余数只能是0~m-1, ...

  2. DataGridView控件用法二:常用属性

    通常会设置的DataGridView的属性如下: AllowUserToAddRows - False指示是否向用户显示用于添加行的选项,列标题下面的一行空行将消失.一般让其消失.AllowUserT ...

  3. MongoDB Driver:使用正确的姿势连接复制集

    from:https://yq.aliyun.com/articles/8461?spm=5176.7937264.222114.10.s2oqcT   摘要: MongoDB复制集(Replica ...

  4. node.js中net模块创建服务器和客户端(TCP)

    node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...

  5. Python全栈-库的操作

    一.系统数据库 安装数据库系统后,系统自带的数据库.通过mysql客户端连接数据库系统后,使用show命令可查看系统中存在的所有库: mysql> show databases; +------ ...

  6. Python全栈-网络编程-TCP粘包

    一.什么是TCP粘包 C/S架构下,接收方不知道每个消息的发送间隙.也不知道每次应该提取多少个字节的数据,与此同时,TCP是面向连接的,面向流的,收发两端都要有,因此发送端为了将多个发往接收端的数据包 ...

  7. 33网络通信之Epoll模型

    多路复用并发模型  -- epoll 监控事件 events EPOLLIN                  fd可读 EPOLLOUT              fd可写 EPOLLPRI     ...

  8. MVC中的Ajax与增删改查(二)

    上一篇记录的是前台操作,下面写一下后台 ,本来自认为是没有必要做补充,毕竟思路啥的都有,实际上在做删除操作的时候,折腾了一天,还是自己太嫩,逻辑不够严谨,这里作下记录. 关于表结构这里再作下说明: ① ...

  9. python 怎么让list里面设置NAN numpy.nan

  10. ETH跌破400美元大关 一场收割全球的计划完成闭环

    ETH跌破400美元大关 一场收割全球的计划完成闭环 三大交易所,ETH的价格均跌下400美元,看空者占比近80%. 在普通人眼里,这可能只是熊市的一个自然表现. 但事实完全不是这样.这本质上一场历时 ...