zoukankan      html  css  js  c++  java
  • Delphi XE5 for Android (十)

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

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

    image

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

    image

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

    image

    缺省211端口

    image

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

    image

    (2)设置服务器数据

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

    image

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

    image

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

    (3)新建Android客户端程序

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

    image

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

    image

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

    image

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

    image

    新生成的类定义如下:

    image

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

    (4)Android界面显示数据

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

    image

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

    image

    image

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

    image

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

    image

    TGrid展示数据如下图:

    image

    TlistBox展示数据如下图:

    image

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

    image

    结论:

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

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

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

  • 相关阅读:
    [ZJOI2008]树的统计 树链剖分
    CF915E 动态开线段树
    Poj 2114 Boatherds(点分治)
    Poj 2599 Godfather(树的重心)
    Bzoj 2152: 聪聪可可(点分治)
    Cogs 1714. [POJ1741][男人八题]树上的点对(点分治)
    Cogs 329. K- 联赛(最大流)
    Cogs 731. [网络流24题] 最长递增子序列(最大流)
    Bzoj 2282: [Sdoi2011]消防(二分答案)
    Cogs 732. [网络流24题] 试题库(二分图)
  • 原文地址:https://www.cnblogs.com/leonkin/p/3442106.html
Copyright © 2011-2022 走看看