MsiDatabaseMergeA 関数 (msiquery.h)

MsiDatabaseMerge 関数は 2 つのデータベースを結合し、重複する行を許可します。

構文

UINT MsiDatabaseMergeA(
  [in] MSIHANDLE hDatabase,
  [in] MSIHANDLE hDatabaseMerge,
  [in] LPCSTR    szTableName
);

パラメーター

[in] hDatabase

MsiOpenDatabase から取得したデータベースへのハンドル。

[in] hDatabaseMerge

ベース データベースにマージする MsiOpenDatabase から取得したデータベースへのハンドル。

[in] szTableName

マージの競合情報を受け取るテーブルの名前。

戻り値

MsiDatabaseMerge 関数は、次のいずれかの値を返します。

リターン コード 説明
ERROR_FUNCTION_FAILED
行のマージの競合が報告されました。
ERROR_INVALID_HANDLE
無効なハンドルまたは非アクティブなハンドルが指定されました。
ERROR_INVALID_TABLE
無効なテーブルが指定されました。
ERROR_SUCCESS
関数が正常に実行されました。
ERROR_DATATYPE_MISMATCH
2 つのデータベース間のスキーマの違い。

注釈

Database オブジェクトの MsiDatabaseMerge 関数と Merge メソッドを使用して、インストール パッケージに含まれるモジュールをマージすることはできません。 これらは、Windows インストーラー パッケージに Merge モジュールをマージするために使わないでください。 インストール パッケージの作成者がインストール パッケージに Merge モジュールを含めるには、「マージ モジュールの適用」トピックで説明されているガイドラインに従ってください。

MsiDatabaseMerge は、埋め込み キャビネット ファイル または 埋め込み変換 を参照データベースからターゲット データベースにコピーしません。 バイナリ テーブルまたはアイコン テーブルに一覧表示されている埋め込みデータ ストリームは、参照データベースから対象のデータベースにコピーされます。 参照データベースに埋め込まれたストレージは、ターゲット データベースにコピーされません。

MsiDatabaseMerge 関数は、2 つのデータベースのデータをマージします。 これらのデータベースには同じコード ページが必要です。 データベース内のテーブルまたは行が競合する場合、MsiDatabaseMerge は失敗します。 最初のデータベースの任意の行のデータが、2 番目のデータベースの対応する行のデータと異なる場合、競合が存在します。 対応する行は両方のデータベースの同じテーブル内にあり、両方のデータベースで同じ主キーを持ちます。 競合しないデータベースのテーブルには、同じ数の主キー、同じ数の列、同じ列の種類、同じ列名、同じ主キーを持つ行内の同じデータが必要です。 ただし、一時列は列数に関係なく、永続的な列が一致する限り競合を生じることなく、対応するテーブルに異なる数の一時列を含めることができます。

対応するテーブル内の列の数、型、または名前が異なる場合、2 つのデータベースのスキーマに互換性がありません。インストーラーはテーブルの処理を停止し、マージは失敗します。 インストーラーは、行のマージ競合をチェックする前に、2 つのデータベースのスキーマが同じであることを確認します。 ERROR_DATATYPE_MISMATCHが返された場合は、データベースが変更されていないことが保証されます。

特定の行のデータが異なる場合、これは行マージの競合であり、インストーラーは ERROR_FUNCTION_FAILEDを返し、szTableName という名前の新しいテーブルを作成します。 このテーブルの最初の列は、競合しているテーブルの名前です。 2 番目の列は、競合しているテーブル内の行数を示します。 競合を報告するテーブルは次のように表示されます。

種類 キー Nullable
テーブル テキスト Y ×
NumRowMergeConflicts 整数   N
 

この関数は、カスタム アクションから呼び出すことはできません。 カスタム アクションからこの関数を呼び出すと、関数は失敗します。

関数が失敗した場合は、 MsiGetLastErrorRecord を使用して拡張エラー情報を取得できます。

注意

msiquery.h ヘッダーは、MSIDatabaseMerge をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Server 2012、Windows 8、Windows Server 2008 R2、または Windows 7 の Windows インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー
対象プラットフォーム Windows
ヘッダー msiquery.h
Library Msi.lib
[DLL] Msi.dll

こちらもご覧ください

列定義の形式

データベース管理関数