AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi PNGImage in Datenbank speichern und laden
Thema durchsuchen
Ansicht
Themen-Optionen

PNGImage in Datenbank speichern und laden

Ein Thema von Hobbycoder · begonnen am 29. Jan 2025 · letzter Beitrag vom 29. Jan 2025
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
984 Beiträge
 
#1

PNGImage in Datenbank speichern und laden

  Alt 29. Jan 2025, 13:41
Datenbank: MariaDB • Version: 11.5.2 • Zugriff über: Zeos 8.0.0
Hi,

Ich will ein Logoimage (TPNGImage) in einer Tabelle ablegen.

In der Tabelle habe ich das Feld Logo als Longblob angelegt. (Sollte ich da lieber Binary nehmen? Wird das unterschiedlich in der DB gehalten?)

Delphi-Quellcode:
procedure TLogo.SaveToDB(Con: TZConnection);
var
  q: TZQuery;
  ms: TMemoryStream;
begin
  q:=TZQuery.Create(nil);
  try
    q.Connection:=Con;
    q.SQL.Text:='Insert into Testtabelle (bildname, Logo) VALUES (:bildname, :logo)';
    q.Params.ParamValues['bildname']:=self.Fbildname;
    ms:=TMemoryStream.Create;
    self.FLogo.SaveToStream(ms);
    ms.Position:=0;
    q.ParamByName('logo').LoadBinaryFromStream(ms);
    q.ExecSQL;
  finally
    q.Free;
    ms.Free;
  end;
end;

procedure TLogList.LoadFromDB(Con: TZConnection);
var
  F: TLogo;
  q: TZQuery;
  ms: TStream;
begin
  q:=TZQuery.Create(nil);
  try
    self.Clear;
    q.Connection:=Con;
    q.SQL.Text:='Select * from Testtabelle';
    q.Active:=True;
    while not q.Eof do
    begin
      F:=TLogo.Create;
      F.bildname:=q.FieldByName('bildname').AsString;
      ms:=q.CreateBlobStream(q.FieldByName('logo'), bmRead);
      try
        if ms.Size>0 then
          F.Logo.LoadFromStream(ms);
      finally
        ms.Free;
      end;
      self.Add(F);
      q.Next;
    end;
    q.Active:=False;
  finally
    q.Free;
  end;
end;
Beim Laden bekomme ich immer die Meldung: "Dieses "Prtable Network Graphics" Bild ist ungültig. Der Dekoder ist unerwartet auf das Ende der Datei gestoßen."
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
713 Beiträge
 
Delphi 12 Athens
 
#2

AW: PNGImage in Datenbank speichern und laden

  Alt 29. Jan 2025, 13:59
Mach vor dem F.Logo.LoadFromStream(ms); mal ein ms.Position:=0;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.743 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: PNGImage in Datenbank speichern und laden

  Alt 29. Jan 2025, 14:12
Und wenn das nicht hilft, speichere den Stream doch einfach mal in eine Datei und prüfe und ggf. vergleiche den Inhalt, ggf. mit einem Hexeditor.

Direktes Laden des gleichen Streams nach dem Speichern funktioniert aber?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
984 Beiträge
 
#4

AW: PNGImage in Datenbank speichern und laden

  Alt 29. Jan 2025, 14:41
Mach vor dem F.Logo.LoadFromStream(ms); mal ein ms.Position:=0;
Hatte ich, habs nur beim zusammenkürzen für den Post versehentlich mit gelöscht.

Und wenn das nicht hilft, speichere den Stream doch einfach mal in eine Datei und prüfe und ggf. vergleiche den Inhalt, ggf. mit einem Hexeditor.

Direktes Laden des gleichen Streams nach dem Speichern funktioniert aber?
Der Fehler sitzt natürlich immer vorm Monitor

Aber das mit dem Speichern hat mich auf die richtige Spur gebracht.
Im Programm gibt es 2 Möglichkeiten einen Eintrag zu Editieren. Zum einen über den "Bearbeiten"-Button und über Doppelklick.
In der Button-Methode habe ich das geladene PNG zum Object Assigned und in der Doppelklick-Methode vergessen.
Beim Testen habe ich natürlich, weil man es ja so intuitiv mache, mit Doppelklick editiert. Ergo, in meinem Object war das PNG immer leer.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.743 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: PNGImage in Datenbank speichern und laden

  Alt 29. Jan 2025, 17:29
Ja, dann geht man unterbewusst von falschen Voraussetzungen aus, so dass man den Fehler nur an der falschen Stelle sucht. Das merkt man nur leider selbst in der Situation nicht unbedingt. Das ist wohl jedem schon nicht nur einmal passiert.

Das ist genau der Grund, weshalb ich hier dann solche Fragen stelle, um erst einmal sicher zu sein, dass der gezeigte Code auch das Problem beinhaltet.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.208 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: PNGImage in Datenbank speichern und laden

  Alt 29. Jan 2025, 19:50
Longblob/binary sollten im prinzip das gleiche sein
BLOG steht für Binary Large Object

Maximal irgendwelche Spezialoperationen oder maximale Größe könnten etwas differieren.
evtl. ist das eine bei SEHR VIELEN SEHR GROßEN Daten besser.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 16:53 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