DBImage verwenden

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

DBImage verwenden

Beitragvon Adrian » 5. Jun 2008, 08:52 DBImage verwenden

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
Adrian
 
Beiträge: 25
Registriert: 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 1.6 FPC 3.0.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Christian » 5. Jun 2008, 11:17

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/
Christian
 
Beiträge: 6102
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon slai » 5. Jun 2008, 13:51

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
slai
 
Beiträge: 211
Registriert: 27. Apr 2007, 16:36
Wohnort: Zürich

Beitragvon Adrian » 6. Jun 2008, 06:32

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
Adrian
 
Beiträge: 25
Registriert: 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 1.6 FPC 3.0.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon stinketier » 17. Mär 2015, 14:25 Re:

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?
stinketier
 
Beiträge: 27
Registriert: 3. Mär 2015, 15:35

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried