Функция MsiDatabaseMergeA (msiquery.h)

Функция MsiDatabaseMerge объединяет две базы данных, что позволяет дублировать строки.

Синтаксис

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
Разница в схемах между двумя базами данных.

Комментарии

Функцию MsiDatabaseMerge и метод Merge объекта Database нельзя использовать для слияния модуля, включенного в пакет установки. Их не следует использовать для слияния модулей в пакет установщика Windows. Чтобы включить модуль слияния в пакет установки, авторы пакетов установки должны следовать рекомендациям, описанным в разделе Применение модулей слияния .

MsiDatabaseMerge не копирует внедренные cab-файлы или внедренные преобразования из эталонной базы данных в целевую базу данных. Внедренные потоки данных, перечисленные в двоичной таблице или таблице значков , копируются из эталонной базы данных в целевую базу данных. Хранилище, внедренное в эталонную базу данных, не копируется в целевую базу данных.

Функция MsiDatabaseMerge объединяет данные двух баз данных. Эти базы данных должны иметь одну и ту же кодовую страницу. MsiDatabaseMerge завершается сбоем , если какие-либо таблицы или строки в базах данных конфликтуют. Конфликт возникает, если данные в любой строке первой базы данных отличаются от данных в соответствующей строке второй базы данных. Соответствующие строки находятся в одной таблице обеих баз данных и имеют одинаковый первичный ключ в обеих базах данных. Таблицы неконфлиционных баз данных должны содержать одинаковое количество первичных ключей, одинаковое количество столбцов, одинаковые типы столбцов, одинаковые имена столбцов и одинаковые данные в строках с одинаковыми первичными ключами. Временные столбцы, однако, не имеют значения в количестве столбцов, и соответствующие таблицы могут иметь разное количество временных столбцов, не создавая конфликтов, если постоянные столбцы совпадают.

Если число, тип или имя столбцов в соответствующих таблицах отличаются, схема двух баз данных несовместима, и установщик останавливает обработку таблиц и слияние завершается сбоем. Перед проверкой на наличие конфликтов слияния строк установщик проверяет, имеют ли две базы данных одну и ту же схему. Если возвращается ERROR_DATATYPE_MISMATCH, вы гарантируете, что базы данных не были изменены.

Если данные в определенных строках отличаются, это строка конфликт слияния, установщик возвращает ERROR_FUNCTION_FAILED и создает таблицу с именем szTableName. Первый столбец этой таблицы — это имя таблицы с конфликтом. Второй столбец содержит количество строк в таблице, в которых возникает конфликт. Таблица, сообщающая о конфликтах, выглядит следующим образом.

Столбец Type Ключ Допускает значения NULL
Таблица Text Да Нет
NumRowMergeConflicts Целое число   N
 

Эту функцию нельзя вызвать из пользовательских действий. Вызов этой функции из настраиваемого действия приводит к сбою функции.

В случае сбоя функции можно получить расширенные сведения об ошибке с помощью MsiGetLastErrorRecord.

Примечание

Заголовок msiquery.h определяет MsiDatabaseMerge в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Установщик Windows 5.0 в Windows Server 2012, Windows 8, Windows Server 2008 R2 или Windows 7. Установщик Windows 4.0 или установщик Windows 4.5 в Windows Server 2008 или Windows Vista. Установщик Windows в Windows Server 2003 или Windows XP
Целевая платформа Windows
Header msiquery.h
Библиотека Msi.lib
DLL Msi.dll

См. также раздел

Формат определения столбца

Функции управления базами данных