この Firebird ストアド プロシージャがあります。
SET TERM ^ ;
CREATE PROCEDURE MYSP ( FIRSTPARAM Varchar(3) )
RETURNS ( ERROR Varchar(128) )
AS BEGIN
/* a lot of things, including setting a value to ERROR */
suspend;
END^
SET TERM ; ^
この手順を C++ Builder XE2 で実行し、最後にその戻り値 ( ERROR
) を読み取って、成功したかどうかを確認する必要があります。プロシージャは 1 行のみを返します。
私はこの方法を試しました:
TIBQuery* q = DMH->ordQuery;
q->Close( );
q->SQL->Clear( );
q->SQL->Text = "EXECUTE PROCEDURE MYSP(:P1)";
if ( !DMH->ordTrans->InTransaction )
{
MakeCommit = true;
DMH->ordTrans->StartTransaction( );
}
if ( !q->Prepared )
q->Prepare( );
q->Params->ParamByName( "P1" )->Value = "abc";
q->Open();
//success if error field contains NULL
TField* errorField = q->FieldByName( "ERROR" );
bool success = errorField->IsNull;
if ( MakeCommit )
DMH->ordTrans->Commit( );
errorField
そのようなフィールドが見つからないため、でアクセス違反が発生します。