我如何判断我的 TDBImage 是否已 erased/emptied?

How do I tell if TDBImage my has been erased/emptied?

我的窗体上有一个 TDBImage 控件。

用户可以CTRL-V图片进去。也可以在控件中CTRL-X来清除图像。

当我稍后尝试将该 TDBImage 的内容保存到我的数据库时,我遇到了内存访问冲突,尤其是当我生成内存流时。

自然地,我的第一个倾向是在执行此操作之前查看 TDBImage 是否为空(并自行清除数据库字段)。但我似乎无法找到一种方法来检测控件是否已被用户 CTRL-X

这是我现有代码的精简版,如果有帮助的话。

var
  photo: TDBImage;
  photoValue: TPicture; 
  photoStream: TMemoryStream;
  updateQuery: TOraQuery;
begin
  // ....
  // It gets through here without complaint
  photoValue := photo.Picture;

  // It fails on this line
  photoValue.Graphic.SaveToStream(photoStream);
  updateQuery.paramByName('picture').ParamType := ptInput;
  updateQuery.paramByName('picture').AsOraBlob.LoadFromStream(photoStream);
  updateQuery.ExecSQL;
  // ...
end;

如何检测 empty/CTRL-Xed TDBImage 控件?

你可以检查 Graphic 属性 是否为 nil,像这样

 if DBImage1.Picture.Graphic<>nil then 
   //do something