次の方法で共有


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
ディレクトリ テーブルの DefaultDir 列に無効な文字列が指定されました。
MSIDBERROR_BADREGPATH
無効なレジストリ パス文字列が指定されました。
MSIDBERROR_BADCUSTOMSOURCE
CustomAction テーブルの CustomSource 列に無効な文字列が指定されました。
MSIDBERROR_BADPROPERTY
無効なプロパティ文字列が指定されました。
MSIDBERROR_MISSINGDATA
_Validation テーブルに列への参照がありません。
MSIDBERROR_BADCATEGORY
列の _Validation テーブルの category 列が無効です。
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 で値を調べることで、バッファーの必要なサイズを取得できます。 pcchBuf によって参照される DWORD、szColumnNameBuffer として null またはバッファー サイズ 0 を渡して、バッファーのサイズを判断しないでください。

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

注意

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

要件

   
サポートされている最小のクライアント 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 インストーラー
対象プラットフォーム Windows
ヘッダー msiquery.h
Library Msi.lib
[DLL] Msi.dll

関連項目

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

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