DBImage verwenden

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Adrian
Beiträge: 31
Registriert: Mo 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 2.0.6 FPC 3.0.4)
CPU-Target: 64Bit

DBImage verwenden

Beitrag von Adrian »

Servus!

In früheren Tagen stand mir eine Delphi4-Studentenversion zur Verfügung, mit der ich mir einst eine Datenbankanwendung programmierte, bei der in dbf-Dateien neben Texten auch Bitmaps abgespeichert wurden.
Nun möchte ich mit Lazarus (in Bezug auf Lazarus und in Bezug auf Datenbanken bin ich noch ziemlich unerfahren) auf die Daten zugreifen und sie bearbeiten/erweitern können.
Wenn ich z.B. aber

Code: Alles auswählen

Dbf1.First;
  while not Dbf1.EOF do
  begin
    Memo1.Lines.Add(Dbf1.FieldByName('Bemerkung').AsString);
    DBImage1.DataField:='Umschlag';  // <- diese Zeile bringt den Fehler
    Dbf1.Next;
  end;


verwende, dann erhalte ich den Fehler "EReadError' mit der Meldung 'Stream Read Error', sowie den Hinweis, daß streams.inc und except.inc nicht aufzufinden seien. Bei den Letzteren kann ich zwar die Positionen angeben, aber der Lesefehler bleibt.
DBImage1.DataSource ist auf die entsprechende Datenquelle gesetzt.

Wie muß ich denn vorgehen, um mir die Bitmaps anzeigen zu können?

Gruß,

Adrian

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das Format der Bilder wie sie in der DB gespeichert sind ist zwischen Delphi und Lazarus nicht kompatibel.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

Beitrag von slai »

Hast du bei DBImage1.DataField := 'Umschlag'; vorher auch die datasource angegeben?

Hier ein beispiel wie ich bilder (jpeg's) aus meiner firebird 1.5 datenbank lese und in ein TImage schmeisse:

Code: Alles auswählen

procedure TFrmProgrammEinstellungen.BtnLoadPic(Sender: TObject);
var
   JPEG : TJPEGImage;
   stBildStream : TMemoryStream;   
begin
if DBDataMod.ZTblCONFIGprogrammeinstellungen.FieldByName('MGESCHAEFTSLOGO').AsString <> '' then begin
     stBildStream := TMemoryStream.Create;
     TBlobField(DBDataMod.ZTblCONFIGprogrammeinstellungen.FieldByName('MGESCHAEFTSLOGO')).SaveToStream(stBildStream);
     stBildStream.Position := 0;
 
     JPEG:=TJPEGImage.Create;
     JPEG.LoadFromStream(stBildStream);
     ILogo.Picture.Assign(JPEG);
     stBildStream.Free;
     JPEG.Free;
  end;
end;


Hier noch wie ich es in das timage lade und in die datenbank abspeichere:

Code: Alles auswählen

procedure TFrmProgrammEinstellungen.BtnBildOeffnenClick(Sender: TObject);
var
   stBildStream : TMemoryStream;
begin
  if OpenDialog1.Execute then begin
     ILogo.Picture.LoadFromFile(OpenDialog1.FileName);
     stBildStream := TMemoryStream.Create;
     ILogo.Picture.Graphic.SaveToStream(stBildStream);
     stBildStream.Position := 0;
     TBlobField(DBDataMod.ZTblCONFIGprogrammeinstellungen.FieldByName('MGESCHAEFTSLOGO')).LoadFromStream(stBildStream);
     stBildStream.Free;
  end;
end;



Das Feld MGeschaeftslogo ist natürlich ein blob feld, ich benutze für firebird zeoslib...
gruss
andi
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

Adrian
Beiträge: 31
Registriert: Mo 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 2.0.6 FPC 3.0.4)
CPU-Target: 64Bit

Beitrag von Adrian »

Servus!

Danke Christian, wenn die Formate unterschiedlich bzw. nicht kompatibel sind, dann kanns ja nicht klappen. Da werde ich wohl selber ein Konvertierungsprogramm machen müssen. Wo gibt es denn die Beschreibungen der Formate?

@slai: Ja, die DataSource habe ich angegeben, siehe mein Anfangsbeitrag. Danke auch für dein Beispiel, evtl. werde ich das für meine Umsetzung verwenden können.

Gruß,

Adrian

stinketier
Beiträge: 40
Registriert: Di 3. Mär 2015, 15:35

Re:

Beitrag von stinketier »

slai hat geschrieben:

Code: Alles auswählen

procedure TFrmProgrammEinstellungen.BtnBildOeffnenClick(Sender: TObject);
var
   stBildStream : TMemoryStream;
begin
  if OpenDialog1.Execute then begin
     ILogo.Picture.LoadFromFile(OpenDialog1.FileName);
     stBildStream := TMemoryStream.Create;
     ILogo.Picture.Graphic.SaveToStream(stBildStream);
     stBildStream.Position := 0;
     TBlobField(DBDataMod.ZTblCONFIGprogrammeinstellungen.FieldByName('MGESCHAEFTSLOGO')).LoadFromStream(stBildStream);
     stBildStream.Free;
  end;
end;


andi


hey Slai

was ist denn iLogo ?
kann mir das mal einer erklären?

Antworten