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

Функция MsiViewModify обновляет извлекаемую запись.

Синтаксис

UINT MsiViewModify(
  [in] MSIHANDLE hView,
  [in] MSIMODIFY eModifyMode,
  [in] MSIHANDLE hRecord
);

Параметры

[in] hView

Дескриптор представления.

[in] eModifyMode

Указывает режим изменения. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
MSIMODIFY_SEEK
-1
Обновляет сведения в предоставленной записи, не изменяя позицию в результирующем наборе и не влияя на последующие операции выборки. Затем запись может использоваться для последующих обновлений, удаления и обновления. Все столбцы первичного ключа таблицы должны находиться в запросе, а запись должна содержать по крайней мере столько же полей, сколько в запросе. Поиск нельзя использовать с запросами с несколькими таблицами. Этот режим нельзя использовать с представлением, содержащим соединения. См. также замечания.
MSIMODIFY_REFRESH
0
Обновляет сведения в записи. Необходимо сначала вызвать MsiViewFetch с той же записью. Сбой для удаленной строки. Работает с записями только для чтения и записи.
MSIMODIFY_INSERT
1
Вставляет запись. Сбой, если существует строка с теми же первичными ключами. Сбой базы данных только для чтения. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_UPDATE
2
Обновления существующей записи. Только непрямые ключи. Необходимо сначала вызвать MsiViewFetch. Сбой с удаленной записью. Работает только с записями чтения и записи.
MSIMODIFY_ASSIGN
3
Записывает текущие данные в курсоре в строку таблицы. Обновления записать, соответствуют ли первичные ключи существующей строке, и вставить, если они не совпадают. Сбой базы данных только для чтения. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_REPLACE
4
Обновления или удаляет и вставляет запись в таблицу. Необходимо сначала вызвать MsiViewFetch с той же записью. Обновления запишите, не изменяются ли первичные ключи. Удаляет старую строку и вставляет новую, если первичные ключи изменились. Сбой базы данных только для чтения. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_MERGE
5
Вставка или проверка записи в таблице. Вставляет данные, если первичные ключи не соответствуют ни одной строке, и проверяет, есть ли совпадение. Сбой, если запись не соответствует данным в таблице. Сбой при наличии записи с повторяющимся ключом, который не идентичен. Работает только с записями чтения и записи. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_DELETE
6
Удаление строки из таблицы. Сначала необходимо вызвать функцию MsiViewFetch с той же записью. Завершается сбоем, если строка была удалена. Работает только с записями чтения и записи. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_INSERT_TEMPORARY
7
Вставляет временную запись. Сведения не являются постоянными. Завершается сбоем, если существует строка с тем же первичным ключом. Работает только с записями чтения и записи. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_VALIDATE
8
Проверяет запись. Не проверяет все соединения. Сначала необходимо вызвать функцию MsiViewFetch с той же записью. Получение ошибок проверки с помощью MsiViewGetError. Работает с записями только для чтения и записи. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_VALIDATE_NEW
9
Проверьте новую запись. Не проверяет все соединения. Проверяет наличие повторяющихся ключей. Получение ошибок проверки путем вызова MsiViewGetError. Работает с записями только для чтения и записи. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_VALIDATE_FIELD
10
Проверяет поля извлекаемой или новой записи. Может проверять одно или несколько полей неполной записи. Получение ошибок проверки путем вызова MsiViewGetError. Работает с записями только для чтения и записи. Этот режим нельзя использовать с представлением, содержащим соединения.
MSIMODIFY_VALIDATE_DELETE
11
Проверяет запись, которая будет удалена позже. Сначала необходимо вызвать MsiViewFetch. Сбой, если другая строка ссылается на первичные ключи этой строки. Проверка не проверка существования первичных ключей этой строки в свойствах или строках. Не проверка, является ли столбец внешним ключом для нескольких таблиц. Получение ошибок проверки путем вызова MsiViewGetError. Работает с записями только для чтения и записи. Этот режим нельзя использовать с представлением, содержащим соединения.

[in] hRecord

Дескриптор записи для изменения.

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

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

Обратите внимание, что при нехватке памяти эта функция может вызвать исключение STATUS_NO_MEMORY.

Комментарии

Значения MSIMODIFY_VALIDATE, MSIMODIFY_VALIDATE_NEW, MSIMODIFY_VALIDATE_FIELD и MSIMODIFY_VALIDATE_DELETE функции MsiViewModify не выполняют фактические обновления. они обеспечивают допустимость данных в записи. Для использования этих перечислений проверки требуется, чтобы база данных содержала _Validation таблицу.

Вы можете вызвать MSIMODIFY_UPDATE или MSIMODIFY_DELETE с записью сразу после использования MSIMODIFY_INSERT, MSIMODIFY_INSERT_TEMPORARY или MSIMODIFY_SEEK при условии, что вы не изменили 0-е поле вставленной или запрошенной записи.

Для выполнения любой инструкции SQL необходимо создать представление. Однако представление, которое не создает результирующий набор, например CREATE TABLE или INSERT INTO, не может использоваться с MsiViewModify для обновления таблиц в представлении.

Невозможно получить запись, содержащую двоичные данные из одной базы данных, и затем использовать эту запись для вставки данных в другую базу данных. Чтобы переместить двоичные данные из одной базы данных в другую, необходимо экспортировать их в файл, а затем импортировать их в новую базу данных с помощью запроса и MsiRecordSetStream. Это гарантирует, что каждая база данных имеет собственную копию двоичных данных.

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

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

Требования

Требование Значение
Минимальная версия клиента Установщик 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

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

Общие функции доступа к базе данных