与消息“类EVariantTypeCastError无法转换型(String)的变体进入类型(双人)

2019-09-01 04:34发布

用Delphi与FastReport的我,而这条线后,立即里面德尔福调试收到此错误信息:

<FastReport_Component>.ShowReport(true);

然后这个错误出现:

项目MyApp.exe将引发异常类EVariantTypeCastError与消息“型(String)的变种无法转换成式(双)”。

它显示报告前出现了两次。 但如果我运行MYAPP没有调试没有错误信息出现。

我怎样才能找到其中的备忘录导致这个错误? 报告中有这么多的备忘录。 一些具有也在里面使用表达式IIF和错误消息不显示任何详细信息。

Answer 1:

这仅仅是一个调试器。 这可能只是得到一个预期的错误(一个由处理try..except在FR码),并妥善处理,但调试器无法知道的方式告诉你发生了例外。 (它与印,这引起了异常作为正常的程序流程的一部分工作时是一个常见的问题。)

有三种方法来应对这种情况在调试时:

  1. 只需点击Continue对例外对话框出现时。 (你可以告诉它是一个调试器异常,因为你得到BreakContinue选项,因为它仅在调试时发生。)

  2. 您可以禁用特定的异常类(或全部例外)调试时,使用Tools->Options->Debugger Options 。 在这种情况下,您可以添加EVariantTypeCastError例外忽略列表。

  3. (我的首选方法)使用Advanced Breakpoint Properties对话框跳过围绕特定的代码行,你知道会提高你想忽略异常的调试器的异常处理。

    • 立刻问题的代码行之前设置就行了断点。
    • 之前上线右键单击该断点,选择Breakpoint Properties从上下文菜单中。
    • 单击Advanced按钮上的Breakpoint Properties对话框,并在Actions组框中,取消Break时间并Ignore subsequent exceptions
    • 重复上述步骤,对这个问题的代码行后,除检查Break ,并取消Ignore subsequent exceptions的第二个断点。
    • 运行你的代码像往常一样。 调试器将跳过它是在两个断点之间的代码异常处理。

的选项#3的优点是,它忽略了所有的异常处理,但仅在两个断点之间的代码块,所以你仍然可以在你的代码的所有其他领域,可能是在调试器的有效例外的例外。



Answer 2:

我得到这个确切的同样的错误,但不与FastReport中。 我会留下我的错误的情况下,因为它可以帮助别人。 我得到这个错误的:

RESTRequest.Execute();

我用与TRESTResponseDataSetAdapter将TClientDataSet让后到我的Web服务请求的适配器将加载由Web服务返回的JSON字符串的数据集。 这个数据集被用来自动检查/取消选中复选框和负载textedits和组合框。 由于TJSONObject不解析布尔正确JSON,我改变了一些复选框选中/取消基于一个整数值,而不是一个布尔值。 然后我正在改变我的web服务,以便它看起来为布尔型字段中的数据表,以整数值1或0。出于某种原因(我的错完全),我被输出JSON与“”在该领域,而不是整数(” 1" 或 “0”)。 这产生了,准确的错误。 修正之后,错误消失。



文章来源: class EVariantTypeCastError with message 'Could not convert variant of type (String) into type (Double)