带有消息的EVariantTypeCastError类'无法将类型(String)的变量转换为类型(Double)

时间:2013-04-25 22:47:12

标签: delphi fastreport

使用Delphi和FastReport我在此行之后立即在Delphi中调试时收到此错误消息:

<FastReport_Component>.ShowReport(true);

然后出现此错误:

  

项目myapp.exe引发异常类EVariantTypeCastError,并显示消息'无法转换类型的变体   (String)into type(Double)'。

在显示报告之前显示两次。但如果我在没有调试的情况下运行myapp,则不会显示错误消息。

如何找到导致此错误的备忘录?报告有这么多备忘录。有些还使用IIF内部表达式,错误消息不再显示任何信息。

3 个答案:

答案 0 :(得分:13)

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

调试时有三种方法可以解决这种情况:

  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
    • 照常运行您的代码。调试器将跳过它对两个断点之间的代码的异常处理。
  4. 选项#3的优点是它忽略了所有异常处理,但仅限于两个断点之间的代码块,因此您仍然可以在代码的所有其他区域中获得异常,这些区域可能是调试器中的有效异常。 / p>

答案 1 :(得分:0)

我得到了完全相同的错误,但没有使用FastReport。我会留下错误的背景,因为它可能会帮助别人。我收到了这个错误:

  

RESTRequest.Execute();

我正在使用带有TRESTResponseDataSetAdapter的TClientDataSet,以便在向我的Web服务发出请求后,适配器将使用Web服务返回的JSON字符串加载数据集。此数据集用于自动检查/取消选中复选框并加载短信和组合框。由于TJSONObject没有在json中正确解析布尔值,因此我更改了一些复选框以基于整数值而不是布尔值来检查/取消选中。我当时正在改变我的web服务,以便它在数据表中查找布尔列到整数值1或0.出于某种原因(完全是我的错),我输出了一个带有&#34;&#34;的json。在该字段中而不是整数(&#34; 1&#34;或&#34; 0&#34;)。这产生了确切的错误。纠正后,错误消失了。

答案 2 :(得分:0)

我在FastReport中遇到了类似的问题。就我而言,这是应用于MemoView的错误格式。我可以这样找到违规组件的名称:

  • 使用Break停止执行
  • 在“调用堆栈”面板中,找到来自fastreport类的最新呼叫(在我的情况下:frxClass.TfrxCustomMemoView.FormatData(...)并双击它。
  • 如果您没有快速报告的源代码,则会出现一个对话框-只需单击“取消”即可。
  • 在“本地变量”面板中,您可能会看到有问题的组件的名称/值/格式。