Witam wszystkich,
Mam pytanie, jak zapisać i odczytać JPEG lub inny plik graficzny np BMP, GIF lub nawet PDF w bazie FireBird?
Potrzebuje przykładu, wskazówki lub informacji na ten temat.
Z góry dzięki za pomoc.
Witam wszystkich,
Mam pytanie, jak zapisać i odczytać JPEG lub inny plik graficzny np BMP, GIF lub nawet PDF w bazie FireBird?
Potrzebuje przykładu, wskazówki lub informacji na ten temat.
Z góry dzięki za pomoc.
Wskazówka :) - użyj pola tylu BLOB.
Tak, wiem, ale przydał by mi sie jakiś przykład aby przećwiczyć zagadnienie.
Proszę o pomoc.
//zapis
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add('insert into baza (id, plik) values (:id, :pole_jpg')
TBlobField(SQLQuery.ParamByName('pole_jpg')).LoadFromFile('sciezka');
SQLQuery.ParamByName('id').AsInteger:=kolejny_id;
SQLQuery.ExecSQL();
//odczyt
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add('select pole_jpg from baza') ;
SQLQuery.ExecSQL();
TBlobField(SQLQuery.FieldByName('pole_jpg')).SaveToFile('sciezka');
Dziekuję za przykład, jednakże nie chce mi działać. Mam błąd:
"Acces violation at addres 0049ABA0 in module 'program.exe' . Read of addres 006F02A4
Błąd pojawia się przy próbie wykonania polecenia TBlobField( ...
with ibqSaveToIB do begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO rysunki (id, rysunek) VALUES (:id, :pole_jpg)');
TBlobField(ibqSaveToIB.ParamByName('pole_jpg')).LoadFromFile('c:\Rysunek.jpg');
ParamByName('id').AsInteger:= 1;
ExecSQL();
end;
Co może być przyczyną błędu?
W bazie zrobiłem następującą tabelę:
SET SQL DIALECT 3;
SET NAMES WIN1250;
CREATE TABLE RYSUNKI (
ID INTEGER,
RYSUNEK BLOB SUB_TYPE 0 SEGMENT SIZE 8000
);
Coś takiego sobie wydziergałem kiedyś na własne potrzeby, generalnie zapisuje bmp i jpg jako jpg. To LoadFromFile to ja nie pamietam, czy to nie jest jakaś abstrakcyjna metoda. Chociaż może nie. Z tego co pamiętam, to LoadFromFile tworzy chyba strumień plikowy z niego ładuje więc w sumie powinno działać.
function PictureToParam(aPicture : TPicture; aParam : TParam) : Boolean;
var theMS : TMemoryStream;
theJPG : TJPEGImage;
Begin
Result := False;
If not(Assigned(aPicture)) or not(Assigned(aParam)) then Exit;
theMS := TMemoryStream.Create;
try
try
If (aPicture.Width = 0) then
Begin
aParam.Value := null;
End
else
Begin
If aPicture.Graphic is TJpegImage then
TJpegImage(aPicture.Graphic).SaveToStream(theMS)
else
Begin
theJPG := TJpegImage.Create;
try
theJPG.Assign(aPicture.Bitmap);
theJPG.CompressionQuality := 90;
theJPG.SaveToStream(theMS);
finally
theJPG.Free;
end;
End;
aParam.LoadFromStream(theMS, ftBlob);
End;
Result := True;
except
end;
finally
theMS.Free;
end;
End;