Blob to String:如何将Blob转换为PostgreSQL中StoredProcedure参数的字符串?

时间:2012-02-14 12:59:41

标签: postgresql delphi-xe2

我有一个存储过程(Postgres中的函数),参数类型如下:

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)成为字符串?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

这是一个旧帖子,但是如果将来有人需要的话。

ShowMessage(BlobField.AsString);