Delphi for iOS開發指南(14):在iOS應用程序中使用InterBase ToGo

在開始這篇教程之前,你應該預先閱讀並按下面教程實際操作過:

 

•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.添加如下代碼到事件處理過程中:

 

  1. procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject);  
  2.   
  3. begin  
  4.   
  5.   {$IFDEF IOS}  
  6.   
  7.     SQLConnection1.Params.Values['Database']  
  8.   
  9.     := GetHomePath + PathDelim  
  10.   
  11.        + 'Documents' + PathDelim + 'dbdemos.gdb';  
  12.   
  13.   {$ENDIF}  
  14.   
  15. 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.拖放一個按鈕在窗體上,然後創建如下事件處理過程來手動連接到數據庫:

 

  1. procedure TForm1.Button1Click(Sender: TObject);  
  2.   
  3. begin  
  4.   
  5.   try  
  6.   
  7.     SQLConnection1.Connected := True;  
  8.   
  9.     SQLDataSet1.Active := True;  
  10.   
  11.   except  
  12.   
  13.     on e: Exception do  
  14.   
  15.     begin  
  16.   
  17.       ShowMessage(e.Message);  
  18.   
  19.     end;  
  20.   
  21.   end;  
  22.   
  23. end;  
  24.   
  25.    
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事件添加一個事件處理過程)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章