![]() |
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:
Zum Auslesen:
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;
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; |
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 ![]() 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; |
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; |
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! |
AW: Probleme mit Blobfeldern und Bilder
Via Google mit diesem Suchstring
Delphi +Access +Jpg erhältst du diverse Antworten, so u.a. ![]() ![]() ... und dergleichen mehr. |
AW: Probleme mit Blobfeldern und Bilder
(Beitrag entfernt)
Hat doch nicht ganz zum Thread gepasst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz