[FireBird] + JPEG w bazie

0

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.

0

Wskazówka :) - użyj pola tylu BLOB.

0

Tak, wiem, ale przydał by mi sie jakiś przykład aby przećwiczyć zagadnienie.

Proszę o pomoc.

0

//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');

0

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
);
0

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;

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