•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.添加如下代码到事件处理过程中:
- 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.拖放一个按钮在窗体上,然后创建如下事件处理过程来手动连接到数据库:
- 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事件添加一个事件处理过程)。