モバイル チュートリアル:FireDAC で InterBase ToGo を使用する(iOS および Android)

提供: Appmethod Topics
移動先: 案内検索

モバイル チュートリアル:モバイル アプリケーション開発(iOS および Android) への移動


このチュートリアルを開始する前に、次のチュートリアルを読んで実行してください。

ヒント: このチュートリアルを実行するには、IBToGo または IBLiteライセンスが必要です。

  • Appmethod の以下のバージョンのいずれかを購入した場合は、IBLite の無制限開発および配置ライセンスのキーを電子メールで受け取っているはずです。
    • Appmethod 1.17 Professional 以上 のすべてのエディション
  • 評価ユーザーの場合、インストール ファイルには、IBToGo のトライアル ライセンスが含まれています。 開発作業の中でテスト ライセンスを選択することで(このチュートリアルで説明します)、iOS および Android 上で InterBase をテストすることができます。 トライアル ライセンスは、トライアル製品と一緒に、C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE7 にインストールされます。


IBLite および IBToGo のテスト配置ライセンス」の手順に従って、ライセンス ファイルを取得し、インストールします。

メモ: Android デバイスでは、InterBase ToGo アプリケーションは特定の権限が設定される必要があります。特に下記です:
  • [外部ストレージの読み取り](データベースが外部メモリに配置されている場合)
  • [外部ストレージへの書き込み](データベースが外部メモリに配置されている場合)
  • [インターネット](リモート サーバーに接続する必要がある場合)

このチュートリアルでは、FireDAC フレームワークを使って iOS および Android デバイス上で InterBase ToGo の管理するデータを参照する基本手順を説明します。

iOS Android

DBDemo iPod Runtime.png

DBDemo Runtime.png

メモ: FireDAC、dbExpress、Interbase Express(IBX) の各コンポーネントを使用して、Interbase ToGo アプリケーションをビルドすることができます。Object Pascal アプリケーションで Interbase Express コンポーネントを使用する方法の詳細は、「InterBase Express 入門」のトピックを参照してください。このチュートリアルでは、dbExpress フレームワークを使用して Interbase ToGo に接続します。

FireDAC を使用したデータベースへの接続

FireDAC は、Object Pascal および C++ でクロスプラットフォーム データベース アプリケーションを開発するための、他に類を見ない汎用データ アクセス コンポーネントです。 FireDAC を使用すると、その強力な共通アーキテクチャのため、Object Pascal から InterBase、SQLite、MySQL、SQL Server、Oracle、PostgreSQL、IBM DB2、SQL Anywhere、Access、Firebird、Informix などに高速かつ直接にネイティブ アクセスすることができます。

  • モバイル プラットフォームの場合、FireDAC では InterBase ToGo および SQLite をサポートしています。これらのデータベース製品は iOS および Android デバイス上で動かすことができます。
  • それ以外の Oracle などのデータベースでは、少なくともクライアント ライブラリが必要です。Windows プラットフォームでは、クライアント ライブラリは DLL として提供されていて、それに対して接続します。そのため、モバイル デバイスからこれらのデータベース製品に接続するには、中間層技術を使ってアプリケーションを開発する必要があります。
モバイル デバイス上でクライアント ライブラリを使用せずにエンタープライズ データベースに接続する方法は、別のチュートリアルで説明しています。「モバイル チュートリアル:モバイル クライアントからエンタープライズ データベースに接続する(iOS および Android)」を参照してください。

ユーザー インターフェイスの設計とセットアップ

このチュートリアルでは、TListView コンポーネントと TPanel コンポーネントを UI 要素として使用します。

