Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme mit Blobfeldern und Bilder (https://www.delphipraxis.net/158348-probleme-mit-blobfeldern-und-bilder.html)

dj-pitti 14. Feb 2011 13:42

Datenbank: Access • Version: 2007 • Zugriff über: ADO

Probleme mit Blobfeldern und Bilder
 
Hallo miteinander - ich probiere nun schon den ganzen Tag und bekomme es einfach nicht hin ...

Ich möchte in einer Access-DB in einem Blobfeld ein JPEG-Bild abspeichern und im Bedarfsfalle darauf zu greifen.

Es gelingt mir zwar Daten in das Blobfeld zu schreiben, jedoch kann ich nichts auslesen da die Größe gleich 0 ist ... Auch im Access selbst lässt sich nichts auslesen, dort erscheint eine Fehlermeldung.

Ich habe nunmehr alle verfügbaren Möglichkeiten aus verschiedensten Quellen probiert, aber ohne Erfolg.

Zum setzen des Blobs:

Delphi-Quellcode:
var m : TMemoryStream;
    jpg : TJPEGImage;

Begin
Form8.Query_Logo.Edit;
jpg:=TJPEGImage.Create;
m:=TMemoryStream.Create;
try
jpg.loadfromfile(form1.opendialog2.FileName);
jpg.SaveToStream(m);
m.Position := 0;
TBlobField(form8.query_logo.FieldByName('logo')).LoadFromStream(m);
finally
FreeAndNil(m);
FreeAndNil(jpg);
end;
Form8.Query_Logo.post;
Zum Auslesen:

Delphi-Quellcode:
jpg:=TJPEGImage.Create;
m:=TMemoryStream.Create;

if (query_logo.FieldByName('logo') As TBlobField).BlobSize > 0 then

  try
    TBlobField(query_logo.FieldByName('logo')).SaveToStream(m);
    m.Position:=0;
    jpg.LoadFromStream(m);
    Image1.Picture.Assign(jpg);
  finally
    FreeAndNil(m);
    FreeAndNil(jpg);
  end;

shmia 14. Feb 2011 17:08

AW: Probleme mit Blobfeldern und Bilder
 
Also ich würde mal damit beginnen, die Blobs mit Hilfe von Access (also dem Frontend) zu befüllen.
Unten folgt dann ein Procedure, mit der Du alle Blobs als Dateien auf der Festplatte speichern kannst.
Wenn du die Dateien mit einem Hexeditor anschaust, dann siehst du das Access vor den Bilddaten noch einen Ole-Header einschiebt.
Wenn du aus deinem Programm Bilder speichern möchtest, dann musst du diesen Header natürlich beachten.
Delphi-Quellcode:
// alle Blob-Felder des Datasets als Dateien im aktuellen Verzeichnis speichern
procedure TForm1.SaveBlobs(ds:TDataSet);
var
   i , j : Integer;
   flds_count : Integer;
   flds : array of TBlobField;
   ext : string;
begin
   flds_count := 0;
   for i:=0 to ds.Fields.Count -1 do
   begin
      if ds.Fields[i].IsBlob then
         Inc(flds_count);
   end;

   if flds_count = 0 then
      raise Exception.Create('no Blob fields found');

   SetLength(flds, flds_count);

   j := 0;
   for i:=0 to ds.Fields.Count -1 do
   begin
      if ds.Fields[i].IsBlob then
      begin
         flds[j] := ds.Fields[i] as TBlobField;
         Inc(j);
      end;
   end;

   ds.First;
   while not ds.Eof do
   begin
      ext := '.'+IntToStr(ds.RecNo);
      for i := 0 to flds_count-1 do
      begin
         flds[i].SaveToFile(flds[i].FieldName+ext);
      end;

      ds.Next;
   end;
end;

Bummi 14. Feb 2011 23:02

AW: Probleme mit Blobfeldern und Bilder
 
folgender Code funktioniert bei mir auch mit Access problemlos:
Delphi-Quellcode:
var
  s:TMemoryStream;
  i:TJPEGImage;
begin
  i:=TJPEGImage.Create;
  s:=TMemoryStream.Create;
  try
  TBlobField(dBild).SaveToStream(s);
  if s.Position > 0 then
      begin
        s.Position := 0;
        try
        i.LoadFromStream (s);
        Image2.Picture.Assign(i) ;
        except
        end;
      end;
  finally
  s.Free;
  i.Free
  end;
end;

dj-pitti 15. Feb 2011 08:07

AW: Probleme mit Blobfeldern und Bilder
 
Guten Morgen,

also jetzt nochmal getestet und super läufts ...

Das mit dem OLE-Header ist natürlich nicht zu missachten und erzeugt bei fehlerhafter Behandlung jpeg-Fehler ...

Bummi´s Code funktioniert in Verbindung mit meiner Schreibroutine eins a ... Ich habe aber nachträglich ein Tdataset anstatt einer Tquery genommen ...

Ich danke nochmal für die schnelle (erleuchtende) Hilfe und wünsche einen schönen Dienstag!

Perlsau 29. Sep 2011 16:28

AW: Probleme mit Blobfeldern und Bilder
 
Via Google mit diesem Suchstring

Delphi +Access +Jpg

erhältst du diverse Antworten, so u.a.

http://www2.delphi-forum.de/topic_db...s_83004,0.html
http://www.delphipraxis.net/158348-p...nd-bilder.html

... und dergleichen mehr.

Root2k 16. Apr 2012 15:12

AW: Probleme mit Blobfeldern und Bilder
 
(Beitrag entfernt)
Hat doch nicht ganz zum Thread gepasst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 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