Zapis na dysku parametru procedury zwróconego jako BLOB

0

Witam !

Delphi 2010 + Firebird 2.5

Procedure wbudowana (wywoływana jako ** exec**) po wykonaniu wielu operacji na danych zwraca parametr typu BLOB (obrazek). W jaki sposób mogę zapisać do pliku na dysku dane zwrócone przez ten parametr ?

Pozdrawiam
JW

0

Otwórz jakiś plik do zapisu w trybie binarnym i wpakuj do niego dane.

0
Shalom napisał(a)

Otwórz jakiś plik do zapisu w trybie binarnym i wpakuj do niego dane.

OK ! To jest akurat proste. Mnie chodzi o sposób pobrania danych z parametru, które potem mogę zapisać. W przypadku zapisu danych do bazy mamy ** LoadFromFile**, w przypadku pobrania danych z TField mamy SaveToFile, w przypadku parametru mamy ??? ...

0
Misiekd napisał(a)

http://4programmers.net/Forum/Kosz/180439-znowu_blob

No to może przykład !?

Dla konstrukcji : StoredProc.FieldByname(...) ... nie ma problemu ale mnie chodzi o konstrukcję StoredProc.ParamByname(...) ...

0
var
  ss: TStringStream;
  fs: TFileStream;
begin
  ss := TStringStream.Create(StoredProc.ParamByName('obrazek').AsBlob);
  fs := TFileStream.Create(NazwaPliku, fmOpenWrite);
  try
    ss.Position := 0;
    fs.CopyFrom(ss, ss.Size);
  finaly
    ss.free;
    fs.free;
  end;
end;
0
Misiekd napisał(a)
var
  ss: TStringStream;
  fs: TFileStream;
begin
  ss := TStringStream.Create(StoredProc.ParamByName('obrazek').AsBlob);
  fs := TFileStream.Create(NazwaPliku, fmOpenWrite);
  try
    ss.Position := 0;
    fs.CopyFrom(ss, ss.Size);
  finaly
    ss.free;
    fs.free;
  end;
end;

O to chodziło !

Ja próbowałem to zrobić poprzez TBlobStream i otrzymywałem różne śmieszne błędy.
Jeśli masz trochę czasu to byłbym wdzięczny za wytłumaczenie dlaczego najpierw ss (TStringStream) a potem dopiero fs

Pozdrawiam

0

możesz zapisywać StoredProc.ParamByName('obrazek').AsBlob od razu do pliku. Ja potrzebowałem mieć to w streamie do późniejszej obróbki i tak mi było najprościej

1 użytkowników online, w tym zalogowanych: 0, gości: 1