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


Функция 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, указывающая имя создаваемого файла преобразования. Этот параметр может иметь значение 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 или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Установщик 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

См. также

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

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