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

提供: RAD Studio
移動先: 案内検索

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


YellowBang.png 注意: このチュートリアルで説明されている dbExpress は非推奨です。つまり、dbExpress は今後のリリースでは RAD Studio から削除されます。
dbExpress の代わりに、当社の新しいデータベース ソリューションである FireDAC を使用することをお勧めします。FireDAC については、類似のチュートリアル(以下)で説明しています。
モバイル チュートリアル:FireDAC で InterBase ToGo を使用する(iOS および Android)

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

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

  • RAD Studio の以下のバージョンのいずれかを購入した場合は、IBLite の無制限開発および配置ライセンスのキーを電子メールで受け取っているはずです。
    • RAD Studio Athens Professional 以上すべてのエディション
    • Delphi Athens Professional with Mobile 以上
  • 評価ユーザーの場合、インストール ファイルには、IBToGo のトライアル ライセンスが含まれています。 開発作業の中でテスト ライセンスを選択することで(このチュートリアルで説明します)、iOS および Android 上で InterBase をテストすることができます。 トライアル ライセンスは、トライアル製品と共に、 C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBase2020.
メモ: Android デバイスでは、InterBase ToGo アプリケーションは特定の権限が設定される必要があります。特に下記です:
  • [外部ストレージの読み取り](データベースが外部メモリに配置されている場合)
  • [外部ストレージへの書き込み](データベースが外部メモリに配置されている場合)
  • [インターネット](リモート サーバーに接続する必要がある場合)

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

iOS Android

DBDemo iPod Runtime.png

DBDemo Runtime.png

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

dbExpress を使用してデータベースに接続する

dbExpress は、Delphi で書かれた非常に高速なデータベース アクセス フレームワークです。RAD Studio では、InterBase、Oracle、DB2、SQL Server、MySQL、Firebird、SQLite、ODBC など、ほとんどの主要データベース用にドライバを用意しています。データベースは違っても、ここで説明するものと同様の手順でこれらのデータベースにアクセスすることができます。

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

モバイル デバイス上でクライアント ライブラリを使用せずにエンタープライズ データベースに接続する方法は、別のチュートリアルで説明しています。「モバイル チュートリアル:モバイル クライアントからエンタープライズ データベースに接続する(iOS および Android)」を参照してください。

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

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

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

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

データに接続する

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

  1. [ツール パレット]TSQLConnection コンポーネントをダブルクリックします。
    SelectSqlConnection.png
  2. [オブジェクト インスペクタ]で TSQLConnection の以下のプロパティを設定します。
    1. このアプリケーションでは InterBase ToGo を使用するため、Driver プロパティを IBLite/ToGo に設定します。
      SelectDriverForSQLConnection.png
    2. LoginPrompt プロパティを False に設定して、ユーザーにログインを求めるプロンプトを表示しないようにします。
    3. Params プロパティの参照([...])ボタンをクリックして、Database の値を「C:\Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data\dbdemos.gdb」(データベースの場所)に設定します。
    4. VendorLib の値は必ず ibtogo.dll(クライアント ソフトウェア ライブラリ)に設定します。[OK]をクリックして、ダイアログ ボックスを閉じます。
      ValueListEditor2.png

    5. Connected プロパティを True に設定します。
      メモ: 開発環境でエラー([unavailable database])が発生したら、それは現在 InterBase のライセンスがないことを示しています。一部の製品エディションでは、InterBase Developer Edition のライセンスが製品に含まれています。詳細は、「トラブルシューティング」を参照してください。
  3. フォームに TSQLDataSet コンポーネントを追加し、以下のプロパティを設定します。
    1. SQLConnection プロパティを SQLConnection1(前のステップで追加したもの)に設定します。
    2. CommandText プロパティを「select COMMON_NAME, SPECIES_NAME from BIOLIFE order by COMMON_NAME」に設定します。
    3. Active プロパティを True に設定します。
  4. [LiveBinding デザイナ]を開き、データとユーザー インターフェイスを次のように接続します。
    1. SQLDataSet1 の COMMON_NAME をクリックし、マウス カーソルを ListView1 の Item.Text へとドラッグします。
      CommonName ListView.png

      この時点で、TBindSourceDB コンポーネントと TBindingsList コンポーネントがフォームに追加されています。
    2. BindSourceDB1 の SPECIES_NAME をクリックし、マウス カーソルを ListView1 の Item.Detail へとドラッグします。
      DBDemo LiveBindingsDesigner.png

