Поделиться через


Функция 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 и метод слияния объекта базы данных базы данных нельзя использовать для слияния модуля, включенного в пакет установки. Они не должны использоваться для слияния модулей слияния в пакет установщика Windows. Чтобы включить модуль слияния в пакет установки, авторы пакетов установки должны следовать рекомендациям, описанным в разделе Применение модулей слияния.

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

См. также

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

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