TDBISAMTableによるテーブルの作成

TDBISAMTableには、BDEのTTableと互換のメソッドでテーブルを定義し、作成する機能が用意されています。DBISAM
Ver.1の時代には、TDBISAMQueryはSELECT文のみしか使えず、その他のデータ操作にはBDE互換ルーチンを利用する必要がありましたが、その後のSQLエンジンの機能強化によって、UPDATE/INSERTはもちろん、CREATE
TABLE/DROP TABLE/ALTER
TABLEがサポートされるようになっているため、今となってはこの機能を積極的に使う必要はあまりないでしょう。

DBSYSユーティティのメニューから「Utilities」「Reverse
Engineer」を選び、出力フォーマットをDelphi 5 or 6 (Object Pascal)
とすることで、コードを生成することができます。興味のある方は一度見てみるのもよいでしょう。例えば、以下のようなコードが生成されます。

FieldDefs~CreateTableの部分がテーブルを新規作成するためのコードです。RestructureFieldDefs~RestructureTableの部分は、ALTER
TABLEに相当する部分で、新規作成時には不要な部分です。

※コードを書くときは★は抜いて下さい

procedure CreateTables(CreateDatabaseName: string);
var
  TableToCreate: TDBISAMTable;
begin
  TableToCreate:=TDBISAMTable.Create(Application);
  try
    with TableToCreate do
      begin
      DatabaseName:=CreateDatabaseName;
      TableName:='product';
      Exclusive:=True;
      with FieldDefs do
        begin
        Clear;
        Add(★ProdId,ftInteger,0,True);
        Add(★Name,ftString,60,True);
        Add(★UnitPrice,ftInteger,0,True);
        Add(★Memo,ftMemo,0,False);
        end;
      with IndexDefs do
        begin
        Clear;
        Add('',★ProdId,[ixPrimary,ixUnique]);
        end;
      if not Exists then
        begin
        CreateTable;
        with RestructureFieldDefs do
          begin
          Clear;
          Add(★ProdId,ftInteger,0,True,'','','','',fcNoChange,1);
          Add(★Name,ftString,60,True,'','','','',fcNoChange,2);
          Add(★UnitPrice,ftInteger,0,True,'','','','',fcNoChange,3);
          Add(★Memo,ftMemo,0,False,'','','','',fcNoChange,4);
          end;
        with RestructureIndexDefs do
          begin
          Clear;
          Add('',★ProdId,[ixPrimary,ixUnique],icNone);
          end;
        RestructureTable(0,0,1,0,False,'','',512,-1,True);
        end;
      end;
  finally
    TableToCreate.Free;
  end;
end;