1

我的数据库在这里遇到了问题,我使用 Firebird 1.5.3,它工作得很好,直到没有以正常方式读取或写入,但是当我运行一个程序时,我得到空白行结果和以下消息:

算术异常、数值溢出或字符串截断。

SQL 代码:-802 IB 错误号:335544321

所以我将它与一个月前的备份数据库进行了比较,它工作得很好,我得到了行中的数据。为确保我的代码没有更改,我将两个过程复制粘贴到 WinMerge(差异比较器)中,但没有任何不同。为确保我的错误来自数据,我为旧交易(1 年前的数据)运行我的程序,但我仍然收到这些消息。

我检查程序中的算术逻辑,修改,但没有运气。有人可以帮忙吗?

谢谢一堆,

4

2 回答 2

1

在对代码和数据进行了长时间的跟踪之后,我发现了以某种方式困扰我的障碍。主数据发生了变化,现在具有更长的字符 (varchar)。在我的程序中,它被放入较小大小的 varchar 中,比如说 10 个字符。虽然新字符串大约为 15。这里出现错误...或字符串截断...。但无论如何,感谢您对我的问题的关注,并感谢您写的线索,它以某种方式拯救了我,给了我追踪它的想法。

谢谢一堆,

于 2011-03-22T02:56:05.777 回答
0

具有完全相同数据的不同行为(在备份数据库和实时数据库中)很奇怪。也许其他一些过程或触发器会弄乱您在实时数据库中的查询。

既然你说你不能在这里发布代码,我建议你可以尝试消除一些其他的可能性。

“数字溢出或字符串截断。” 是你得到的错误。

  • 查询是否具有SUM()或其他聚合功能?
  • 它有任何字符串操作功能吗?

如果以上任何一项为“是”,请尝试逐个删除任何此类部分,然后运行修改后的查询。因此,您可能会发现查询的哪一部分产生了错误。


注意:由于 和 等非确定性函数,相同的数据库结构、相同的数据和相同的查询并不总是产生相同的结果。如果这些函数的结果用于进一步的计算,那么算术错误(如除以 0 或溢出或其他类型的错误)可能会在一次运行中发生,而在另一次运行中则不会发生。NOW()RAND()

于 2011-03-18T08:44:10.917 回答