アプリケーションをモバイルに配置する

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

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

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

InterBase ToGo、dbExpress ドライバ、データベース ファイルをモバイルに配置する

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

  • InterBase ToGo
  • InterBase 用 dbExpress ドライバ(iOS シミュレータの場合)
  • データベース ファイル(dbdemos.gdb)
  1. データベースは、次の 2 つの方法のいずれかでプロジェクトに追加することができます。
    • [プロジェクト マネージャ]でプロジェクト名を右クリックし、コンテキスト メニューの[追加...](または[プロジェクト|プロジェクトに追加...])を選択して、[プロジェクトに追加]ダイアログ ボックスを開きます。データベースのある場所 C:\Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data に移動し、データベース dbdemos.gdb を選択して、[開く]をクリックします。
    • データベースのある場所 C:\Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data に移動し、データベース dbdemos.gdb を[プロジェクト マネージャ]内のプロジェクトにドラッグ アンド ドロップします。ファイルをプロジェクトに追加するかどうかを確認するダイアログ ボックスで[はい]をクリックします。
  2. データベース ファイルを追加すると、[機能ファイル]ウィンドウが開きます。以下のデータベース モジュールを選択し、[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\InterBase2020)に保存している場合には、必要なライセンスを選択するだけで構いません。
        • ファイルを元の名前で保存している場合には、[ファイルの追加]を選択し(次のステップで説明します)、アプリケーションと一緒に配置する必要のあるファイルのリストにライセンス ファイルを追加してください。
    • dbExpress Interbase ドライバ
    ヒント: iOS シミュレータ上でアプリケーションのテストを計画している場合、iOS シミュレータ用の dbExpress Interbase ドライバを選択する必要もあります。
    FeaturedFilesiOSAndroidDB.png

  3. [プロジェクト|配置]を選択して配置マネージャを開きます。
  4. 配置マネージャ上部のターゲット プラットフォームのドロップダウン リストで[Debug 構成 - iOS デバイス プラットフォーム]または[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)を配置するよう、設定されます。

モバイル デバイス上のローカル データベース ファイルに接続するようコードを変更する

前のステップで説明したように、TSQLConnection コンポーネントはローカル ファイル システム上のデータベースに対して絶対パスで接続します。そのため、データベースに接続する前にファイルの場所を置き換える必要があります。手順は以下のとおりです。

  1. フォーム デザイナで SQLConnection1 コンポーネントを選択します。
  2. [オブジェクト インスペクタ]で BeforeConnect イベントの値のフィールドをダブルクリックします。
  3. このイベント ハンドラに次のコードを追加します。


Delphi の場合:

procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject);
begin
  {$IF DEFINED(iOS) or DEFINED(ANDROID)}
   SQLConnection1.Params.Values['Database'] := 
      TPath.Combine(TPath.GetDocumentsPath, 'dbdemos.gdb');
  {$ENDIF}
end;


C++ の場合:

void __fastcall TForm1::SQLConnection1BeforeConnect(TObject *Sender)
{
  #if defined(_PLAT_IOS) || defined(_PLAT_ANDROID)
  SQLConnection1->Params->Values["Database"] = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), "dbdemos.gdb");
  #endif
}

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

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

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

iOS Android

IPodSearchDBDemo.png

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

トラブルシューティング

InterBase の問題

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

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

例外処理の問題

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

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

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

    Delphi の場合:

    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;
    

    C++ の場合:

    void __fastcall TForm1::Button1Click(TObject *Sender) {
            try {
    	SQLConnection1->Connected = True;
    	SQLDataSet1->Active = True;
            }
            catch(Exception *e) {
            ShowMessage(e->Message);
    }
    
  3. チェックします。

関連項目