求值器中的表达式非法
Expression illegal in evaluator
我正在尝试编写一些代码,但发生了一些我不明白的事情。
我从数据库中获取一些值并遍历它们并根据需要更改其中的一些值。
这就是我想要做的:
if qryGeneral.fieldbyname('B_PRIJS').IsNull or
qryGeneral.fieldbyname('B_PRIJS').Value = 0 then
begin
if (qryGeneral.fieldbyname('V_PRIJS').Value <> 0) or
(qryGeneral.fieldbyname('V_PRIJSEXCL').Value <> 0) then
//make some calculations and save data
end;
B_PRIJS
是 SQL 服务器数据库中的浮点型空类型。当我设置断点并将鼠标悬停在 .Value 上时,它显示 0,11。当我悬停 IsNull 时,它显示 False,到目前为止一切顺利。
现在我希望它不会进入 if 结构,因为它不为空且不等于 0,但它确实进入了 if 结构。
我不明白为什么,我总是这样编码。
当我 select qryGeneral.fieldbyname('B_PRIJS').Value = 0
仍处于调试模式时,我收到一条消息 "Expression illegal in evaluator"。
我尝试将 Value
替换为 AsFloat
或将 0 更改为 0.0 但它不起作用。
我哪里做错了或者没有理解这里?
Delphi's operator precedence rules 表示你的表达式是这样计算的:
if (qryGeneral.fieldbyname('B_PRIJS').IsNull or qryGeneral.fieldbyname('B_PRIJS').Value)
= 0 then
在 =
表达式两边加上括号,就像 <>
表达式一样,您应该会更接近您期望的结果。但是,Value
属性 是Variant
。将 Variant
与 Integer
进行比较时,=
运算符将导致 Variant
转换为 Integer
。 Delphi's variant-type-conversion rules 显示当目标类型为整数时,持有实数值的 Variant
将四舍五入为最接近的整数,因此您的 0.11 值将四舍五入为零。考虑与 0.0 进行比较。
我正在尝试编写一些代码,但发生了一些我不明白的事情。
我从数据库中获取一些值并遍历它们并根据需要更改其中的一些值。
这就是我想要做的:
if qryGeneral.fieldbyname('B_PRIJS').IsNull or
qryGeneral.fieldbyname('B_PRIJS').Value = 0 then
begin
if (qryGeneral.fieldbyname('V_PRIJS').Value <> 0) or
(qryGeneral.fieldbyname('V_PRIJSEXCL').Value <> 0) then
//make some calculations and save data
end;
B_PRIJS
是 SQL 服务器数据库中的浮点型空类型。当我设置断点并将鼠标悬停在 .Value 上时,它显示 0,11。当我悬停 IsNull 时,它显示 False,到目前为止一切顺利。
现在我希望它不会进入 if 结构,因为它不为空且不等于 0,但它确实进入了 if 结构。 我不明白为什么,我总是这样编码。
当我 select qryGeneral.fieldbyname('B_PRIJS').Value = 0
仍处于调试模式时,我收到一条消息 "Expression illegal in evaluator"。
我尝试将 Value
替换为 AsFloat
或将 0 更改为 0.0 但它不起作用。
我哪里做错了或者没有理解这里?
Delphi's operator precedence rules 表示你的表达式是这样计算的:
if (qryGeneral.fieldbyname('B_PRIJS').IsNull or qryGeneral.fieldbyname('B_PRIJS').Value)
= 0 then
在 =
表达式两边加上括号,就像 <>
表达式一样,您应该会更接近您期望的结果。但是,Value
属性 是Variant
。将 Variant
与 Integer
进行比较时,=
运算符将导致 Variant
转换为 Integer
。 Delphi's variant-type-conversion rules 显示当目标类型为整数时,持有实数值的 Variant
将四舍五入为最接近的整数,因此您的 0.11 值将四舍五入为零。考虑与 0.0 进行比较。