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