インメモリ・データベースは、高速で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)