列定義の形式
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 バージョンを使用する場合、マージ モジュールを適用しても、列の長さや、ターゲット データベースのスキーマが変更されることはありません。