我如何判断我的 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
我的窗体上有一个 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