Android开发数据库三层应用-DataSnap

Android开发数据库三层应用-DataSnap

时间:2013-10-24 13:41:54 点击:4988

  核心提示:我以为Delphi最强大的的功能之一就是开发数据库三层应用的DataSnap,在Android上的实现,首先是完成服务器的设计:(1)利用向导完成DataSnap服务器的框架,以下图:因为是实验,因此选择VCL程序,若是是实际应用,建议Service程序我习惯使用TCP/IP做为通信协议,简单且速度...android

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

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

<!--[if !vml]-->532&times;238<!--[endif]-->框架

因为是实验,因此选择VCL程序,若是是实际应用,建议Service程序ide

<!--[if !vml]-->533&times;297<!--[endif]-->函数

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

<!--[if !vml]-->535&times;529<!--[endif]-->spa

缺省211端口设计

<!--[if !vml]-->539&times;321<!--[endif]-->事件

使用TDSServerModule做为数据服务提供主体,很是方便变动为Service应用服务

<!--[if !vml]-->542&times;320<!--[endif]-->

2)设置服务器数据

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

<!--[if !vml]-->542&times;448<!--[endif]-->

放置一个TDataSetProvider链接该数据源,以下图:

<!--[if !vml]-->548&times;371<!--[endif]-->

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

3)新建Android客户端程序

新建一个android客户端程序,在工程中增长一个TDataModule模块,用于放置与应用服务器的链接和数据,在模块窗体上放置TSQLConnectionTDSPProviderConnectionTClientDataSet三个控件,以下图:

<!--[if !vml]-->562&times;171<!--[endif]-->

其中TSQLConnection的属性设置中LoginPrompt要设为FalseTDSPProviderConnection的属性设置以下:

<!--[if !vml]-->568&times;164<!--[endif]-->

其中ServerClassName是指应用服务器上做为数据服务提供主体的TDSServerModule的实例类名称,在这里我习惯性地从新命名了,缺省通常是TServerMethods1TClientDataSet的设置以下图:

<!--[if !vml]-->570&times;408<!--[endif]-->

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

<!--[if !vml]-->421&times;393<!--[endif]-->

新生成的类定义以下:

<!--[if !vml]-->607&times;175<!--[endif]-->

以上过程彻底同Windows下的DataSnap客户端开发。

4Android界面显示数据

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

<!--[if !vml]-->331&times;642<!--[endif]-->

IPPort输入框是为了更灵活地链接服务器,下面的按钮OnClick事件代码以下:

procedure TfrmMain.Button1Click(Sender: TObject);

var

 dm : TdmServerMethodsClient;

begin

 try

   //链接指定IPPort的应用服务器

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

<!--[if !vml]-->243&times;151<!--[endif]-->

<!--[if !vml]-->428&times;299<!--[endif]-->

因为TListBox只能显示一个字段数据,因此用另一个窗体单独显示某条记录的详细信息,以下图:

<!--[if !vml]-->435&times;651<!--[endif]-->

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

<!--[if !vml]-->426&times;489<!--[endif]-->

TGrid展现数据以下图:

<!--[if !vml]-->436&times;505<!--[endif]-->

TlistBox展现数据以下图:

<!--[if !vml]-->422&times;484<!--[endif]-->

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

<!--[if !vml]-->421&times;484<!--[endif]-->

结论:

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

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

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

相关文章
相关标签/搜索