次の方法で共有


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 つのデータベース間のスキーマの違い。

備考

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

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

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

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

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

コラム 種類 許容
テーブル テキスト Y N
NumRowMergeConflicts 整数 の   N
 

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

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

手記

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

必要条件

要件 価値
サポートされる最小クライアント 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 インストーラー
ターゲット プラットフォーム の ウィンドウズ
ヘッダー msiquery.h
ライブラリ Msi.lib
DLL Msi.dll

関連項目

列定義形式 の

データベース管理機能の