Функция 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 и метод слияния
MsiDatabaseMerge не копирует встроенные файлы кабинета или внедренные преобразования из эталонной базы данных в целевую базу данных. Внедренные потоки данных, перечисленные в двоичной таблице или таблицы значков, копируются из эталонной базы данных в целевую базу данных. Хранилище, внедренное в эталонную базу данных, не копируется в целевую базу данных.
Функция MsiDatabaseMerge объединяет данные двух баз данных. Эти базы данных должны иметь ту же кодовую страницу. MsiDatabaseMerge завершается ошибкой, если какие-либо таблицы или строки в базах данных конфликтуют. Конфликт существует, если данные в любой строке первой базы данных отличаются от данных в соответствующей строке второй базы данных. Соответствующие строки находятся в одной таблице обеих баз данных и имеют один и тот же первичный ключ в обеих базах данных. В таблицах баз данных, не являющихся конфликтующими, должно быть одинаковое количество первичных ключей, одинаковое количество столбцов, одинаковые типы столбцов, имена столбцов и те же данные в строках с идентичными первичными ключами. Однако временные столбцы не имеют значения в счетчике столбцов и соответствующие таблицы могут иметь другое количество временных столбцов, не создавая конфликт до тех пор, пока постоянные столбцы совпадают.
Если число, тип или имя столбцов в соответствующих таблицах отличаются, схема двух баз данных несовместима, а установщик останавливает обработку таблиц, а слияние завершается сбоем. Установщик проверяет, что две базы данных имеют ту же схему перед проверкой конфликтов слияния строк. Если возвращается ERROR_DATATYPE_MISMATCH, вы гарантируете, что базы данных не были изменены.
Если данные в определенных строках отличаются, это конфликт слияния строк, установщик возвращает ERROR_FUNCTION_FAILED и создает новую таблицу с именем szTableName. Первый столбец этой таблицы — это имя таблицы с конфликтом. Второй столбец содержит количество строк в таблице с конфликтом. Таблица, которая сообщает о конфликтах, отображается следующим образом.
Столбец | Тип | Ключ | Допустимое значение NULL |
---|---|---|---|
Стол |
текста |
Y | N |
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 |
целевая платформа | Виндоус |
заголовка | msiquery.h |
библиотеки |
Msi.lib |
DLL | Msi.dll |
См. также
формата определения столбцов