AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Image.Picture.SaveToStream in ein Datenbankfeld
Thema durchsuchen
Ansicht
Themen-Optionen

Image.Picture.SaveToStream in ein Datenbankfeld

Ein Thema von NoGAD · begonnen am 3. Feb 2021 · letzter Beitrag vom 18. Apr 2021
Antwort Antwort
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#1

Image.Picture.SaveToStream in ein Datenbankfeld

  Alt 3. Feb 2021, 00:58
Huhu.

Mit folgendem Code versuche ich ein Stream aus einem TImage in ein Graphic - Feld einer Datenbank zu schreiben. Es scjeint, als wäre der Stream leer, da beim Lesen des Feldes immer eine Fehlermeldung erzeugt wird.

Code für das Schreiben:
Delphi-Quellcode:
var
  BlobStream: TStream;
  PictureStream: TStream;
begin
    PictureStream := TMemoryStream.Create;
    Image1.Picture.SaveToStream(PictureStream);
    BlobStream :Table1.CreateBlobStream(Table1.FieldByName('Thumbnail'), bmWrite);
    BlobStream.Write(PictureStream, PictureStream.SIZE);
    BlobStream.Free;
    PictureStream.Free;
end;
Code für das Auslesen:
Delphi-Quellcode:
var
  JpegImage: TJPEGImage;
  BlobStream: TStream;
begin
  BlobStream := Table1.CreateBlobStream(Table1.FieldByName('Thumbnail'), bmRead);
  JpegImage := TJPEGImage.Create;
  JpegImage.LoadFromStream(BlobStream); // <--- Hier wird eine Exception ausgelöst, BlobStrem ist () (leer?)
  Image1.Picture.Assign(JpegImage);
  Image1.Visible := True;
  JpegImage.Free;
  BlobStream.Free;
end;
Ist der Fehler beim Schreiben oder beim Lesen zu suchen?

LG Mathias
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Image.Picture.SaveToStream in ein Datenbankfeld

  Alt 3. Feb 2021, 06:01
Was passiert, wenn Du beim Schreiben statt
Delphi-Quellcode:
// Alt
BlobStream.Write(PictureStream, PictureStream.SIZE);
das hier verwendest?
Delphi-Quellcode:
// Neu
BlobStream.CopyFrom(PictureStream, 0);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#3

AW: Image.Picture.SaveToStream in ein Datenbankfeld

  Alt 3. Feb 2021, 09:02
Du musst nach dem SaveToStream den PictureStream wieder auf den Anfang setzen. Außerdem ist Write nicht der richtige Weg, sondern CopyFrom (wie Detlef schon bemerkt hat).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#4

AW: Image.Picture.SaveToStream in ein Datenbankfeld

  Alt 3. Feb 2021, 09:05
Außerdem kannst du dir den Umweg über PictureStream ganz sparen:
Delphi-Quellcode:
  BlobStream := Table1.CreateBlobStream(Table1.FieldByName('Thumbnail'), bmWrite);
  try
    Image1.Picture.SaveToStream(BlobStream);
  finally
    BlobStream.Free;
  end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#5

AW: Image.Picture.SaveToStream in ein Datenbankfeld

  Alt 3. Feb 2021, 09:21
Oder direkt ein TDBImage?

Früher konnte das nur TBitmap, aber da Picture.LoadFromStream inzwischen die MagicBytes erkennt und danach entscheiden kann, kann TImage/TDBImage auch alle anderen bekannten TGraphic-Ableger aus Stream laden/anzeigen. (ohne dass man manuell den passenden GraphicTypen erstellt)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Feb 2021 um 17:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Image.Picture.SaveToStream in ein Datenbankfeld

  Alt 3. Feb 2021, 16:51
Außerdem kannst du dir den Umweg über PictureStream ganz sparen:
Delphi-Quellcode:
  BlobStream := Table1.CreateBlobStream(Table1.FieldByName('Thumbnail'), bmWrite);
  try
    Image1.Picture.SaveToStream(BlobStream);
  finally
    BlobStream.Free;
  end;
Das klappt perfekt. Vielen 1000 Dank!



Oder direkt ein TDBImage?

Früher konnte das nur TBitmap, aber da Picture.LoadFromStream inzwischen die MagicBytes erkennt und danach entscheiden kann, kann TImage/TDBImage auch alle anderen bekannten TGraphic-Ableger laden/anzeigen.

Und auf so einfache Dinge komme ich immer nicht. Dir auch ganz vielen Dank!

Ihr seid toll!

LG Mathias
Mathias
  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 04:43 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-2025 by Thomas Breitkreuz