データ モジュールを追加する(IBX 一般チュートリアル)
チュートリアル:InterBase Express を使用してデータベースにアクセスする への移動
このセクションでは、データ モジュール(TDataModule)を作成します。これは、アプリケーションで使用する非ビジュアル コンポーネントを含んだフォームです。
次に示すのは、必要なものをすべて追加した TDataModule です。
作成した後は、この TDataModule を他のフォームで使用することができます。
目次
TDataModule の追加
データ モジュールをプロジェクトに追加します。[プロジェクト マネージャ]でプロジェクト名を右クリックし、[新規追加|その他...]をクリックして、[新規作成]ダイアログを表示してください。
Delphi の場合
[データ モジュール]を選択して[OK]をクリックします。
TDataModule を選択します。[Name]プロパティを「DmEmployee」に設定します。[OldCreateOrder]を[True]に設定します。
新しいユニットを保存します。
- Delphi の場合、ユニットを DmCSDemo.pas という名前で保存します。
この後、この新しい TDataModule にコンポーネントを追加していきます。
データベースとトランザクションの追加
2 つの基本的なデータベース コンポーネントを追加します。TIBDatabase と TIBTransaction です。
- 「さまざまなテーブルを表示する」のセクションと同じようにして、[TIBDatabase]をデータ モジュール上にドラッグします。追加した TIBDatabase をダブルクリックして[データベース コンポーネント設定]ダイアログを表示します。このダイアログ上で TIBDatabase のプロパティを次のように設定し、[OK]をクリックします。
メモ: この例のようにアプリケーションにパスワードを埋め込むと、誰でもログインすることなくデータベースにアクセスできるようになります。
- TIBDatabase の構成の最後に、[Name]を「EmployeeDatabase」に設定します。[Connected]を[True]に設定します。
- [TIBTransaction]を TDataModule に追加します。TIBDatabase の[DefaultTransaction]プロパティを「IBTransaction1」に設定します。
ストアド プロシージャの追加
[TIBStoredProc]コンポーネントを 2 つ追加して、データベース内のストアド プロシージャを使用できるようにします。
- モジュール上に[TIBStoredProc]を配置します。[Name]を「ShipOrderProc」に設定します。[Database]を、ドロップダウン メニューを使って「EmployeeDatabase」に設定します。[StoredProcName]をドロップダウン メニューの「SHIP_ORDER」に設定します。SHIP_ORDER は、EMPLOYEE データベースのストアド プロシージャの 1 つです。
- モジュールに[TIBStoredProc]をもう 1 つ追加します。[Name]を「DeleteEmployeeProc」に設定します。[Database]を、ドロップダウン メニューを使って「EmployeeDatabase」に設定します。[StoredProcName]をドロップダウン メニューの「DELETE_EMPLOYEE」に設定します。
データセットの追加
モジュールに[TIBDataSet]コンポーネントを 5 つ追加します。それぞれの TIBDataSet は、EMPLOYEE データベース内の異なるデータベース テーブルに、またはテーブルが同じでも異なる方法で、アクセスします。
- "EmployeeLookup" TIBDataSet
- [Transaction]プロパティを「IBTransaction1」に設定します。これは既に設定されている場合もあります。
- ドロップダウン メニューを使って[Database]プロパティを「EmployeeDatabase」に設定し、TIBDataSet をデータベースに接続します。
- [Name]プロパティを「EmployeeLookup」に設定します。
- "EmployeeLookup" TIBDataSet を右クリックし、[SQL の編集]を選択します。
- CommandText プロパティを
select * from EMPLOYEE
に設定します。 - TIBDataSet コンポーネントをダブルクリックしてフィールド エディタ ダイアログを開きます。空のリストを右クリックして、コンテキスト メニューの[すべてのフィールドの追加]を選択します。フィールド エディタを閉じます。
- "EmployeeLookup" TIBDataSet を右クリックし、[データセットの編集...]を選択します。
- キー フィールド列から "EMP_NO" を選択し、[SQL 文を生成]をクリックします。
- [OK]ボタンをクリックしてウィザードを閉じます。
- このコンポーネントは、データベース内の EMPLOYEE テーブルにアクセスするために使用します。
- "SalesTable" TIBDataSet
- [Transaction]プロパティを「IBTransaction1」に設定します。
- [Database]プロパティをドロップダウン メニューの「EmployeeDatabase」に設定します。
- [Name]プロパティを「SalesTable」に設定します。
- "SalesTable" TIBDataSet を右クリックし、[SQL の編集]を選択します。
- CommandText プロパティを
select * from SALES
に設定します。 - TIBDataSet コンポーネントをダブルクリックしてフィールド エディタ ダイアログを開きます。空のリストを右クリックして、コンテキスト メニューの[すべてのフィールドの追加]を選択します。フィールド エディタを閉じます。
- "SalesTable" TIBDataSet を右クリックし、[データセットの編集...]を選択します。
- キー フィールド列から "PO_NUMBER" を選択し、[SQL 文を生成]をクリックします。
- [OK]ボタンをクリックしてウィザードを閉じます。
- このコンポーネントは、データベース内の SALES テーブルにアクセスするために使用します。
- "CustomerTable" TIBDataSet
- [Transaction]プロパティを「IBTransaction1」に設定します。
- [Database]プロパティをドロップダウン メニューの「EmployeeDatabase」に設定します。
- [Name]プロパティを「CustomerTable」に設定します。
- "CustomerTable" TIBDataSet を右クリックし、[SQL の編集]を選択します。
- CommandText プロパティを
select * from CUSTOMER WHERE CUST_NO = :CUST_NO
に設定します。 - TIBDataSet コンポーネントをダブルクリックしてフィールド エディタ ダイアログを開きます。空のリストを右クリックして、コンテキスト メニューの[すべてのフィールドの追加]を選択します。フィールド エディタを閉じます。
- "CustomerTable" TIBDataSet を右クリックし、[データセットの編集...]を選択します。
- キー フィールド列から "CUST_NO" を選択し、[SQL 文を生成]をクリックします。
- [OK]ボタンをクリックしてウィザードを閉じます。
- このコンポーネントは、データベース内の CUSTOMER テーブルにアクセスするために使用します。
- "EmployeeTable" TIBDataSet
- [Transaction]プロパティを「IBTransaction1」に設定します。
- [Database]プロパティをドロップダウン メニューの「EmployeeDatabase」に設定します。
- [Name]プロパティを「EmployeeTable」に設定します。
- "EmployeeTable" TIBDataSet を右クリックし、[SQL の編集]を選択します。
- CommandText プロパティを
select * from EMPLOYEE
に設定します。 - "EmployeeTable" TIBDataSet を右クリックし、[データセットの編集...]を選択します。
- キー フィールド列から "EMP_NO" を選択し、[SQL 文を生成]をクリックします。
- [OK]ボタンをクリックしてウィザードを閉じます。
- このコンポーネントも、データベース内の EMPLOYEE テーブルにアクセスするために使用します。
- "SalaryHistoryTable" TIBDataSet
- [Transaction]プロパティを「IBTransaction1」に設定します。
- [Database]プロパティをドロップダウン メニューの「EmployeeDatabase」に設定します。
- [Name]プロパティを「SalaryHistoryTable」に設定します。
- "SalaryHistoryTable" TIBDataSet を右クリックし、[SQL の編集]を選択します。
- CommandText プロパティを
select * from SALARY_HISTORY WHERE EMP_NO=:EMP_NO
に設定します。 - "SalaryHistoryTable" TIBDataSet を右クリックし、[データセットの編集...]を選択します。
- キー フィールド列から "EMP_NO" を選択し、[SQL 文を生成]をクリックします。
- [OK]ボタンをクリックしてウィザードを閉じます。
- このコンポーネントは、データベース内の SALARY_HISTORY テーブルにアクセスするために使用します。
データ ソースの追加
モジュールに[TDataSource]コンポーネントを 4 つ追加します。これらの TDataSource は、上記の TIBDataSet とリンクされます。TDataSource コンポーネントは、TIBDataSet とデータベース対応コントロールの間のインターフェイスとなります。
- "SalesSource" TDataSource: ドロップダウン メニューを使って、TDataSource の[DataSet]を「SalesTable」に設定します。[Name]プロパティを「SalesSource」に設定します。
- "CustomerSource" TDataSource: ドロップダウン メニューを使って、TDataSource の[DataSet]を「CustomerTable」に設定します。[Name]プロパティを「CustomerSource」に設定します。
- "EmployeeSource" TDataSource: ドロップダウン メニューを使って、TDataSource の[DataSet]を「EmployeeTable」に設定します。[Name]プロパティを「EmployeeSource」に設定します。
- "SalaryHistorySource" TDataSource: ドロップダウン メニューを使って、TDataSource の[DataSet]を「SalaryHistoryTable」に設定します。[Name]プロパティを「SalaryHistorySource」に設定します。
- 一部の TIBDataSet は、TDataSource にリンクして別のテーブルとの関連をセットアップする必要があります。
- "CustomerTable" TIBDataSet を選択します。[DataSource]を、ドロップダウン メニューを使って「SalesSource」に設定します。
- "SalaryHistoryTable" TIBDataSet を選択します。[DataSource]を、ドロップダウン メニューを使って「EmployeeSource」に設定します。
イベント ハンドラの追加
TDataModule 構築の最後のステップとして、イベント ハンドラをいくつか追加します。
- TDataModule を選択します。[オブジェクト インスペクタ]で[イベント]タブをクリックします。[OnCreate]イベントをダブルクリックし、イベントのスケルトン コードを生成します。このイベントに次のコードを追加します。
Delphi の場合
procedure TDmEmployee.DmEmployeeCreate(Sender: TObject);
begin
EmployeeDatabase.Open;
end;
- "EmployeeTable" TIBDataSet を選択します。[イベント]タブで[AfterPost]イベントをダブルクリックします。このハンドラには次のコードを記述します。
procedure TDmEmployee.EmployeeTableAfterPost(DataSet: TDataSet);
begin
{ A change in an employee salary triggers a change in the salary history,
so if that table is open, it needs to be refreshed now }
with SalaryHistoryTable do if Active then Refresh;
end;
- "EmployeeTable" TIBDataSet を選択します。[イベント]タブで[BeforeDelete]イベントをダブルクリックします。このハンドラには次のコードを記述します。
procedure TDmEmployee.EmployeeTableBeforeDelete(DataSet: TDataSet);
begin
{ Assign the current employee's id to the stored procedure's parameter }
DeleteEmployeeProc.Params.ParamValues['EMP_NUM'] := EmployeeTable['EMP_NO'];
DeleteEmployeeProc.ExecProc; { Trigger the stored proc }
EmployeeTable.Refresh; { Refresh the data }
{ Block the EmployeeTable delete since the stored procedure did the work }
Abort;
end;
これでデータ モジュールが完成しました。このデータ モジュールは次のセクションで使用します。次に移る前に、このモジュールのコードを確認してください。SalesTablePO_NUMBER
など、テーブル フィールドを表す数多くのオブジェクトが、データ モジュール クラスに自動的に追加されています。