您的位置:首页 > 移动开发 > IOS开发

Delphi for iOS开发指南(14):在iOS应用程序中使用InterBase ToGo

2013-09-03 09:25 525 查看
在开始这篇教程之前,你应该预先阅读并按下面教程实际操作过:
 

•iOS开发指南(9):在iOS应用程序中使用ListBox组件来显示TableView

 

这篇教程描述了在iOS Device上,通过dbExpress框架来浏览由InterBase ToGo管理的数据的基本步骤。

 


 

 

 

 

 

 

 

 

使用DBExpress来连接数据库

 

dbExpress是一个十分快速的数据库访问框架,由Delphi编写。RAD Studio为很多主要的数据库提供驱动,例如InterBase,Oracle,DB2,SQL Server,MySQL,Firebird,SQLite,和ODBC。你可以使用相同的过程来访问这些不同的数据库。

 

•在iOS平台,dbExpress支持InterBase ToGo,也支持SQLite。这些数据库产品可以运行在iOS Device上。

•对于其他数据库,例如,Oracle,你至少需要一个客户端的库。在Windows平台上,客户端的库由一个DLL提供来连接数据库。因为,你需要使用中间层技术,例如DataSnap来在iOS Device上连接这些数据库。

 

 

 

另一个讨论如何在iOS Device上不使用客户端的库连接企业级数据库的教程;请查看“iOS教程:在iOS客户端应用程序中连接企业级数据库”。

 

 

 

 

 

 

 

 

 

 

设计并配置用户界面

 

这篇教程使用一个TListBox组件来作为UI元素。

 

使用下列步骤配置一个ListBox组件:

1. 创建一个HD FireMonkey Mobile Application,选择File>New>FireMonkey Mobile Application-Delphi>Blank Application。

2. 拖放一个TListBox组件到窗体上。

3. 在Object Inspector,设置ListBox组件的如下属性:

•设置Align属性为alClient,以便ListBox组件填充整个窗体。

•设置DefaultItemStyles.ItemStyle属性为listboxitembottomdetail。

4. 在Designer或Editor中右击TListBox组件,选择Add Item,然后添加下面这些组件:

•TListBoxHeader组件。

•TSearchBox组件。

 


5. 关闭Items Designer。

6. 添加一个TLabel组件到TListBoxHeader上,在Object Inspector中设置如下属性:

•设置TLabel组件的Align属性为alClient。

•设置StyleLookup属性为toollabel。

•设置TextAlign属性为taCenter。

•设置Text属性为DB DEMO。

 

 

 

 

 

 

 

 

 

 

 

 

连接数据

 

下面是使用dbExpress来连接数据库中的数据的基本步骤:

1. 在Tool Palette上,双击TSQLConnection组件。



2. 在Object Inspector中,设置TSQLConnection的如下属性:

        1. 这个应用程序使用InterBase ToGo,因此设置Driver属性为IBLite/ToGo。

       


        2.设置LoginPrompt属性为False,以便于用户不需要再提示输入密码了。
        3. 点击Params属性旁边的[…]省略号按钮,然后设置Database值为C:\Users\Public\Documents\RAD Studio\11.0\Samples\Data\dbdemos.gdb(数据库存放路径);然后关闭对话框:

       


        4. 设置Connected属性为True。

注:如果你在开发环境里得到一个错误(“不可用的数据库”),这意味着你没有一个当前可用的InterBase许可。这个InterBase开发者版本许可包含在一些版本的产品中。

3.在窗体上添加一个TSQLDataSet,然后设置如下属性:
        1. 设置SQLConnection属性为SQLConnection1(你之前添加的)。
        2. 设置CommandText属性为select COMMON_NAME,SPECIES_NAME from BIOLIFEorder by COMMON_NAME。
        3. 设置Active属性为True。
        4. 打开LiveBindings Designer,然后按如下操作连接数据和用户界面:

       


        1. 在BindSourceDB1中点击COMMON_NAME,然后拖动鼠标光标到ListBox1里抽Item.Text上。

        2. 在BindSourceDB1中点击SPECIES_NAME,然后拖动鼠标光标到ListBox1中的Item.Detail上。



 

 

 

 

 

 

 

 

 

 

布署你的应用程序到iOS

 

到了这里,你需要在你的电脑使用InterBase。这意味着真正的数据库放在你的本地磁盘上(例如,C:\User\Public\Documents\RAD Studio\11.0\Samples\Data\dbdemos.gdb)。在iOS Device上,应用程序是在沙箱环境里运行的,通常你只能在你应用程序目录的Documents目录下才能读写数据。

 

 

 

要在iOS上连接到一个本地数据库,你需要执行下列操作:

 

•布署数据库到iOS Device。

•更改配置(连接到数据库文件的)到一个在Documents目录下的本地文件。

 

 

 

 

 

 

布署InterBase ToGo,dbExpress Driver,以及数据库文件到iOS

 

要在iOS上执行你的应用程序,你需要布署下面这些文件:

 

1.InterBase ToGo

2.InterBase的dbExpress Driver

