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


Функция 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 содержит требуемый размер буфера в TCHARs, а не в том числе завершающий символ NULL. При возвращении MSIDBERROR_NOERROR pcchBuf содержит количество TCHAR, записанных в буфер, не включая завершающийся символ NULL. Этот параметр является пустой строкой, если ошибки отсутствуют.

[in, out] pcchBuf

Указатель на переменную, указывающую размер буфера, на который указывает переменная szColumnNameBuffer. Когда функция возвращает 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 таблицы Directory.
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
целевая платформа Виндоус
заголовка msiquery.h
библиотеки Msi.lib
DLL Msi.dll

См. также

Функции общего доступа к базам данных

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