![]() |
Datenbank: Paradox • Version: ?? • Zugriff über: BDE
ParadoxDB: BLOB nicht geöffnet
Hallo!
Ich habe eine Paradox-Datenbank, in der ich Jpg-Bilder speichern will. Das funktioniert inzwischen auch. Allerdings bekomme ich beim Lesen aus dem BLOB-Field, welches ich für das Jpg-Bild verwende manchmal einen Fehler. Wenn ich direkt nach dem Schreiben in die Datenbank das Bild wieder auslesen möchte, bekomme ich den Fehler "BLOB nicht geöffnet". Wenn ich das Programm gerade erst gestartet hab, funktioniert alles wunderbar, auch wenn ich zwischendurch ein anderes Bild noch speichere kann ich das davor öffnen, nur immer das letzte nicht. Hier mein Code zum Schreiben (das Bild wird geladen (BMP oder JPG) und wird erst auf eine bestimmte Größe verkleinert):
Delphi-Quellcode:
Code zum lesen:
procedure TMainForm.LoadPictureAndPost(const FN: String);
var BMP, BMP2: TBitmap; JPG: TJpegImage; M: TStream; f: Double; r1, r2: Double; begin BMP := TBitmap.Create; try if LowerCase(ExtractFileExt(FN)) = '.jpg' then begin Jpg := TJPEGImage.Create; try Jpg.LoadFromFile(FN); BMP.Assign(Jpg); finally Jpg.Free; end; end else BMP.LoadFromFile(FN); BMP2 := TBitmap.Create; try r1 := PIC_MAX_HEIGHT / PIC_MAX_WIDTH; r2 := BMP.Height / BMP.Width; if r1 > r2 then begin f := PIC_MAX_WIDTH / BMP.Width; BMP2.Width := PIC_MAX_WIDTH; BMP2.Height := Trunc(BMP.Height * f); end else begin f := PIC_MAX_HEIGHT / BMP.Height; BMP2.Height := PIC_MAX_HEIGHT; BMP2.Width := Trunc(BMP.Width * f); end; BMP2.Canvas.StretchDraw(BMP2.Canvas.ClipRect, BMP); Jpg := TJPEGImage.Create; try Jpg.Assign(BMP2); M := PersonTable.CreateBlobStream(PersonTable.FieldByName('Bild'), bmWrite); try Jpg.SaveToStream(M); PersonTable.Post; finally M.Free; end; finally Jpg.Free; end; finally BMP2.Free; end; finally BMP.Free; end; end;
Delphi-Quellcode:
PS: Habe auch schon im Forum gesucht, allerdings hat mir
procedure TMainForm.DBGrid1CellClick(Column: TColumn);
var M: TStream; Jpg: TJPegImage; begin if TBlobField(PersonTable.FieldByName('Bild')).IsNull then Exit; M := PersonTable.CreateBlobStream(TBlobField(PersonTable.FieldByName('Bild')), bmRead); try M.Position := 0; Jpg := TJPEGImage.Create; try Jpg.LoadFromStream(M); Image1.Picture.Assign(Jpg); finally Jpg.Free; end; finally M.Free; end; end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 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