Buenas, antes que nada, feliz 2.017 para todos. Que sea un mejor año.
Si este Post no está en el lugar adecuado, pido por favor que lo envíen a donde corresponda. Mientras no sea el basurero.
Explico: Tengo un proceso en Delphi XE5 que recupera algunas cosas desde la BBDD (Firebird 2.5), este proceso llama a un Store Procedure de Firebird.
El tema está cuando quiero recuperar datos que son Blob's. Siempre me devuelve vacío.
Mi proceso es:
Código Delphi
[-]
function TDataModule1.recupero_Valor_Entorno(cod_sucursal:integer; nombre_Entorno:string):TStream;
begin
with DataModule1.spValorEntorno do
begin
Close;
Params.Clear;
StoredProcName:='RECUPERO_VALOR_ENTORNO '; Params.CreateParam(ftInteger, 'COD_SUCURSAL', ptInput); Params.CreateParam(ftWideString, 'NOMBRE_ENTORNO', ptInput); Params.CreateParam(ftBlob, 'VALOR', ptOutput); ParamByName('COD_SUCURSAL').AsInteger:=cod_sucursal;
ParamByName('NOMBRE_ENTORNO').AsString:=nombre_entorno ;
Prepare; try
ExecProc;
Result:=ParamByName('VALOR').AsBlob;
unPrepare;
except
on exception do
begin
UnPrepare;
raise;
end;
end; end;
end;
Mi Procedimiento almacenado es:
Código SQL
[-]
create or alter procedure RECUPERO_VALOR_ENTORNO (
COD_SUCURSAL integer,
NOMBRE_ENTORNO varchar(100))
returns (
VALOR blob sub_type 0 segment size 100)
as
declare variable CODIGO_ENTORNO integer;
begin
Select e.cod_entorno
From entorno e
Where e.nombre_entorno = :nombre_entorno
Into :codigo_entorno;
Select first 1 v.valor From valores v
Where v.cod_valor IN (Select se.cod_valor
From sucursales_entorno se
Where se.cod_sucursal = :cod_sucursal
and se.cod_entorno = :codigo_entorno)
into :valor;
SUSPEND;
end
Haciendo pruebas dentro de la BBDD recupera bien las cosas, pero cuando lo llamo, devuelve datos vacíos, o mi Procedimiento no sabe recuperar bien los datos, o algo...
El campo "v.valor" es un Blob definido en la tabla "Valores"
Bueno, espero haber sido claro...
Gracias.