AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ParadoxDB: BLOB nicht geöffnet
Thema durchsuchen
Ansicht
Themen-Optionen

ParadoxDB: BLOB nicht geöffnet

Ein Thema von F.W. · begonnen am 26. Jan 2008
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

ParadoxDB: BLOB nicht geöffnet

  Alt 26. Jan 2008, 15:39
Datenbank: Paradox • Version: ?? • Zugriff über: BDE
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:
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)) = '.jpgthen 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;
Code zum lesen:
Delphi-Quellcode:
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;
PS: Habe auch schon im Forum gesucht, allerdings hat mir dieser Thread nicht geholfen bzw weiß ich nicht wie ich die API einsetzen soll?
  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 13:43 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