以下の手順で ListView コンポーネントと Panel コンポーネントをセットアップします。

  1. 次のいずれかを選択して HD マルチデバイス アプリケーションを作成します。
    • [ファイル|新規作成|マルチデバイス アプリケーション - Object Pascal|空のアプリケーション]
    • [ファイル|新規作成|マルチデバイス アプリケーション - C++|空のアプリケーション]
  2. フォームに TListView コンポーネントをドロップします。
  3. [オブジェクト インスペクタ]で、ListView の次のプロパティを設定します。
    • Align プロパティを Client に設定して、リスト ビュー コンポーネントがフォーム全体を占めるようにします。
    • ItemAppearanceListItemRightDetail に設定します。
    • SearchVisibletrue に設定します。
  4. TPanel コンポーネントをフォームに追加し、[オブジェクト インスペクタ]で次のプロパティを設定します。
    • TPanel コンポーネントの Align プロパティを Top に設定します。
  5. TLabel コンポーネントをパネルに追加し、[オブジェクト インスペクタ]で次のプロパティを設定します。
    • TLabel コンポーネントの Align プロパティを Client に設定します。
    • Views を、iOS か Android に設定します。
    • StyleLookup プロパティを listboxitemlabel に設定します。
    • ViewsMaster に戻します。
    • TextSettingsHorzAlign プロパティを Center に設定します。
    • Text プロパティを「DB DEMO」に設定します。

データへの接続

FireDAC を使ってデータベース内のデータに接続する基本手順は以下のとおりです。

  1. [ツール パレット]TFDConnection コンポーネントをダブルクリックします。
    FDConnectionComp.png
  2. TFDConnection コンポーネントを右クリックし、[接続エディタ...]を選択します。
  3. [FireDAC 接続エディタ]で、TFDConnection のパラメータを次のように設定します。
    1. [ドライバ ID]プロパティを IB に設定します。
    2. [Database]パラメータを次のように設定します。
      C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data\dbdemos.gdb(データベースの場所)
      [開く]ダイアログ ボックスで目的のフォルダに移動し、[開く]をクリックします。
    3. [User_Name]パラメータを sysdba に設定します。
    4. [Password]パラメータを masterkey に設定します。
    5. [Protocol]パラメータを TCPIP に設定します。
      FDConnectionEditor.png

    6. [テスト]ボタンをクリックして、接続をテストします。
    7. [OK]をクリックして、[FireDAC 接続エディタ]を閉じます。
  4. [オブジェクト インスペクタ]で、TFDConnection のプロパティを次のように設定します。
    1. LoginPrompt プロパティを False に設定して、ユーザーにログインを求めるプロンプトを表示しないようにします。
    2. Connected プロパティを True に設定します。
      メモ: 開発環境でエラー([unavailable database.])が発生したら、それは現在 InterBase のライセンスがないことを示しています。一部の製品エディションでは、InterBase Developer Edition のライセンスが製品に含まれています。詳細は、「トラブルシューティング」を参照してください。
  5. TFDQuery コンポーネントをフォームに追加します。
  6. TFDQuery コンポーネントを右クリックし、[FireDAC クエリ エディタ...]を選択します。
    1. [SQL コマンド]テキスト エディタに「select COMMON_NAME, SPECIES_NAME from BIOLIFE order by COMMON_NAME」と記述します。
    2. [実行]ボタンをクリックして、コマンドの結果を確認します。
      FDQueryCommandDBDemo.png

    3. [OK]をクリックして、[FireDAC クエリ エディタ]を閉じます。
  7. [オブジェクト インスペクタ]で、TFDQuery コンポーネントの Active プロパティを True に設定します。
  8. [LiveBinding デザイナ]を開き、データとユーザー インターフェイスを次のように接続します。
    1. FDQuery1 の COMMON_NAME をクリックし、マウス カーソルを ListView1 の Item.Text へとドラッグします。
      LiveBindingsDesignerCommon Name.png

      この時点で、TBindSourceDB コンポーネントと TBindingsList コンポーネントがフォームに追加されています。
    2. BindSourceDB1 の SPECIES_NAME をクリックし、マウス カーソルを ListView1 の Item.Detail へとドラッグします。
      DBDemoDesignTime.png
  9. TFDPhysIBDriverLink コンポーネントをフォームに追加します。
  10. TFDGUIxWaitCursor コンポーネントをフォームに追加します。
