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

     

  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/china1/p/3411794.html
Copyright © 2011-2022 走看看