インメモリ・データベースは、高速でSQLアクセス可能な一時データベースとして利用できます
インメモリ・テーブル
DBISAMでは、ディスク上にデータを保持する通常のテーブルと同じように、メモリ上にデータを保持する一時テーブルに対して、SQLアクセスや、DataSetアクセスが可能です。
インメモリ・テーブル利用の概要
- DBISAMアプリケーションが起動する都度、インメモリ・データベース「MEMORY」が初期化されます
- インメモリ・データベースのデータベース名「MEMORY」は、DBISAM SQLにおける予約語です
- アプリケーションが起動したら、MEMORYデータベース内にテーブルを作成することが可能です
- TDBISAMTable.CreateTableで作成することができます
- TDBISAMQueryを使い、Create Table文で作成できます
- SQLの SELECT INTO 文を使ってクエリ結果から作成できます
- テーブルのアクセス方法は他のDBと同様です
- アプリケーションが終了する際に、インメモリ・データベースは破棄され、すべてのインメモリ・テーブルが消滅します
インメモリ・テーブルを、設計時に作成する方法
- IDEで、フォームまたはデータモジュール上にTDBISAMTableコンポーネントを配置します
- DatabaseNameプロパティを「MEMORY」とします(ここが一番重要)
- TableNameプロパティを設定します
- FieldDefプロパティを編集して、テーブルの列の定義を追加します
- Active プロパティをTrueにすると、IDEのプロセス(Delphi32.exeなど)に固有のインメモリ・データベース中に、TableNameプロパティで設定した名前のテーブルが作成されます.
上記の方法で作成したテーブルは、そのままデータソースを介して、データベース対応コンポーネントに関連付けることができます。
インメモリ・テーブルを、実行時に作成する方法
MEMORYデータベースはアプリケーション起動時に毎回初期化されるため、IDE上で作成したインメモリテーブルは、アプリケーション起動直後に、再び作成しないかぎり存在しません。そのため、以下のポイントにご注意ください
- フォーム上・データモジュール上に配置した TDBISAMTableコンポーネントやTDBISAMQueryコンポーネントの、Activeプロパティは、Falseにしてください。(一時的にTrueにするのは、IDE上でテーブルをCREATEするときだけです)
- フォームやデータモジュールのOnCreateイベント中で、テーブルを生成するようコーディングします。
- TDBISAMTableのFieldDefsプロパティで列の定義がなされている場合、CreateTableメソッドを呼ぶことで、テーブルが生成されます。
- TDBISAMQueryのDatabaseNameプロパティに「MEMORY」を、SQLプロパティに、CREATE TABLE 文を記述して、これを実行してテーブルを生成できます
- 他のデータベース上で実行したクエリの結果を、SELECT INTO文で、MEMORYデータベース上のテーブルに流し込む
DBISAMのSQLでは、複数DBにまたがるクエリを実行できます。その際、テーブル名を、「\データベース名\テーブル名」や、「DBファイルのフルパス名」の形式で書くことがポイントです。
コード:
SELECT INTO "\MEMORY\TestTmp" * from "C:\Data\Test\TestTbl.dat"
// これはダイレクトにフルパス指定しています
SELECT INTO "\MEMORY\TestTmp" * from TestTbl
// QueryのDatabaseNameが指すDBが、"C:\Test\"をポイントしている場合にはこの記述でOKです
SELECT INTO "\MEMORY\Results" * from TestTbl WHERE ....
//のように、WHERE句や ORDER BY句をセットできます
こうして作成したインメモリテーブルと、他のDBとをジョインしてSQLを実行することも可能です
コード:
SELECT T.CODE, C.DECODE FROM "\MEMORY\TestTmp" T LEFT JOIN CODE_TABLE C ON (CODE_TABLE.CODE = T.CODE)