Функция MsiDatabaseMergeW (msiquery.h)
Функция MsiDatabaseMerge объединяет две базы данных, что позволяет дублировать строки.
Синтаксис
UINT MsiDatabaseMergeW(
[in] MSIHANDLE hDatabase,
[in] MSIHANDLE hDatabaseMerge,
[in] LPCWSTR szTableName
);
Параметры
[in] hDatabase
Дескриптор базы данных, полученный из MsiOpenDatabase.
[in] hDatabaseMerge
Дескриптор базы данных, полученной из MsiOpenDatabase для слияния с базовой базой данных.
[in] szTableName
Имя таблицы для получения конфликт слияния сведений.
Возвращаемое значение
Функция MsiDatabaseMerge возвращает одно из следующих значений:
Код возврата | Описание |
---|---|
|
Сообщалось о конфликтах слияния строк. |
|
Указан недопустимый или неактивный дескриптор. |
|
Указана недопустимая таблица. |
|
Функция выполнена успешно. |
|
Разница в схемах между двумя базами данных. |
Комментарии
Функцию MsiDatabaseMerge и метод Merge объекта Database нельзя использовать для слияния модуля, включенного в пакет установки. Их не следует использовать для объединения модулей слияния в пакет установщика Windows. Чтобы включить модуль слияния в пакет установки, авторы пакетов установки должны следовать рекомендациям, описанным в разделе Применение модулей слияния .
MsiDatabaseMerge не копирует внедренные файлы кабинетов или внедренные преобразования из эталонной базы данных в целевую базу данных. Внедренные потоки данных, перечисленные в двоичной таблице или таблице значков , копируются из эталонной базы данных в целевую базу данных. Хранилище, внедренное в эталонную базу данных, не копируется в целевую базу данных.
Функция MsiDatabaseMerge объединяет данные двух баз данных. Эти базы данных должны иметь одну и ту же кодовую страницу. MsiDatabaseMerge завершается сбоем , если какие-либо таблицы или строки в базах данных конфликтуют. Конфликт возникает, если данные в любой строке первой базы данных отличаются от данных в соответствующей строке второй базы данных. Соответствующие строки находятся в одной таблице обеих баз данных и имеют одинаковый первичный ключ в обеих базах данных. Таблицы неконфликционных баз данных должны содержать одинаковое количество первичных ключей, одинаковое количество столбцов, одинаковые типы столбцов, одинаковые имена столбцов и одинаковые данные в строках с одинаковыми первичными ключами. Временные столбцы, однако, не имеют значения в количестве столбцов, и соответствующие таблицы могут иметь другое количество временных столбцов без создания конфликта, если постоянные столбцы совпадают.
Если число, тип или имя столбцов в соответствующих таблицах отличаются, схема двух баз данных несовместима, а установщик прекращает обработку таблиц и слияние завершается сбоем. Установщик проверяет, имеют ли две базы данных одну и ту же схему, прежде чем проверять наличие конфликтов слияния строк. Если возвращается ERROR_DATATYPE_MISMATCH, вы гарантируете, что базы данных не были изменены.
Если данные в конкретных строках отличаются, это строка конфликт слияния, установщик возвращает ERROR_FUNCTION_FAILED и создает новую таблицу с именем szTableName. Первый столбец этой таблицы — это имя таблицы с конфликтом. Второй столбец содержит количество строк в таблице с конфликтом. Таблица, сообщающая о конфликтах, выглядит следующим образом.
Столбец | Type | Ключ | Допускает значения NULL |
---|---|---|---|
Таблица | Text | Да | N |
NumRowMergeConflicts | Целое число | N |
Эту функцию нельзя вызвать из пользовательских действий. Вызов этой функции из настраиваемого действия приводит к сбою функции.
В случае сбоя функции можно получить расширенные сведения об ошибке с помощью MsiGetLastErrorRecord.
Примечание
Заголовок msiquery.h определяет MsiDatabaseMerge в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Установщик 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 |