3.数据库文件(dbdemos.gdb)
        1. 选择Project>Deployment来打开Deployment Manager。
        2. 在Deploy Manager顶部的目标平台的下拉列表中选择All-Configurations-iOS Simulator Platform。
        3. 选择Add Featured Files(

):


        4.选择下列数据模块,然后点击OK来关闭Featured Files对话框:

                1.InterBase ToGo。你需要选择用来分发应用程序到Device上的许可。许可文件的默认名称在Featured Files对话框中列出,如下名称模板:reg_*.txt。就像你可以在下图看到的,在这篇教程中,选中的是reg_ibtogo.txt许可文件。

你可能已经从Embarcadero那里接收到一个用于ToGo或IBLite的许可文件,名称类似于reg_nnnnnnn.txt,nnnnnnn是生成的数字:

•如果你已经保存这个文件为reg_ibtogo.txt或reg_iblite.txt到如下目录(例如,C:\Users\Public\Documents\InterBase\redist\InterBaseXE4),你只需要选择这个对应的许可。

•如果你将它保存为原来的文件名,那么选择Add Files(在下一步中有显示),然后添加需要布署到应用程序的许可文件。

2. DBExpress InterBase Driver



5. 选择Add Files,然后选择数据库文件(例如,C:\Users\Public\Documents\RAD Studio\11.0\Samples\Data\dbdemos.gdb)。

6. 选择dbdemos.gdb,然后更改Remote Path为StartUp\Documents\。

7. 选择Platforms列(在dbdemos.gdb行双击省略号[…]):

        1. 确保在dbdemos.gdb行的Platforms列显示为iOS Simulator和iOS Device。

        2.如果存在Win32,那么移除(你不需要复制数据库文件到Win32平台)。

8. 选择All-Configurations-iOS Device平台,确保dbdemos.gdb设置为布署到StartUp\Documents\。

当你配置完之后,数据库文件(dbdemos.gdb)会被布署到你的iOS应用程序的沙箱区域的Documents目录。

 

 

 

 

 

 

 

 

 

修改你的代码来连接在iOS上的本地数据库文件

 

之前的步骤提到过,TSQLConnection组件是使用绝对路径连接到在你本地文件系统上的数据库。因此在连接到数据库之前,你需要替换文件的路径,如下:

1. 在Form Designer中,选择SQLConnection1组件。

2. 在Object Inspector中,双击BeforeConnect事件的Value区域。

3.添加如下代码到事件处理过程中:

 

[delphi]
view plaincopyprint?

procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject);  
  
begin  
  
  {$IFDEF IOS}  
  
    SQLConnection1.Params.Values['Database']  
  
    := GetHomePath + PathDelim  
  
       + 'Documents' + PathDelim + 'dbdemos.gdb';  
  
  {$ENDIF}  
  
end;  

procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject);

begin

{$IFDEF IOS}

SQLConnection1.Params.Values['Database']

:= GetHomePath + PathDelim

+ 'Documents' + PathDelim + 'dbdemos.gdb';

{$ENDIF}

end;


 

 

 

GetHomePath函数提供给你一个iOS应用的真实根目录。强烈建议使用常量System.SysUtils.PathDelim,因为PathDelim使用特定平台的路径分隔符(而不是写死在代码里,例如\或/)。

 

 

 

 

 

 

 

 

 

在iOS Simulator或iOS Device上运行你的应用程序

 

现在,你的应用程序可以准备运行了。你应该可以在IDE中浏览到数据。你也可以使用搜索框来缩减列表,如下面第二张图所示:

 

 




 

 

 

 

 

 

 

 

问题解决

 

InterBase许可问题

 

当你在开发环境下连接数据库时如果你遇到错误(“不可用的数据库”),这意味着你没有一个当前InterBase的许可。

 

•InterBase开发者版本的许可已经作为一些产品版本的一部分。

•对于一个已经注册了的RAD Studio安装要激活InterBase开发者版本的许可,要Embarcadero Product License Manager(点击Start|All Programs|Embarcadero InterBase XE3)。

 

 

 

异常处理问题

 

如果你的应用程序抛出一个异常,而没有合适的异常处理代码,你的iOS应用会在运行时崩溃。

如果你在运行时遇到程序崩溃,你可能要使用下列步骤来手动连接到数据库:

1.选中SQLConnection1组件,更改Connected属性为False。

2.拖放一个按钮在窗体上,然后创建如下事件处理过程来手动连接到数据库:

 

[delphi]
view plaincopyprint?

procedure TForm1.Button1Click(Sender: TObject);  
  
begin  
  
  try  
  
    SQLConnection1.Connected := True;  
  
    SQLDataSet1.Active := True;  
  
  except  
  
    on e: Exception do  
  
    begin  
  
      ShowMessage(e.Message);  
  
    end;  
  
  end;  
  
end;  
  
   

procedure TForm1.Button1Click(Sender: TObject);

begin

try

SQLConnection1.Connected := True;

SQLDataSet1.Active := True;

except

on e: Exception do

begin

ShowMessage(e.Message);

end;

end;

end;


 

 

 

 

 

 

 

 

常见错误及解决方案

 

下面是一些常见的错误(在连接数据库的时候你可能会遇到),以及解决这些问题的建议:

 

在iOS上的错误                  建议


   检查数据库文件(dbdemos.gdb)是否传递到了“StartUp\Documents”。


    检查InterBase ToGo的许可文件是否传递。


     检查是否你指向了本地文件(给SQLConnection1组件的OnBeforeConnect事件添加一个事件处理过程)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  delphi ios开发
相关文章推荐