メモ:FireDAC アプリケーションを実行時用に準備する」トピックでは、FireDAC アプリケーションにおける TFDGUIxWaitCursor コンポーネントと TFDPhysIBDriverLink コンポーネントの使用について説明しています。

アプリケーションのモバイルへの配置

ここまでは、デスクトップで InterBase を使用してきました。つまり、実際のデータベースは、ローカルのハード ディスク ドライブ上( C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data\dbdemos.gdb など)にあります。 モバイル デバイスでは、アプリケーションはサンドボックス化されるため、通常はアプリケーション フォルダ下の Documents フォルダ(iOS デバイスの場合)および internal 記憶域(Android デバイスの場合)にあるデータしか読み書きできません。

モバイル上でローカル データベースに接続するには、以下の作業を実施する必要があります。

  • データベースをモバイル デバイスに配置する。
  • (データベース ファイルに接続するための)構成を、Documents フォルダ(iOS デバイスの場合)または internal 記憶域(Android デバイスの場合)のローカル ファイルに変更する。

InterBase ToGo に必要なファイルとデータベース ファイルをモバイルに配置する

モバイル上でアプリケーションを実行するには、以下のファイルを配置する必要があります。

  • Interbase ToGo に必要なファイル(ライセンス ファイルとその他の構成ファイル)
  • データベース ファイル(dbdemos.gdb)

次のようにして、これらのファイルをアプリケーションに配置します。

  1. データベースは、次の 2 つの方法のいずれかでプロジェクトに追加することができます。
    • [プロジェクト マネージャ]でプロジェクト名を右クリックし、コンテキスト メニューの[追加...](または[プロジェクト|プロジェクトに追加...])を選択して、[プロジェクトに追加]ダイアログ ボックスを開きます。データベースのある場所 C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data に移動し、データベース dbdemos.gdb を選択して、[開く]をクリックします。
    • データベースのある場所 C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data に移動し、データベース dbdemos.gdb を[プロジェクト マネージャ]内のプロジェクトにドラッグ アンド ドロップします。ファイルをプロジェクトに追加するかどうかを確認するダイアログ ボックスで[はい]をクリックします。
  2. データベース ファイルを追加すると、[機能ファイル]ウィンドウが開きます。[機能ファイル][InterBase ToGo]を選択し、[OK]をクリックして、[機能ファイル]ダイアログ ボックスを閉じます。
    • [InterBase ToGo]下のノードで、アプリケーションをデバイスに配置するときに使用するライセンスを選択する必要があります。
      • このチュートリアルの冒頭にあるヒントで、InterBase ライセンスを認証する方法について説明しています。
      • 使用可能なライセンス ファイルの名前は、[機能ファイル]ダイアログreg_*.txt というパターンの名前で一覧として提示されます。
        下の画像に示すように、このチュートリアルでは reg_ibtogo.txt というライセンス ファイルを選択します。
      • Embarcadero から IBToGo または IBLite 用に reg_nnnnnnn.txt というパターンのライセンス ファイルを受け取っているかもしれません(nnnnnnn は生成された数値)。
        • そのファイルを、reg_ibtogo.txt または reg_iblite.txt として、次の場所(例、C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE7)に保存している場合には、必要なライセンスを選択するだけで構いません。
        • ファイルを元の名前で保存している場合には、[ファイルの追加]を選択し(次のステップで説明します)、アプリケーションと一緒に配置する必要のあるファイルのリストにライセンス ファイルを追加してください。
    FeaturedFilesiOSAndroidDB.png

  3. [プロジェクト|配置]を選択して配置マネージャを開きます。
  4. 配置マネージャ上部のターゲット プラットフォームのドロップダウン リストで[Debug 構成 - iOS デバイス - 32 ビット プラットフォーム][Debug 構成 - iOS デバイス - 64 ビット プラットフォーム]、または[Debug 構成 - Android プラットフォーム]を選択し、データベース dbdemos.gdb がプラットフォームに追加されていることを確認します。
  5. iOS プラットフォームと Android プラットフォームで、dbdemos.gdb[リモート パス]がどのように設定されているかを確認します。
    • iOS デバイス プラットフォームの[リモート パス]StartUp\Documents\
    ChangeToStartUpDocuments.png
    • Android プラットフォームの[リモート パス]assets\internal\
    AddDBforAndroidAssets.png

