Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum erhalte ich JPEG-Fehler 42, wenn es in einer Datenbank gespeichert ist?

JPEG-Fehler 42 wird gemeldet, wenn der Stream abgeschnitten wird. Wenn Sie beispielsweise versuchen, eine Datei der Länge Null in ein TJPEGImage zu laden dann ist Fehler 42 das Endergebnis.

Wenn einige Bilder angezeigt werden, aber nicht alle, dann ist die wahrscheinlichste Erklärung, dass die Daten irgendwie nicht den Hin- und Rückweg zur DB und zurück machen.

Überprüfen Sie die Größe des BLOB-Felds, wenn Sie es ausschreiben. Überprüfen Sie, ob es mit der Größe der Datei übereinstimmt, wenn Sie sie in eine Datei auf der Festplatte schreiben. Überprüfen Sie, ob die Festplattendatei ein gültiges JPEG ist. Bestätigen Sie dann, dass das BLOB-Feld genau die gleiche Länge hat, wenn Sie es erneut lesen. Vielleicht stimmt etwas mit Ihrem DB-Code nicht und der Stream wird abgeschnitten.

Der allererste Schritt hier ist also zu bestätigen, dass Sie genau die gleichen Daten wiederherstellen können, die Sie ursprünglich in die Datenbank eingegeben haben.

Der einzige andere Gedanke, den ich habe, ist, dass die Grafik im Bildsteuerelement nicht immer ein JPEG ist. Der Code, den Sie zum Laden des Bildes verwenden, Image1.Picture.Graphic.LoadFromStream() geht davon aus, dass es sich bei den Daten um JPEG handelt. Wenn Sie etwas anderes als ein JPEG gespeichert haben, dann LoadFromStream() würde scheitern.