Blob to String: Как преобразовать Blob в строку из параметра StoredProcedure в PostgreSQL? - PullRequest
1 голос
/ 14 февраля 2012

У меня есть хранимая процедура (функция в 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) стал строкой?

1 Ответ

1 голос
/ 14 февраля 2012

Я не знаю, что такое 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;
...