AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probleme mit Blobfeldern und Bilder

Probleme mit Blobfeldern und Bilder

Ein Thema von dj-pitti · begonnen am 14. Feb 2011 · letzter Beitrag vom 16. Apr 2012
Antwort Antwort
dj-pitti

Registriert seit: 1. Jul 2004
10 Beiträge
 
Delphi 2010 Professional
 
#1

Probleme mit Blobfeldern und Bilder

  Alt 14. Feb 2011, 13:42
Datenbank: Access • Version: 2007 • Zugriff über: ADO
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;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Probleme mit Blobfeldern und Bilder

  Alt 14. Feb 2011, 17:08
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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Probleme mit Blobfeldern und Bilder

  Alt 14. Feb 2011, 23:02
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
dj-pitti

Registriert seit: 1. Jul 2004
10 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Probleme mit Blobfeldern und Bilder

  Alt 15. Feb 2011, 08:07
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!
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Probleme mit Blobfeldern und Bilder

  Alt 29. Sep 2011, 16:28
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.
  Mit Zitat antworten Zitat
Root2k

Registriert seit: 7. Jun 2011
Ort: Ulm
49 Beiträge
 
Delphi XE Enterprise
 
#6

AW: Probleme mit Blobfeldern und Bilder

  Alt 16. Apr 2012, 15:12
(Beitrag entfernt)
Hat doch nicht ganz zum Thread gepasst.

Geändert von Root2k (17. Apr 2012 um 07:31 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:26 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