モバイル チュートリアル:モバイル アプリケーションで FireDAC を使用する(iOS および Android)
モバイル チュートリアル:モバイル アプリケーション開発(iOS および Android) への移動
目次
このチュートリアルでは、FireDAC フレームワークによりモバイル デバイス上のローカル データ ストレージとして SQLite を使用する基本手順を説明します。
iOS |
Android |
---|---|
FireDAC を使用してデータベースに接続する
FireDAC は、Delphi、C++Builder でマルチデバイス データベース アプリケーションを開発するための他に類を見ない汎用データ アクセス コンポーネント セットです。 FireDAC を使用すると、その強力な共通アーキテクチャのため、Delphi から InterBase、SQLite、MySQL、SQL Server、Oracle、PostgreSQL、IBM DB2、SQL Anywhere、Access、Firebird、Informix などに高速かつ直接にネイティブ アクセスすることができます。
FireDAC ネイティブ ドライバでは、SQLite データベースのバージョン 3.0 以降をサポートしています。 Delphi アプリケーション用に FireDAC で SQLite を使用する方法の詳細は、「FireDAC での SQLite の使用」のトピックを参照してください。
アプリケーションで SQLite を使用するには、開発用システムに sqlite3.dll ファイルがなければなりません。 このファイルが存在しない場合は、http://www.sqlite.org/download.html から sqlite3.dll をダウンロードし、システム パス(64 ビット版 Windows であれば C:\Windows\SysWOW64 など)に配置します。
ユーザー インターフェイスを設計しセットアップする
新規プロジェクトを作成します。 マルチデバイス アプリケーションを選択します。
- フォーム上に、TFDConnection コンポーネントをドロップします。
- TFDConnection コンポーネントを右クリックし、[接続エディタ...]を選択します。
- [FireDAC 接続エディタ]で、TFDConnection のパラメータを以下のように設定します。
- Driver ID プロパティを SQLite に設定します。
- Database パラメータを次のように設定します:
- [テスト]ボタンをクリックして、接続をテストします。
- [OK]をクリックして、[FireDAC 接続エディタ]を閉じます。
- オブジェクト インスペクタで、TFDConnection のプロパティを次のように設定します。
- LoginPrompt プロパティを False に設定して、ユーザーにログインを求めるプロンプトを表示しないようにします。
- Connected プロパティを True に設定します。
[LiveBinding ウィザード]を使用する
[LiveBindings ウィザード]を使用して、LiveBindings コンポーネント(TBindSourceDB、TBindingsList)や TFDQuery、TListView のコンポーネントを追加することができます。
LiveBinding コンポーネントを追加する
- [表示|LiveBinding デザイナ]を選択して[LiveBinding デザイナ]を開きます。
- [LiveBindings ウィザード]を選択します。
- [データ ソースの作成]バインディング タスクを選択します。
- [次へ]ボタンをクリックします。
- クラス名に[FireDAC]を選択します。
- [次へ]ボタンをクリックします。
- [コマンド タイプ]を Query に変更します。
- [コマンド テキスト]プロパティを「
select Name, Department, Seniority from Employee order by Department
」に設定します。 - [コマンドのテスト]ボタンをクリックします。
- [次へ]ボタンをクリックします。
- [完了]ボタンをクリックします。
この時点で、TBindSourceDB と TFDQuery のコンポーネントがフォームに追加されました。
リスト ビュー コンポーネントを追加する
- LiveBindings デザイナを再度開きます。
- [コントロールをフィールドとリンク]バインディング タスクを選択します。
- [次へ]ボタンをクリックします。
- TListView を選択します。
- [次へ]ボタンをクリックします。
- BindSourceDB1 を選択します。
- [次へ]ボタンをクリックします。
- フィールド名に Name を選択します。
- [次へ]ボタンをクリックします。
- [完了]ボタンをクリックしてウィザードを閉じます。
[LiveBinding ウィザード]を使用する
[LiveBinding デザイナ]を使用して、TBindSourceDB および TListView コンポーネント間に、新しい接続を追加することができます。
- TListView から、ItemHeader.Text メンバーを選択します。
- ドラッグして BindSourceDB1 コンポーネントの Department メンバにバインドします(接続線が表示されます)。
- TListView から、Item.Text メンバーを選択します。
- ドラッグして BindSourceDB1 コンポーネントの Name メンバにバインドします(接続線が表示されます)。
- オブジェクト インスペクタで、TListView のプロパティを以下のように設定します:
- ItemAppearance を ImageListItemRightButton に設定します。
- [LiveBinding デザイナ]では、TListView に新しいメンバ Item.ButtonText が表示されます。
- Align プロパティを Client に設定します。
- ItemAppearance を ImageListItemRightButton に設定します。
- [LiveBinding デザイナ]で、Item.ButtonText メンバーを TListView から選択します。
- ドラッグして BindSourceDB1 コンポーネントの Seniority メンバにバインドします(接続線が表示されます)。
実行時用にアプリケーションを準備する
FireDAC は疎結合の多層アーキテクチャを備えており、各レイヤでサービスが提供されます。 それぞれのサービス API は、他のレイヤからインターフェイス ファクトリを使って要求できる COM インターフェイスとして定義されています。
FireDAC を適切に動作させるには、IFDGUIxWaitCursor インターフェイスと IFDPhysDriver インターフェイスの実装をアプリケーションにリンクする必要があります。
このために、TFDGUIxWaitCursor と TFDPhysSQLiteDriverLink コンポーネントを、フォーム上にドロップします。
モバイル用にデータベースの配置をセットアップする
ここまでは、デスクトップで SQLite を使用してきました。 つまり、実際のデータベースは、ローカルのハードディスク ドライブ上にあります(C:\Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data\Employees.s3db など)。 モバイル デバイスでは、アプリケーションはサンドボックス化されるため、通常はアプリケーション フォルダ下の Documents フォルダ(iOS デバイスの場合)および internal 記憶域(Android デバイスの場合)にあるデータしか読み書きできません。
モバイル上でローカル データベースに接続するには、以下の作業を実施する必要があります。
- データベースをモバイル デバイスに配置する。
- (データベース ファイルに接続するための)構成を、Documents フォルダ(iOS デバイスの場合)または internal 記憶域(Android デバイスの場合)のローカル ファイルに変更する。
データベース ファイルを配置マネージャに追加し構成する
モバイル上でアプリケーションを実行するには、データベース ファイル(Employees.s3db)の配置情報をセットアップする必要があります。
- [プロジェクト|配置]を選択して、配置マネージャを開きます。
- [ファイルの追加]を選択し、データベース ファイルを選択します(C:\Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data\Employees.s3db など)。
- Employees.s3db を選択し、[リモート パス]を StartUp\Documents\(iOS プラットフォームの場合)または assets\internal\(Android プラットフォームの場合)に変更します。
- [プラットフォーム]の列を選択して次の作業を行います(Employees.s3db の行で参照([...])ボタンをダブルクリックします)。
- Employees.s3db について、[iOSSimulator]と[iOSDevice]または[Android]が含まれていることを確認します。
- [Win32]が含まれている場合にはリストから削除します(データベース ファイルを Win32 プラットフォームにコピーする必要はありません)。
- [すべての構成 - iOS デバイス プラットフォーム]または[すべての構成 - Android プラットフォーム]を選択し、Employees.s3db を StartUp\Documents\ または assets\internal\ に配置するよう設定していることを確認します。
このように構成すると、モバイル デバイス上でアプリケーションを実行したときに、アプリケーションのサンドボックス領域の Documents フォルダ(iOS プラットフォームの場合)または internal 記憶域(Android プラットフォームの場合)にデータベース ファイル(Employees.s3db)を配置するよう、設定されます。
モバイル デバイス上のローカル データベース ファイルに接続するようコードを変更する
このアプリケーションの基本的な機能の実装はこれで終わりです。 このアプリケーションで使われているデータベース ファイルは Windows 上で作成されたものなので、ファイルをモバイル デバイスにコピーするかその場で作成しなければ、モバイル デバイス上で使用できません。
モバイル デバイス上での SQLite データベースの場所を指定する
- フォーム デザイナで FDConnection1 コンポーネントを選択します。
- オブジェクト インスペクタで、BeforeConnect イベントをダブルクリックします。
- このイベント ハンドラに次のコードを追加します。
Delphi:
procedure TForm1.FDConnection1BeforeConnect(Sender: TObject);
begin
FDConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'Employees.s3db');
end;
TPath レコードは System.IOUtils ユニットで宣言されているため、ユニットの uses 句に System.IOUtils を追加する必要があります。
C++ (iOS の場合のみ):
void __fastcall TForm1::FDConnection1BeforeConnect(TObject *Sender)
{
FDConnection1->Params->Values["ColumnMetadataSupported"] = "False";
FDConnection1->Params->Values["Database"] = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), "Employees.s3db");
}
TPath レコードは、System.IOUtils ライブラリで宣言されているため、ヘッダー ユニットに #include <System.IOUtils.hpp> を追加する必要があります。
シミュレータまたはモバイル デバイス上でアプリケーションを実行する
これでアプリケーションを実行する準備が整いました([実行|実行])。
iOS |
Android |
---|---|