我有一个VB6程序使用adodb记录集和Microsoft Access 2007数据库文件;我将代码添加到应用程序中,该程序将表中的每条记录取出,对于表中的大多数记录,我取一个字段,根据该字段中的值计算新值,并将该值存储在同一记录中的另一个字段中。我对此进行了测试并投入生产;它在大量笔记本电脑上运行时没有(报告)错误。adodb updateBatch存储不正确的信息
今天报错了;尽我所知,记录集上的updateBatch方法存储的值与我放在那里的值略有不同,与我打算放在那里的值完全不同。我把它放在调试器中,验证了新值是我想要的;我已经写入了将基本值和新值写入文件的语句,并验证了这些是我想要的,然而不同的值最终会存在于数据库中。
下面是相关的循环:
sqlStr = "Select key_citation, long_citeIndex from citation"
Set rs = m_dbh.runSQLReturnRS_RW(sqlStr)
While Not rs.EOF
citationNumber = rs.Fields("key_citation").value
If Left$(citationNumber, 1) <> "W" Then
newIndex = Citation.calculateCiteIndex(citationNumber)
Open "c:\CitationIndexDebug.txt" For Append As #4
Write #4, citationNumber, newIndex
Close #4
rs.Fields("long_citeIndex").value = newIndex
End If
rs.MoveNext
Wend
rs.UpdateBatch
rs.Close
Set rs = Nothing
runSQL等将打开adOpenDynamic记录,ADLOCKBATCHOPTIMISTIC
我试图把rs.Update在每个记录,但是这似乎并没有一起工作;我认为,因为应用程序的其余部分使用updateBatch,runSQL语句会在假设批量更新的情况下打开记录集。
任何人都有任何想法,为什么这是错误的,错误只有一小部分时间?正如我所说的,它可以正确运行,正如我可以在分数/几百台机器上分辨的一样,然后在这个特定的数据库上出现错误。
您可以在开发环境中一致地重现问题吗?如果是这样,我会建议在正在更新的数据库上运行SQL事件探查器,以便您可以看到ADODB正在生成哪些SQL命令。 –
是的,我可以反复产生问题。我不熟悉SQL分析器;你能指点一些能告诉我如何运行它的东西吗?这是一个MS Access数据库,严格来说是桌面型的;我有MS Access,但根本没有运行SQL Server。谢谢! – arcy
哎呀,对不起!我看到你把Access,但由于某种原因,我只是假设SQL服务器。我的评论对你来说并没有多大用处。看看这个问题/答案类似的东西,但可能适合你:http://stackoverflow.com/questions/2735412/access-mdb-is-it-possible-to-monitor-and-log-actual-查询作出反对一个acc –