列定義の形式

View オブジェクトの MsiViewGetColumnInfo プロパティと ColumnInfo プロパティは、次の形式を使用してデータベース列の定義を記述します。 各列は、関数またはプロパティによって返される、対応するレコード フィールドの文字列によって記述されます。 定義文字列は、データ型を表す 1 文字と、列の幅 (該当する場合は文字単位、それ以外はバイト単位) で構成されています。 幅が 0 である場合は、幅に制限がない (長いテキスト フィールドやストリームなど) ことを示します。 大文字は、列に null 値を指定できることを示します。

列の記述子 定義文字列
s? 文字列、可変長 (?=1-255)
s0 文字列、可変長
i2 短整数
i4 Long integer
v0 バイナリ ストリーム
g? 一時的な文字列 (?=0-255)
j? 一時的な整数 (?=0,1,2,4)
O0 一時的なオブジェクト

 

列を記述するために使用される文字列は、CREATE および ALTER で使用される SQL クエリ文字列と次のリレーションシップを持ちます。 詳細については、「SQL 構文」を参照してください。

戻り値 SQL 構文
s0 LONGCHAR
l0 LONGCHAR LOCALIZABLE
s # CHAR(#)
s # CHARACTER(#)
l # CHAR(#) LOCALIZABLE
l # CHARACTER(#) LOCALIZABLE
i2 SHORT
i2 INT
i2 INTEGER
i4 LONG
v0 OBJECT

 

文字が大文字でない場合は、SQL ステートメントに NOT NULL を付加する必要があります。

戻り値 SQL 構文
s0 LONGCHAR NOT NULL

 

列の長さは、インストーラーの内部で、列定義形式で指定された値に制限されるわけではありません。 フィールドに入力したデータが、指定された列の長さ以上である場合、そのパッケージはパッケージの検証に合格しません。 この場合、検証に合格するには、データまたはデータベース スキーマを変更する必要があります。 標準テーブルの列の長さを変更する唯一の方法は、MsiDatabaseExport を使用してテーブルをエクスポートし、エクスポートした .idt ファイルを編集してから、MsiDatabaseImport を使用してテーブルをインポートする方法です。 作成者が、標準テーブル内の列の列データ型、NULL 値許容、ローカライズ属性を変更することはでません。 作成者は、任意の列属性を持つ列を含むカスタム テーブルを作成できます。

MsiDatabaseMerge を使用して参照データベースをターゲット データベースにマージする場合、列名、主キーの数、列データ型が一致する必要があります。 MsiDatabaseMerge では、ローカライズ属性と列長属性は無視されます。 参照データベースの列の長さがターゲット データベースのその列の長さよりも 0 以上大きい場合、MsiDatabaseMerge はターゲット データベースの列の長さを、参照データベースの長さに合わせて増やします。

Mergmod.dll バージョン 2.0 を使用する場合、.msi ファイルにマージ モジュールを適用しても、既存のデータベース テーブルの列の長さや列の型が変更されることはありません。 しかし、列の追加が可能なテーブルに新しい列を追加する場合、マージ モジュールを適用すると、既存のデータベース テーブルのスキーマが変更可能になります。 バージョン 2.0 未満の Mergemod.dll バージョンを使用する場合、マージ モジュールを適用しても、列の長さや、ターゲット データベースのスキーマが変更されることはありません。