求值器中的表达式非法

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。将 VariantInteger 进行比较时,= 运算符将导致 Variant 转换为 IntegerDelphi's variant-type-conversion rules 显示当目标类型为整数时,持有实数值的 Variant 将四舍五入为最接近的整数,因此您的 0.11 值将四舍五入为零。考虑与 0.0 进行比较。