Ich entwickle eine Anwendung in Delphi. Ich versuche, ein Bild zu extrahieren, das in Datenbank gespeichert wird, speichern Sie es in TMemoryStream
, und laden Sie dasselbe Bild um TImage
Steuerelement, das auf anderem Formular platziert wird, das dynamisch aufgefüllt wird. Ich erhalte Zugriffsverletzung Fehler, wenn ich versuche, Bild von Stream zu Bildkontrolle auf dem Formular platziert zu laden.Zugriffsverletzung Fehler in Delphi beim Speichern/Laden Bild in/aus Stream
Fehler Beschreibung ist als
Verletzung Zugriff folgt an der Adresse 00B548C in Modul abc.exe. vor Lesen der Adresse 0000000
Mein Code-Schnipsel ist wie folgt
UniConnection1.Connected := true;
UniQuery2.SQL.Text := 'Select image from userplays where id = :id';
UniQuery2.Params.ParamByName('id').Value := idpub1;
UniQuery2.Open;
if UniQuery2.FieldByName('image').AsString <> '' then
begin
try
Stream121 := TMemoryStream.Create;
TBlobField(UniQuery2.FieldByName('image')).SaveToStream(Stream121);
Stream121.Position := 0;
if Assigned(Stream121) then
begin
Image1.Picture.Graphic.LoadFromStream(Stream121);
Image1.Update;
end;
finally
Stream121.Free;
end;
end;
Haben Sie nach Image1.Picture.Graphic <> nil überprüft? Weißt du, welche Art von Bild in der Datenbank ist? –
JPG-Bild ist in der Datenbank ... tatsächlich teste ich es nur mit Datenbankzeile mit Bild. –
Also einige Debugging. Sie haben einen 'Nil'-Zeiger irgendwo, den Sie nicht erwarten. Ihre Aufgabe ist es, herauszufinden, wo. Wenn Sie nicht wissen, wie Sie diesen Code debuggen können, ist Ihr wirkliches Problem nicht dieser Code, sondern Ihre Debugging-Fähigkeiten. Repariere die Debugging-Fähigkeiten und dieses Problem wird verschwinden, und jeder andere mag es in der Zukunft. Mit anderen Worten, versuchen Sie, Fähigkeiten zu erlernen. –