Einzelnen Beitrag anzeigen

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