Функция 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 |