Функция MsiDatabaseMergeA (msiquery.h)
Функция MsiDatabaseMerge объединяет две базы данных, что позволяет дублировать строки.
Синтаксис
UINT MsiDatabaseMergeA(
[in] MSIHANDLE hDatabase,
[in] MSIHANDLE hDatabaseMerge,
[in] LPCSTR szTableName
);
Параметры
[in] hDatabase
Дескриптор базы данных, полученный из MsiOpenDatabase.
[in] hDatabaseMerge
Дескриптор базы данных, полученный из MsiOpenDatabase для слияния с базовой базой данных.
[in] szTableName
Имя таблицы для получения конфликт слияния сведений.
Возвращаемое значение
Функция MsiDatabaseMerge возвращает одно из следующих значений:
Код возврата | Описание |
---|---|
|
Сообщалось о конфликтах слияния строк. |
|
Указан недопустимый или неактивный дескриптор. |
|
Указана недопустимая таблица. |
|
Функция выполнена успешно. |
|
Разница в схемах между двумя базами данных. |
Комментарии
Функцию 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 |