2010-02-02 38 views
3

我负责维护传统的经典ASP应用程序。该应用程序使用ODBC系统DSN连接到MySQL数据库。如何在MySQL中强制传统的ASP脚本使用浮点值?

我们不得不最近更新服务器来满足一些许可要求。我们在Windows上使用MySQL 4.x和3.51 ODBC驱动程序。我们转到运行MySQL 5.1.43的Linux机器上,并在新的IIS服务器上运行5.1.6 ODBC驱动程序。

用户几乎立即开始报告错误,例如:

行不能定位更新。 自上次阅读以来,某些值可能已更改为 。

这是一个幻影错误,并且在同一记录上的相同数据更改在不同时间不会总是产生错误。在不同记录之间也是间歇性的,有时无论我插入什么值,我都无法重现所有记录中的缺陷。

发生在大约120个脚本中的70个脚本中,长度超过1,000行。

我能找到的唯一一致性是在所有失败的脚本中,它们都是读/写浮点数据库。具有空值的字段似乎不会崩溃,但是如果数据库中存在像'19'这样的值(注意不是小数位),那么似乎会失败,而'19.00'则不会。大多数花车被定义为11,2。

脚本正在使用ADODB和记录集。更新与下面的模式完成:

  • SELECT * FROM其中ID = udpdated的recordId从表单中记录的
  • 更新属性
  • 呼叫RecordSet.Update和RecordSet.Close

该错误从RecordSet.Update命令生成。

我已经创建了一个解决方法,而不是选择/复制/更新我生成一个我执行的SQL语句。这工作完美无瑕(显然,一个UPDATE语句的where子句更加集中,不考虑未更新的字段),所以我有一个相当不错的感觉,这是一个舍入问题与浮动导致错配在更新调用中重新检索记录。

我真的宁愿重写100这些实例中的(在源grep指令直接找到280+更新调用)。

任何人都可以证实,这里的问题是关于浮动/舍入?

如果是这样,是否有我可以应用的全局修复?

由于提前, -jc

回答

2

看一看MySQL Forums :: ODBC :: Row cannot be located for updating.
他们似乎已经找到了一些解决方法和一些解释以及..

+0

谢谢,盖比。我一直在研究这些,还有一些我还没有尝试过,所以今天我会试试这些。 – MisterJames 2010-02-03 13:47:10

+0

希望它的作品:) – 2010-02-03 14:09:44

+0

我已经实现了尽可能多的这些,并且它看起来很有希望。再次感谢。 – MisterJames 2010-02-05 19:27:25

1

我遇到类似的问题,用VBA宏利用4.1。当升级到5错误开始弹出。

对我来说,问题是从MySQL返回给VBA的值是以未处理的(按VBA)十进制格式。

CAST查询时的数字有助于解决问题。

因此,对于您的问题,ODBC/ASP组合可能会以不同的方式记录/读取值,那么您可能会期望它们是什么。

+0

谢谢你的建议,约翰。我会在几个频率最高的页面上实现这一点。干杯。 – MisterJames 2010-02-03 13:47:40