次の方法で共有


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 は、終端の null 文字を含まない、TCHAR で必要なバッファー サイズを含みます。 MSIDBERROR_NOERRORが戻った場合、pcchBuf には、終端の null 文字を含まない、バッファーに書き込まれた TCHAR の数が含まれます。 エラーがない場合、このパラメーターは空の文字列です。

[in, out] pcchBuf

szColumnNameBuffer変数が指すバッファーのサイズを TCHAR 単位で指定する変数へのポインター。 関数が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
無効な言語 ID が指定されました。
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が返された場合、ポインターであるパラメーターは、文字列を保持するために必要なバッファーのサイズを示します。 成功すると、文字列バッファーに書き込まれた文字数が返されます。 そのため、小さなバッファー (最小 1 文字) を渡し、関数がMSIDBERROR_MOREDATAを返すときに pcchPathBuf 値を調べることで、バッファーの必要なサイズを取得できます。 szColumnNameBuffer として null を渡すか、pcchBufによって参照される DWORD のバッファー サイズ 0 を渡して、バッファーのサイズを判断しないでください。

MSIDBERROR_NOERRORが返されると、検証エラーは残らなくなります。 MSIDBERROR 戻り値は、szColumnNameBufferによって識別される列にある値に対して発生した検証エラーの種類を示します。

手記

msiquery.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして MsiViewGetError を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows Server 2012、Windows 8、Windows Server 2008 R2、または Windows 7 の Windows インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー
ターゲット プラットフォーム の ウィンドウズ
ヘッダー msiquery.h
ライブラリ Msi.lib
DLL Msi.dll

関連項目

一般的なデータベース アクセス関数の

windows インストーラー関数の引数として null を渡す