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

Функция MsiDatabaseGenerateTransform создает файл преобразования различий между двумя базами данных. Преобразование — это способ записи изменений в базу данных без изменения исходной базы данных. Кроме того , с помощью MsiDatabaseGenerateTransform можно проверить, идентичны ли две базы данных без создания преобразования.

Синтаксис

UINT MsiDatabaseGenerateTransformA(
  [in] MSIHANDLE hDatabase,
  [in] MSIHANDLE hDatabaseReference,
  [in] LPCSTR    szTransformFile,
  [in] int       iReserved1,
  [in] int       iReserved2
);

Параметры

[in] hDatabase

Дескриптор к базе данных, полученной из MsiOpenDatabase , которая включает изменения.

[in] hDatabaseReference

Обработка базы данных, полученной из MsiOpenDatabase , которая не включает изменения.

[in] szTransformFile

Строка, завершающаяся значением NULL, указывающая имя создаваемого файла преобразования. Этот параметр может быть нулевым. Если szTransformFile имеет значение NULL, можно использовать MsiDatabaseGenerateTransform , чтобы проверить, идентичны ли две базы данных без создания преобразования. Если базы данных идентичны, функция возвращает ERROR_NO_DATA. Если базы данных отличаются, функция возвращает NOERROR.

[in] iReserved1

Это зарезервированный аргумент, который должен иметь значение 0.

[in] iReserved2

Это зарезервированный аргумент, который должен иметь значение 0.

Возвращаемое значение

Функция MsiDatabaseGenerateTransform возвращает одно из следующих значений:

Комментарии

Чтобы создать файл различий между двумя базами данных, используйте функцию MsiDatabaseGenerateTransform . Преобразование содержит сведения о вставке и удалении столбцов и строк. Флаги проверки хранятся в потоке сводной информации файла преобразования.

Для таблиц, которые существуют в обеих базах данных, единственным допустимым различием между двумя схемами является добавление столбцов в конец ссылочной таблицы. Нельзя добавлять столбцы первичного ключа в таблицу или изменять порядок, имена или определения столбцов существующих столбцов, как определено в базовой таблице. Иными словами, если ни одна из таблиц не содержит данных, а столбцы удаляются из ссылочной таблицы, результирующая таблица будет идентична базовой таблице.

Поскольку разделитель списка для преобразований, источников и исправлений является точкой с запятой, этот символ не следует использовать для имен файлов или путей.

Эта функция не создает поток сводной информации. Используйте MsiCreateTransformSummaryInfo , чтобы создать поток для существующего преобразования.

Если szTransformFile имеет значение NULL, можно проверить, идентичны ли две базы данных, не создавая преобразование. Если базы данных идентичны, возвращается ERROR_NO_DATA, при обнаружении различий возвращается NOERROR.

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

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

Примечание

Заголовок msiquery.h определяет MsiDatabaseGenerateTransform в качестве псевдонима, который автоматически выбирает версию 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

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

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

Преобразования базы данных