获取存储过程的OUT BLOB类型参数作为TStream

时间:2017-01-10 16:24:14

标签: mysql delphi stored-procedures blob unidac

我的MySQL数据库上有一个存储过程,其中2个OUT参数为Blob类型

我想用UniDAC的SP组件将它们的值作为TStream,我已经尝试过这段代码进行测试:

 SP := TUniStoredProc.Create(nil);
 M := TMemoryStream.Create;
 try      
  try
   SP.StoredProcName := 'user_getpic';
   SP.PrepareSQL(False);

   SP.Params.ParamByName('fUID').AsString := '...';
   SP.Params.ParamByName('fDiceCode').AsString := '...';
   ...

   SP.ExecProc;

   M.LoadFromStream(SP.Params.ParamByName('fUPic').AsStream);
  except
   on E:EXception do
    begin
     ShowMessage('Error : ' + E.Message);
    end;
  end;
 finally
  SP.Free;
  M.Free;
 end;

问题是Param.AsStream返回Nil但是Param.AsBlob不是Nil

当我在MySQL上直接调用这个SP时,fUPic有blob数据,SP上没有问题

我已经尝试过SP.CreateBlobStream()但是我应该将它作为第一个参数传递给TField?!

我已经尝试从Param.AsBlob投射到TBlobStream,但没有机会!

我想知道如何将OUT blob参数作为TStream?

我正在使用Delphi XE6和UniDAC 6.1.4

1 个答案:

答案 0 :(得分:1)

使用AsBlob。它将blob作为字节数组返回。您可以直接使用它,或者如果您需要通过流访问数据,请使用TBytesStream

Stream := TBytesStream.Create(Param.AsBlob);