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


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

Функция MsiViewGetError возвращает ошибку, которая произошла в функции MsiViewModify .

Синтаксис

MSIDBERROR MsiViewGetErrorA(
  [in]      MSIHANDLE hView,
  [out]     LPSTR     szColumnNameBuffer,
  [in, out] LPDWORD   pcchBuf
);

Параметры

[in] hView

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

[out] szColumnNameBuffer

Указатель на буфер, который получает имя столбца, завершающееся null. Не пытайтесь определить размер буфера, передав значение NULL (value=0) для szColumnName. Размер буфера можно получить, передав пустую строку (например, ""). Затем функция возвращает MSIDBERROR_MOREDATA и pcchBuf содержит требуемый размер буфера в TCHAR, не включая завершающий символ NULL. При возвращении MSIDBERROR_NOERROR pcchBuf содержит число TCHAR, записанных в буфер, не включая завершающий символ NULL. Этот параметр является пустой строкой, если ошибки отсутствуют.

[in, out] pcchBuf

Указатель на переменную, указывающую размер буфера, на который указывает переменная szColumnNameBuffer, в TCHAR. Когда функция возвращает MSIDBERROR_NOERROR, эта переменная содержит размер данных, скопированных в szColumnNameBuffer, не включая завершающий символ NULL. Если szColumnNameBuffer недостаточно велик, функция возвращает MSIDBERROR_MOREDATA и сохраняет требуемый размер, не включая завершающий символ NULL, в переменной, на которую указывает pcchBuf.

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

Эта функция возвращает одно из следующих значений.

Код ошибки Значение
MSIDBERROR_INVALIDARG
Аргумент был недопустимым.
MSIDBERROR_MOREDATA
Буфер был слишком мал для получения данных.
MSIDBERROR_FUNCTIONERROR
Сбой функции.
MSIDBERROR_NOERROR
Функция успешно завершена без ошибок.
MSIDBERROR_DUPLICATEKEY
Новая запись дублирует первичные ключи существующей записи в таблице.
MSIDBERROR_REQUIRED
Значения NULL не допускаются; или столбец будет удален, но на который ссылается другая строка.
MSIDBERROR_BADLINK
Соответствующая запись во внешней таблице не найдена.
MSIDBERROR_OVERFLOW
Данные больше максимального допустимого значения.
MSIDBERROR_UNDERFLOW
Данные меньше минимально допустимого значения.
MSIDBERROR_NOTINSET
Данные не являются частью значений, разрешенных в наборе.
MSIDBERROR_BADVERSION
Указана недопустимая строка версии.
MSIDBERROR_BADCASE
Дело было недопустимым. Регистр должен быть в верхнем или нижнем регистре.
MSIDBERROR_BADGUID
Указан недопустимый ИДЕНТИФИКАТОР GUID.
MSIDBERROR_BADWILDCARD
Указано недопустимое имя файла с подстановочными знаками или недопустимое использование подстановочных знаков.
MSIDBERROR_BADIDENTIFIER
Указан недопустимый идентификатор.
MSIDBERROR_BADLANGUAGE
Указаны недопустимые языковые идентификаторы.
MSIDBERROR_BADFILENAME
Указано недопустимое имя файла.
MSIDBERROR_BADPATH
Указан недопустимый путь.
MSIDBERROR_BADCONDITION
Указан недопустимый условный оператор.
MSIDBERROR_BADFORMATTED
Указана недопустимая строка формата.
MSIDBERROR_BADTEMPLATE
Указана недопустимая строка шаблона.
MSIDBERROR_BADDEFAULTDIR
В столбце DefaultDir таблицы Каталог указана недопустимая строка.
MSIDBERROR_BADREGPATH
Указана недопустимая строка пути к реестру.
MSIDBERROR_BADCUSTOMSOURCE
Указана недопустимая строка в столбце CustomSource таблицы CustomAction .
MSIDBERROR_BADPROPERTY
Указана недопустимая строка свойства.
MSIDBERROR_MISSINGDATA
В _Validation таблице отсутствует ссылка на столбец.
MSIDBERROR_BADCATEGORY
Недопустимый столбец категорий таблицы _Validation столбца.
MSIDBERROR_BADCABINET
Указано недопустимое имя шкафа.
MSIDBERROR_BADKEYTABLE
Таблица в столбце Keytable таблицы _Validation не найдена и не загружена.
MSIDBERROR_BADMAXMINVALUES
Значение в столбце MaxValue таблицы _Validation меньше значения в столбце MinValue.
MSIDBERROR_BADSHORTCUT
Указано недопустимое имя целевого объекта ярлыка.
MSIDBERROR_STRINGOVERFLOW
Строка слишком длинна для длины, указанной определением столбца.
MSIDBERROR_BADLOCALIZEATTRIB
Указан недопустимый атрибут локализации. (Первичные ключи не могут быть локализованы.)
 
 

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

Комментарии

Функцию MsiViewGetError следует вызывать только тогда, когда MsiViewModify возвращает ERROR_INVALID_DATA, указывая, что данные недопустимы. Ошибки записываются только для MSIMODIFY_VALIDATE, MSIMODIFY_VALIDATE_NEW и MSIMODIFY_VALIDATEFIELD.

Если возвращается ERROR_MORE_DATA, параметр, представляющий собой указатель, задает размер буфера, необходимый для хранения строки. При успешном выполнении он возвращает количество символов, записанных в буфер строки. Таким образом, вы можете получить требуемый размер буфера, передав небольшой буфер (не менее одного символа) и проверив значение в pcchPathBuf , когда функция возвращает MSIDBERROR_MOREDATA. Не пытайтесь определить размер буфера, передав значение NULL как szColumnNameBuffer или размер буфера 0 в DWORD , на который ссылается pcchBuf.

После возврата MSIDBERROR_NOERROR ошибки проверки больше не сохраняются. Возвращаемое значение MSIDBERROR указывает тип ошибки проверки, которая произошла для значения, расположенного в столбце, определяемом szColumnNameBuffer.

Примечание

Заголовок msiquery.h определяет MsiViewGetError в качестве псевдонима, который автоматически выбирает версию 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
Целевая платформа Windows
Header msiquery.h
Библиотека Msi.lib
DLL Msi.dll

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

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

Передача null в качестве аргумента функций установщика Windows