AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi JPg aus DB laden und in TImage anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

JPg aus DB laden und in TImage anzeigen

Ein Thema von Lemmi · begonnen am 9. Aug 2006 · letzter Beitrag vom 10. Aug 2006
Antwort Antwort
Lemmi

Registriert seit: 8. Aug 2006
11 Beiträge
 
#1

JPg aus DB laden und in TImage anzeigen

  Alt 9. Aug 2006, 22:07
Datenbank: mysql • Version: 4xx • Zugriff über: zeos
Hi, ich möchte ein bild in einer tabelle speichern und dann in ein TImage laden.

Delphi-Quellcode:
// Speichern
               jpg:=TJPEGImage.Create;
                m:=TMemoryStream.Create;
                try
                jpg.Assign(img_main_logo.Picture.Graphic);

                jpg.SaveToStream(m);
                m.Position := 0;
                TBlobField(aqTmp.FieldByName('pfad')).LoadFromStream(m);
                finally
                    FreeAndNil(m);
                    FreeAndNil(jpg);
                end;

// Laden
                jpg:=TJPEGImage.Create;
                m:=TMemoryStream.Create;
                try
                    TBlobField(aqTmp.FieldByName('pfad')).SaveToStream(m);
                    m.Position:=0;
                    jpg.LoadFromStream(m);
                    img_main_logo.Picture.Assign(jpg);
                finally
                    FreeAndNil(m);
                    FreeAndNil(jpg);
                end;
Diesen Code fand ich in einem Älteren Thread, wurde aber nicht wirklich schlau daraus...

Das Speichern klappt, Problem ist halt, nachdem die Zeile:
img_main_logo.Picture.Assign(jpg); ausgeführt wird, erhalte ich eine Fehlermeldung: Premature end of JPEG File

Hab mir schon nen wolf gesucht, leider nix dergleichen gefunden...muss doch irgendwie möglich sein

Bin für jede Hilfe Dankbar

Achso, in der Tabelle hab ich natürlich?! ein Blob-Feld genommen
Es gibt kein Problem, aber ich arbeite dran.
  Mit Zitat antworten Zitat
kluckweb

Registriert seit: 8. Okt 2005
149 Beiträge
 
#2

Re: JPg aus DB laden und in TImage anzeigen

  Alt 9. Aug 2006, 22:57
Hi,

hier ein Code mit dem es auf jeden Fall funktioniert:

Delphi-Quellcode:

var
jpg:TJPEGImage;
m:TMemoryStream;
begin
  jpg:=TJPEGImage.Create;
  m:=TMemoryStream.Create;
 if (Datenbank.FieldByName('foto') As TBlobField).BlobSize > 0 then

  try
    TBlobField(Datenbank.FieldByName('foto')).SaveToStream(m);
    m.Position:=0;
    jpg.LoadFromStream(m);
    Image1.Picture.Assign(jpg);
  finally
    FreeAndNil(m);
    FreeAndNil(jpg);
 Image1.Visible := True; end
  else Image1.Visible := False;

end;

Damit kannst Du auf jeden Fall ein Bild aus einer Datenbank in einem Image anzeigen lassen.
Hoffe, dass es Dir hilft.

Viel Erfolg
  Mit Zitat antworten Zitat
Lemmi

Registriert seit: 8. Aug 2006
11 Beiträge
 
#3

Re: JPg aus DB laden und in TImage anzeigen

  Alt 10. Aug 2006, 15:58
Re,

Leider nicht, erhalte wieder die gleiche fehlermeldung. Wenn du sagst, dass der Code auf jedenfall funktioniert, kann es ja nur an dem Code liegen, mitdem ich es inne Db reinpacke?! Dafür verwende ich folgenden Code :

Delphi-Quellcode:
Procedure Bild2DB(id:integer);
var blob : TMemoryStream;
    jpeg : TJPEGImage;
Begin
  blob := TMemoryStream.Create();
  jpeg := TJPEGImage.Create(form1);
  TRY
    if Form1.OPD.Execute then
    begin
      jpeg.LoadFromFile(Form1.OPD.FileName);
      blob.Clear;
      jpeg.SaveToStream(blob);
    end;
    Form1.Query.SQL.Text := 'Update filme Set bild = :bild where ID = :id';
    Form1.Query.ParamByName('bild').LoadFromStream(blob,ftgraphic);
    Form1.Query.ParamByName('id').AsInteger := id;
    Form1.Query.ExecSQL;
  Finally
    jpeg.LoadFromStream(blob);
  END;
  blob.Free;
  jpeg.Free;
end;
Muss man da irgendwie prüfen obs komplett übertragen wurde oderso? Noch dazu gesagt, ich benutze Delphi7, vielleicht liegts ja auch an meiner JPeg-Unit??
Es gibt kein Problem, aber ich arbeite dran.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: JPg aus DB laden und in TImage anzeigen

  Alt 10. Aug 2006, 16:07
Hallo Lemmi,

zwischen SaveToStream() und LoadFromStream() solltest du die Position des Streams auf 0 zurücksetzen, damit auch wirklich etwas in die Datenbank geschrieben werden kann.

Grüße vom marabu
  Mit Zitat antworten Zitat
Lemmi

Registriert seit: 8. Aug 2006
11 Beiträge
 
#5

Re: JPg aus DB laden und in TImage anzeigen

  Alt 10. Aug 2006, 18:10
Ich bin dem Fehler auf der Schliche

Habe herausgefunden, dass ein blob-feld maximal 64kb aufnehmen kann, ein longblob hingegen 16mb.

Nimmt man ein Longblob-Feld, funktioniert der oben angegebene code, bis auf die Sache: TJPEGImage kann Image1.Picture nicht zugewiesen werden.

Wenn man nun größere Streams speichern möchte, bei mir ist es ein 700kb großes Bild, erhält man eine Fehlermeldung, dass das Packet zu groß sei. Dazu muss man den MySQL-Wert : Max_allowed_packet ändern, z.B. auf 16m(16mb). Weiß aber nur nich wo ich den finde...

Somit ist das hauptsächliche Problem gelöst, Vielen Dank für eure Hilfestellungen. Scheut euch nicht vor Pn'S bezüglcih diesen Themas
Es gibt kein Problem, aber ich arbeite dran.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: JPg aus DB laden und in TImage anzeigen

  Alt 10. Aug 2006, 18:26
Der Spaltentyp BLOB kann nur 64K speichern. Wenn deine Images größer sind musst du natürlich einen passenderen Spaltentyp wählen. Vielleicht schaust du mal in die Dokumentation? Trial-and-Error kann ganz schön ermüdend sein.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz