Obsługa pola BLOB w zestawieniu ZEOS + StoredProc

Obsługa pola BLOB w zestawieniu ZEOS + StoredProc
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

Delphi v.13
Firebird v.5
ZEOS v.8
pole GRAFIKA tabeli GRAFIKI typu BLOB (binary)

Następująca konstrukcj działa OK (przepisuje grafikę do Image1)

Kopiuj
var
  SS: TStringstream;

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select GRAFIKA from GRAFIKI where ID = 5');
Query1.Open;

SS := TStringstream.Create(Query1.FieldByName('GRAFIKA').AsString);
Image1.Picture.LoadFromStream(SS);

Natomiast konstrukcja z wykorzystaniem StoredProc wykonuje się z błędami

Kopiuj
StoredProc1.StoredProcName := 'NAZWA_PROCEDURY';
StoredProc1.Params.Clear;

StoredProc1.Params.AddParam(StoredProc1.Params.CreateParam(ftInteger, 'ID', ptInput));
StoredProc1.ParamByName('ID').AsInteger := 5;

StoredProc1.Params.AddParam(StoredProc1.Params.CreateParam(ftBlob, 'GRAFIKA', ptOutput));

StoredProc1.ExecProc;

SS := TStringstream.Create(StoredProc1.ParamByName('GRAFIKA').AsString);
Image1.Picture.LoadFromStream(SS);

Dlaczego tak się dzieje ?
Sama procedura wykonuje się prawidłowo. Oprócz wybrania interesującego pola grafiki wykonuje również inne czynności.
Powyższe wersje przy użyciu UNIDAC wykonywały się prawidłowo !

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2282
1

[1] TStringstream do blob-a ? ja bym celował w TMemoryStream

[2] StoredProc1.open ? dla mnie jest różnica ExecProc vs Open

Dawno już nie widziałem Delphi ale ciepło wspominam ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.