Kann es sein, dass das Blobfeld schlicht und einfach zu klein für das Bild ist?
65536 ist halt der höchste Wert, den man mit 'nem Word darstellen kann und der Größe eines Blobs bei
MySQL entspricht. (
https://www.tutorialspoint.com/What-...olumn-in-MySQL)
Wenn man größere Bilder speichern will, sollte man einen entsprechend größeren Blobtyp nehmen.
Und das war der entscheidende Hinweis, alles andere war schon komplett korrekt, also das Laden und Speichern. Aber ich musste das Datenbankfeld von BLOB in der MySQLDatenbank auf MEDIUMBLOB stellen und schon ging es (TINYBLOB Up to 255 bytes; BLOB Up to 64 Kb; MEDIUMBLOB Up to 16 Mb, LONGBLOB Up to 4 Gb).
Speichern also mit:
Delphi-Quellcode:
var
BildSpeicherQuery : TMyQuery;
ImageStream : TMemoryStream;
begin (*TForm_Hauptuebersicht.Button_WappenbildvonDateiinDatenbankClick*)
if OpenDialog_NamenHauptform.Execute then
begin (*Opendialog*)
ImageStream := TMemoryStream.Create;
try
BildSpeicherQuery := TMyQuery.Create(BBM_Datamodule);
try
BildSpeicherQuery.Connection := BBM_Datamodule.BMMConn;
BildSpeicherQuery.SQL.Text := 'Update BBM_Verein set Wappenbild=:BILD Where idVerein=:ID';
ImageStream.LoadFromFile(OpenDialog_NamenHauptform.FileName);
ImageStream.Position := 0; // vorsichtshalber
BildSpeicherQuery.Params[0].SetBlobData(ImageStream.Memory, ImageStream.Size);
BildSpeicherQuery.Params[1].Value := Aktiv_Verein_ID;
BildSpeicherQuery.ExecSQL;
finally
BildSpeicherQuery.Free;
end; (*of QueryCreate*)
finally
ImageStream.Free;
end; (*of Streamload*)
end; (*Opendialog*)
end; (*of TForm_Hauptuebersicht.Button_WappenbildvonDateiinDatenbankClick*)
Laden mit:
Delphi-Quellcode:
var
PNG_Bild : TPNGImage;
BildLadenQuery : TMyQuery;
BlobStream : TStream;
begin (*of Button_WappenbildvonDBinImageClick*)
PNG_Bild:=TPNGImage.Create;
BildLadenQuery:=TMyQuery.Create(BBM_Datamodule);
try
BildLadenQuery.Connection:=BBM_Datamodule.BMMConn;
BildLadenQuery.SQL.Text := 'Select Wappenbild from BBM_Verein where idVerein=:ID';
BildLadenQuery.Params[0].Value := Aktiv_Verein_ID;
BildLadenQuery.ExecSQL;
BlobStream := BildLadenQuery.CreateBlobStream(BildLadenQuery.FieldByName('Wappenbild'),bmRead);
PNG_Bild.LoadFromStream(BlobStream);
Image_Wappen1.Picture.Assign(PNG_Bild);
finally
PNG_Bild.Free;
BildLadenQuery.Free;
end; (*of finally*)
Vielen Dank an Euch und bleibt gesund!