共用方式為


MsiViewGetErrorA 函式 (msiquery.h)

MsiViewGetError 函式會傳回 MsiViewModify 函式中發生的錯誤。

語法

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

參數

[in] hView

檢視的句柄。

[out] szColumnNameBuffer

接收 Null 終止數據行名稱之緩衝區的指標。 請勿嘗試藉由傳入 szColumnName的 null (value=0) 來判斷緩衝區的大小。 您可以傳入空字串來取得緩衝區的大小(例如 “” )。 然後,函式會傳回MSIDBERROR_MOREDATA,pcchBuf 包含TCHAR中所需的緩衝區大小,不包括終止的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
Directory 資料表的 DefaultDir 數據行中提供了無效的字串。
MSIDBERROR_BADREGPATH
提供無效的登錄路徑字串。
MSIDBERROR_BADCUSTOMSOURCE
CustomAction 數據表的 CustomSource 數據行中提供了無效的字串。
MSIDBERROR_BADPROPERTY
提供無效的屬性字串。
MSIDBERROR_MISSINGDATA
_Validation 數據表遺漏數據行的參考。
MSIDBERROR_BADCATEGORY
數據行 _Validation 數據表的類別數據行無效。
MSIDBERROR_BADCABINET
提供無效的封包名稱。
MSIDBERROR_BADKEYTABLE
找不到或載入 _Validation 數據表之 Keytable 資料行中的數據表。
MSIDBERROR_BADMAXMINVALUES
_Validation 數據表之 MaxValue 數據行中的值小於MinValue數據行中的值。
MSIDBERROR_BADSHORTCUT
提供無效的快捷方式目標名稱。
MSIDBERROR_STRINGOVERFLOW
字串對於數據行定義所指定的長度而言太長。
MSIDBERROR_BADLOCALIZEATTRIB
已提供無效的當地語系化屬性。 (主鍵無法當地語系化。
 
 

請注意,在記憶體不足的情況下,此函式可能會引發STATUS_NO_MEMORY例外狀況。

言論

當 msiViewModify 傳回ERROR_INVALID_DATA時,您應該只呼叫 MsiViewGetError 函式,指出數據無效。 只會針對MSIMODIFY_VALIDATE、MSIMODIFY_VALIDATE_NEW和MSIMODIFY_VALIDATEFIELD記錄錯誤。

如果傳回ERROR_MORE_DATA,則為指標的參數會提供保存字串所需的緩衝區大小。 成功時,它會提供寫入字串緩衝區的字元數。 因此,當函式傳回MSIDBERROR_MOREDATA時,您可以傳遞小型緩衝區(最小一個字元),並在pcchPathBuf 檢查值,以取得所需的緩衝區大小。 請勿嘗試以 szColumnNameBuffer 或 pcchBuf所 參考的 DWORD 中傳入 null 來判斷緩衝區的大小。

傳回MSIDBERROR_NOERROR之後,就不會再發生任何驗證錯誤。 MSIDBERROR 傳回值表示 szColumnNameBuffer所識別之數據行中發生之值的驗證錯誤類型。

注意

msiquery.h 標頭會根據 UNICODE 預處理器常數的定義,將 MsiViewGetError 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 Windows Server 2003 或 Windows XP 上的 Windows Installer
目標平臺 窗戶
標頭 msiquery.h
連結庫 Msi.lib
DLL Msi.dll

另請參閱

一般數據庫存取函式

傳遞 Null 做為 Windows Installer 函式的自變數