2012-02-14 8 views
1

私はこのようなパラメータの種類と手順(Postgresの関数)を格納していますBlob to String:BlobをStoredProcedureの文字列に変換する方法PostgreSQLのパラメータ?

Params[0] : result = ftBlob // postgresql function = text 
Params[1] : 1 = ftString 
Params[2] : 2 = ftInteger 
Params[3] : 3 = ftInteger 

私のコードは次のようである:質問は、私は結果を取得したいですか、である

procedure TForm1.Button1Click(Sender: TObject); 
var 
    ResultStr: TResultStr; 
    BlobField: TBlobField; 
    bStream: TStream; 
    DataSet: TDataSet; 
    StoredProc: TSQLStoredProc; 
begin 
    sp01.Close; 
    sp01.Params[1].AsString := '2010/2011'; 
    sp01.Params[2].AsInteger := 2; 
    sp01.Params[3].AsInteger := 1; 
    sp01.ExecProc; 

    if sp01.ParamByName('result').Value.IsBlob then 
    begin 
    BlobField := StoredProc.ParamByName('result') as TBlobField; 
    bStream := sp01.CreateBlobStream(BlobField, bmRead); 
    try 
     bStream.Read(ResultStr,sizeof(TResultStr)); 
    finally 
     bStream.Free; 
    end; 
    end; 

    ShowMessage(ResultStr.Hasil); 
end; 

(BLOB)が文字列になるのですか?

答えて

1

私はTResultStringが何であるか知らないが、あなたは、文字列でそれを行うことができます。

var 
    BlobResult: string; // Changed to make clearer where changes were below 
begin 
    // Your other code here 

    if sp01.ParamByName('result').Value.IsBlob then 
    begin 
    BlobField := StoredProc.ParamByName('result') as TBlobField; 
    bStream := sp01.CreateBlobStream(BlobField, bmRead); 
    try 
     SetLength(BlobResult, bStream.Size);   // Note changes here 
     bStream.Read(BlobResult[1], bStream.Size); // and here 
    finally 
     bStream.Free; 
    end; 
    end;