msiViewGetErrorA 函式 (msiquery.h)

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

語法

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

參數

[in] hView

檢視的控制碼。

[out] szColumnNameBuffer

接收 Null 終止資料行名稱之緩衝區的指標。 請勿嘗試透過傳遞 szColumnName的 null (值=0) 來判斷緩衝區的大小。 您可以藉由傳入空字串來取得緩衝區的大小 (,例如 「」) 。 然後函式會傳回MSIDBERROR_MOREDATA, 而 pcchBuf 包含 TCHAR 中所需的緩衝區大小,不包括終止的 Null 字元。 傳回MSIDBERROR_NOERROR時, pcchBuf 包含寫入緩衝區的 TCHA 數目,不包括終止的 Null 字元。 如果沒有錯誤,此參數是空字串。

[in, out] pcchBuf

指定變數 szColumnNameBuffer所指向之緩衝區大小之變數的指標。 當函式傳回MSIDBERROR_NOERROR時,此變數會包含複製到 szColumnNameBuffer的資料大小,不包括終止 Null 字元。 如果 szColumnNameBuffer 不夠大,則函式會傳回MSIDBERROR_MOREDATA並儲存必要的大小,不包括 pcchBuf所指向的變數中終止 Null 字元。

傳回值

此函式會傳回下列其中一個值。

錯誤碼 意義
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的形式傳入 null 或pcchBuf所參考的 DWORD中 0 的緩衝區大小來判斷緩衝區大小。

傳回MSIDBERROR_NOERROR之後,就不會再發生驗證錯誤。 MSIDBERROR 傳回值會指出 szColumnNameBuffer所識別資料行中所發生之值的驗證錯誤類型。

注意

msiquery.h 標頭會將 MsiViewGetError 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 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
目標平台 Windows
標頭 msiquery.h
程式庫 Msi.lib
Dll Msi.dll

另請參閱

一般資料庫存取函式

傳遞 Null 作為 Windows Installer 函式的引數