テーブルを作成しましょう。

DBISAMのテーブルは、付属のDBSYSツール、SQL文、TDBISAMTableコンポーネントの3つの方法があります。

  1. DBSYSユーティリティで作成する
  2. SQL(CREATE TABLE 文)を使って
    TDBISAMQueryやDBSYSで作成する
  3. TDBISAMTableコンポーネントのプロパティ・メソッドを使って作成する

DBISAMのデータ型やテーブル作成のオプションに慣れるまでは、DBSYSユーティリティでテーブルを作成し、出来上がったテーブルからDBSYSユーティリティの「Reverse
Engineer」機能を用いて、CREATE TABLE
SQL文を生成することをお勧めします。TDBISAMTableのメソッドによるテーブル作成は、BDEとの互換性のために残されていますが、あえて使う必要はないでしょう。

DBSYSユーティリティによるテーブルの作成

「DBSYS」DBISAMのリリースに含まれる標準ツールです。Elevate
Softwareのサイトのダウンロードコーナーで、「DBISAM additional
utilities」として配布されているパッケージに含まれます。ここからダウンロードしたDBSYSは、フォントが日本語フォントではなく、日本語データの文字化けが発生するため、弊社にて日本語化したものを配布しております。

→こちら← からご入手下さい。

DBSYSの起動とテーブル作成の開始

DBSYS.EXEは、標準ではスタートメニューの”DBISAM Additional Software and Utilities”に
“Database System
Utility”として登録されます。弊社サイトよりダウンロードした日本語版も、できればスタートメニューに登録してお使いください。起動したDBSYSのメインメニューは以下の通りです

ここから、「File」「New Table」を選択するか、ツールバー左端の「New
Table」ボタンを押すことで、次のテーブル作成画面が開きます

グリッド上にフィールド定義を追加して、「Save」ボタンを押し、保存先のディレクトリとファイル名(テーブル名)を指定してテーブルの作成が簡単に可能です。テーブル作成に関する注意点を以下にまとめてみましたので参考にしてください。行の削除はCTRL+DELキーで可能です。

テーブル名・フィールド名は英数字

DBISAMのSQLパーサは、テーブル名・フィールド名・インデックス名などの識別子が半角英数字であることを前提にしています。アルファベットで始まる名前を用いてください。残念ながら、日本語名称は使えません。

Language, Sort Order はデフォルトで

DBISAMの多言語対応は基本的に西欧言語圏の中での違いを吸収するためのもので、マルチバイト文字までを考慮しているものではありません。デフォルトの

ANSI Standard, Default Orderで利用してください。ANSI Standard の日付フォーマットは
YYYY-MM-DDであり、日本人なら違和感なく使えます。DBISAMのソースをよく眺めるとJapaneseという言語IDも定義されており、コンパイルオプション次第では有効にできますが、実際の効果はありません。

サポートされるフィールドのデータ型

下記の表の通り、BDEが定義するTField型のそれぞれの種類に対応するフィールドを定義可能です。VCLリファレンスのTFieldのセクションを参考にしてください。下記の表で太字で強調したデータ型を使ってください。その他のフィールド型は、BDEとの互換性のために存在していますが、DBISAMネイティブの型ではありません。たとえば、DBISAMはBCDを8バイト浮動小数点型としてファイルに保持するため、有効数字は常に一定(15桁)です。指定された小数点以下桁数に丸める以外は、実質的にFLOAT型フィールドに近いといえます。

SQLでの表記 対応するTField 説明
String CHAR(
1~250)
TStringField 文字列フィールド:最大250文字まで(終端文字含まず)
Blob BLOB TBlobField

BlobType=ftBlob

バイナリデータ – インデックスに含めることができません
Graphic GRAPHIC TGraphicField

BlobType=ftGraphic

グラフィックデータ – インデックスに含めることができません

TDBImageで表示させるのに用います

Memo MEMO TMemoField

BlobType=ftMemo

メモフィールド – インデックスを張れない可変長文字列
Date DATE TDateField 日付
Time TIME TTimeField 時刻
TimeStamp TIMESTAMP TDateTimeField 日付時刻
Boolean BOOLEAN TBooleanField 論理値
SmallInt SMALLINT TSmallIntField 16bit整数 -32768 ~ 32768
Word WORD TWordField 符号なし16bit整数 0 ~ 65535
Integer INTEGER TIntegerField 32ビット整数(Longint): -2147483648~2147483647
AutoInc AUTOINC TAutoIncField カウンタ付きInteger
LargeInt LARGEINT TLargeIntField 64ビット整数
Float FLOAT TFloatField 8バイト浮動小数点(Double)実数
Currency CURRENCY TCurrencyField 通貨型として扱われるFloat型フィールド
BCD DECIMAL(N,
0~4)
TBCDField 小数点以下M(0~4)桁に丸められるFloat型フィールド

Nが総桁数のはずですが、実際は無視されます

Bytes BYTES(N) TBytesField 型なしバイナリ

フィールドの制約

各フィールド定義のグリッド右端の「Details」カラムをクリックして、以下に示すフィールドごとの詳細なプロパティを設定できます。

Description:フィールドの詳細名称
これはコメントの一種ですが、DBSYSでデータを閲覧するときにカラムのタイトルとして参照されます。はっきり行って、正規のフィールド名と紛らわしいだけなので、Descriptionには何も設定せず、ブランクにしておくのば無難です
DefaultValue
新規レコードを追加した際のデフォルト値を設定できます
MinValue, MaxValue
最大値、最小値を設定することができ、範囲外のデータで更新を試みた場合には例外を発生させます

インデックスの作成

インデックスの定義には「Index」タブを用います。主キーの定義は、フィールド定義のグリッドの「Primary
Key」列をYesにすることで行い、Noにしておけば副キー扱いになります(以下に画面イメージを示します)。インデックス対象のフィールドは、このようにリストから選択可能です。インデックス対象フィールドの順序もこの画面で上下入替えが可能です。(ご存知の通り、フィールドの順序と検索パフォーマンスの間には深い関係があります)

インデックスに対しては以下のオプションを設定可能です

  • 昇順・降順:Indexesタブでインデクスを定義するにあたり「Descending
    Fields」に選択したフィールドに関して降順となります。
    通常はデフォルトで問題ないでしょう
  • 大文字小文字の区別:
    Case-Insensitive=Yesとすると、大文字小文字の区別をしないインデックスとなります
  • ユニーク:
    Unique=Yesとすると、ユニーク・インデックスを定義でき、キー項目の一意性が保証されます
  • 圧縮: Compressionには、インデックスの圧縮方式を以下の4つから選んで指定できます
    • None : 圧縮しません
    • Duplicate Byte :
      隣接キーの値同士に、重複バイトが多い場合に有効な圧縮アルゴリズムを用います。論理値型・数値型項目から成るインデックスに有効です
    • Trailing Byte :
      キー項目の末尾の空白とヌル文字を取り除きます。文字列項目から成るインデックスに有効です
    • Full : 上記二つの両方を使います

Full Text Indexingは、全文検索索引を作る機能ですが、英語以外では動作しません。
(全文英語のテキストなら、SELECT文でMemoフィールドを高速に検索できたりします)