•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事件添加一個事件處理過程)。