将文本转换为浮点数/整数/日期时,Delphi 消息“您已插入无效值”
Posted
技术标签:
【中文标题】将文本转换为浮点数/整数/日期时,Delphi 消息“您已插入无效值”【英文标题】:Delphi message "You have inserted an invalid value" when converting text to float / integer / Date 【发布时间】:2014-09-03 03:45:33 【问题描述】:在我的应用程序中,当将文本转换为浮点/整数/日期值并将其分配给表格组件时,我收到一个消息框“您已插入无效值”。
我的实际代码如
Table1.Fieldbyname('XXX').value := strtofloat(Quantity.Text);
这里 xxx 是浮点数据类型,传递的值如 (5---6)
(或)
Table1.Fieldbyname('XXX').value := inttostr(Quantity.Text);
这里 xxx 是整数数据类型,传递的值如 (3+)
(或)
Table1.Fieldbyname('XXX').value := strtodatetime(Quantity.Text);
这里 xxx 是日期数据类型,传递的值如 (13/ss)。
在退出事件的编辑框上没有验证任何内容,
我的问题是,我正在使用 eureka-log 捕获异常,但这些消息没有被 eureka-log 赶上。这些消息是作为异常引发的还是只是警告消息?
如果是异常在eureka-log中如何处理?
【问题讨论】:
IntToStr(Quantity.Text)
不是您的实际代码,是吗?
请给出逐字的错误信息,可能是截图。也许你也应该做一些调试。
Eureka 只能捕获未捕获的异常。大多数在主线程中引发的异常,尤其是在事件处理程序中,都会被 RTL 捕获以显示弹出消息。
您最好首先考虑一下为什么会收到错误消息。您应该避免分配给 .Value,而是使用 AsFloat、AsInteger、AsString、AsDateTime 等。顺便说一句,你的意思是什么? “(5---6)”?
如果这些是传递的文字值,例如'(3+)'
等,那么它不能正常工作也就不足为奇了。 如果
... inttostr(Quantity.Text);
不是错字,那是你的问题,试试
.... strtoint(Quantity.Text);
【讨论】:
【参考方案2】:在您实际代码中的位置
Table1.Fieldbyname('XXX').value := strtofloat(Quantity.Text);
计算您希望从strtofloat(Quantity.Text)
获得的值(或其中一个值)并将函数替换为文字值。例如:
Table1.Fieldbyname('XXX').value := 5.6;
如果执行此行产生相同的错误,那么您就知道问题出在Fieldbyname()
分配上。
如果这一行的执行没有产生同样的错误,那么你知道你没有从strtofloat(Quantity.Text)
得到你所期望的。
【讨论】:
以上是关于将文本转换为浮点数/整数/日期时,Delphi 消息“您已插入无效值”的主要内容,如果未能解决你的问题,请参考以下文章