Delphi 带有消息的EVariantTypeCastError类';无法将类型(字符串)的变量转换为类型(双精度)

Delphi 带有消息的EVariantTypeCastError类';无法将类型(字符串)的变量转换为类型(双精度),delphi,fastreport,Delphi,Fastreport,使用Delphi和FastReport,我在Delphi内部调试时,在这一行之后立即收到以下错误消息: <FastReport_Component>.ShowReport(true); .ShowReport(true); 然后出现此错误: Project myapp.exe引发异常类EVariantTypeCastError,消息为“无法转换类型的变量” (字符串)转换为类型(双)“” 它在显示报告之前显示两次。但如果我运行myapp而不进行调试,则不会显示错误消息 如何找到导

使用Delphi和FastReport,我在Delphi内部调试时,在这一行之后立即收到以下错误消息:

<FastReport_Component>.ShowReport(true);
.ShowReport(true);
然后出现此错误:

Project myapp.exe引发异常类EVariantTypeCastError,消息为“无法转换类型的变量” (字符串)转换为类型(双)“”

它在显示报告之前显示两次。但如果我运行myapp而不进行调试,则不会显示错误消息


如何找到导致此错误的备忘录?这份报告有这么多备忘录。有些还包含使用
IIF
的表达式,并且错误消息不会显示更多信息

这只是调试器。它可能只是得到一个预期的错误(由FR代码中的
try..except
处理)并正确处理它,但调试器无法知道这一点,并告诉您发生了异常。(使用Indy时,这是一个常见的问题,它会在正常程序流中引发异常。)

调试时,有三种方法可以处理这种情况:

  • 当异常对话框出现时,只需点击“继续”。(您可以判断这是调试器异常,因为您获得了
    Break
    Continue
    选项,并且它仅在调试时发生。)

  • 调试时,可以使用
    工具->选项->调试器选项
    禁用特定异常类(或所有异常)。在这种情况下,您可以将
    EVariantTypeCastError
    添加到要忽略的异常列表中

  • (我的首选方法)使用
    高级断点属性
    对话框跳过调试器对特定代码行的异常处理,您知道该代码行将引发要忽略的异常

    • 在问题代码行之前的行上设置断点
    • 右键单击前一行上的断点,然后从关联菜单中选择
      断点属性
    • 单击
      断点属性
      对话框上的
      高级
      按钮,在
      操作
      组框中,取消选中
      中断
      并选中
      忽略后续异常
    • 在问题代码后的行上重复前面的步骤,除了在第二个断点上选中
      中断
      和取消选中
      忽略后续异常
    • 像往常一样运行代码。调试器将跳过对两个断点之间代码的异常处理

  • 选项#3的优点是它忽略了所有异常处理,但只忽略了两个断点之间的代码块,因此您仍然可以在代码的所有其他区域中获得异常,这些异常可能是调试器中的有效异常。

    我得到了完全相同的错误,但FastReport没有。我将留下我的错误的背景,因为它可能会帮助其他人。我在以下网站上收到此错误:

    RESTRequest.Execute()


    我将TClientDataSet与TresResponsateStatadapter一起使用,以便在向我的web服务发出请求后,适配器将加载带有web服务返回的JSON字符串的数据集。此数据集用于自动选中/取消选中复选框并加载文本编辑和组合框。由于TJSONObject在json中无法正确解析布尔值,因此我将一些复选框更改为基于整数值而不是布尔值来选中/取消选中。然后我更改了我的webservice,以便它在datatable中查找布尔列,并将其设置为整数值1或0。出于某种原因(完全是我的错),我在该字段中输出了一个带“”的json,而不是整数(“1”或“0”)。这就产生了确切的错误。更正后,错误消失了。

    我在FastReport中遇到了类似的问题。在我的例子中,它是一个错误的格式应用于一个视图。我可以通过以下方式找到问题组件的名称:

    • 使用Break停止执行
    • 在“调用堆栈”面板中,从fastreport类(在我的示例中为:frxClass.TfrxCustomMemoView.FormatData(…)中)找到最新的调用,然后双击它
    • 如果您没有源代码od Fast报告,将出现一个对话框-只需单击“取消”
    • 在“局部变量”面板中,您可能会看到有问题的组件的名称/值/格式

    从理论上讲,您的选项3是一个非常好的解决方案,但只有在有人删除这些断点时才起作用。使用“删除所有断点”菜单可以很容易地做到这一点。我经常这样做,因为我的IDE倾向于保留无效的断点,而这些断点不能单独删除。@dummzeuch:在这一点上,您重复这个简单的5步过程我没有说这是一种永久性的处理异常的方法(那将是选项2)。