我在delphi中有这个代码:
var_beg := MyQry.FieldByName('x_beg').AsInteger;
var_end := MyQry.FieldByName('x_end').AsInteger;
x_segment := copy(name, var_beg, var_end - var_beg);
现在,在表中,列x_beg
和x_end
都可以为空,并且在某些行上包含空值。我的问题是,当var_beg
和var_end
列为空时,变量x_beg
和x_end
会得到什么值?
答案 0 :(得分:12)
Null由AsInteger
函数自动转换为0(对于我尝试的所有数据集组件都是如此,但使用不同的TField
后代可能会有不同的行为。)
正如documentation所说:
使用AsInteger将字段数据的值读取为整数, 或者为字段的内容分配一个整数值。 TField 不支持整数值,并在a时引发异常 尝试获取或设置AsInteger属性。
转换结果取决于您的对象所属的TField
后代类。
TField.GetAsInteger
是虚拟函数,声明如下:
function TField.GetAsInteger: Longint;
begin
raise AccessError('Integer'); { Do not localize }
end;
如果您需要检查值是否为null,您可以使用:
myField.AsVariant = Null
或
myField.IsNull