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."