このように構成すると、モバイル デバイス上でアプリケーションを実行したときに、マルチデバイス アプリケーションのサンドボックス領域の Documents フォルダ(iOS プラットフォームの場合)または internal 記憶域(Android プラットフォームの場合)にデータベース ファイル(dbdemos.gdb)を配置するよう、設定されます。

TFDConnection の場合、次のように BeforeConnect イベント ハンドラを作成します。

  1. フォーム デザイナTFDConnection コンポーネントを選択します。
  2. [オブジェクト インスペクタ]で[イベント]タブに移動し、BeforeConnect イベントをダブルクリックします。
  3. 次のコードを追加して、BeforeConnect イベントのイベント ハンドラを実装します。
    • Object Pascal の場合:
    procedure TForm1.FDConnection1BeforeConnect(Sender: TObject);
    begin
      {$IF DEFINED(iOS) or DEFINED(ANDROID)}
       FDConnection1.Params.Values['Protocol'] := 'Local';
       FDConnection1.Params.Values['Database'] :=  TPath.Combine(TPath.GetDocumentsPath, 'dbdemos.gdb');
      {$ENDIF}
    end;
    

    TPath レコードは System.IOUtils ユニットで宣言されているため、以下のコードのように uses 句に System.IOUtils を追加する必要があります。

    implementation
    
    {$R *.fmx}
    {$R *.NmXhdpiPh.fmx ANDROID}
    {$R *.iPhone4in.fmx IOS}
    
    uses System.IOUtils;
    
    procedure TForm1.FDConnection1BeforeConnect(Sender: TObject);
    //  previous code goes here
    
    • C++ の場合:
    void __fastcall TForm1::SQLConnection1BeforeConnect(TObject *Sender)
    {
      #if defined(_PLAT_IOS) || defined(_PLAT_ANDROID)
          FDConnection1->Params->Values["Protocol"] = "Local";
          FDConnection1->Params->Values["Database"] = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), "dbdemos.gdb");
      #endif
    }
    

    ユニット(.cpp ファイル)に #include <System.IOUtils.hpp> を追加する必要があります。

シミュレータまたはモバイル デバイス上でのアプリケーションの実行

これでアプリケーションを実行する準備が整いました([実行|実行]または F9 キーを押す)。IDE 内で実行したときと同様に、データを閲覧することができるはずです。検索ボックスを使用してリストを絞り込むこともできます。

iOS Android

IPodSearchDBDemo.png

Screenshot 2013-11-02-03-34-10.png

トラブルシューティング

InterBase の問題

InterBase ライセンスの問題の詳細については、次のセクションを参照してください。

メモ: 「IBLite および IBToGo のテスト配置ライセンス」の手順で、有効なライセンス ファイルを入手することができます。

例外処理の問題

アプリケーションで例外が発生して適切な例外処理コードがない場合、マルチデバイス アプリケーションは実行時にそのままクラッシュします(消えてしまいます)。

クラッシュが発生した場合、問題のトラブルシューティング時に手動でデータベースに接続することができます。手順は以下のとおりです。

  1. FDConnection1 コンポーネントを選択し、Connected プロパティを False に変更します。
  2. ボタンをフォームにドロップし、データベースに手動で接続するための次のようなイベント ハンドラを作成します。

    Object Pascal の場合:

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

    C++ の場合:

    void __fastcall TForm1::Button1Click(TObject *Sender) {
        try {
            FDConnection1->Connected = true;
            FDQuery1->Active = true;
        }
        catch(Exception &e) {
            ShowMessage(e.Message);
        }
    }
    
  3. エラー メッセージをチェックします。

関連項目