adodb updateBatch存储不正确的信息

时间:2011-10-25 16:37:00

标签: vb6 adodb

我有一个使用adodb记录集的VB6程序和一个Microsoft Access 2007数据库文件;我在应用程序中添加了代码,用于获取表中的每条记录,对于表中的大多数记录,我获取一个字段,根据该字段中的值计算新值,并将该值存储在同一记录中的另一个字段中。我对此进行了测试并将其投入生产;它在大量笔记本电脑上运行时没有(报告)错误。

我今天报错了;就像我所知道的那样,记录集上的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语句打开记录集,假定批量更新。

任何人都有任何想法,为什么这会出错,而错误的只有一小部分时间?正如我所说的那样,它在几十台/几百台机器上运行正常,然后在这个特定的数据库上出错。

2 个答案:

答案 0 :(得分:0)

价值与您打算保存的价值略有不同?你能举几个例子说明它应该是什么以及实际存储的内容是什么?

答案 1 :(得分:0)

作为替代方法,您可以使用adOpenForwardOnly检索记录集,然后发送UPDATE SQL语句。我发明了 m_conn ,但它应该是一个ADO.Connection对象。

 sqlStr = "SELECT key_citation FROM citation"
 Set rs = m_conn.Execute(sqlStr, , adCmdText Or adOpenForwardOnly)
 While Not rs.EOF
     citationNumber = rs.Fields(0).Value
     If Left$(citationNumber, 1) <> "W" Then
         newIndex = Citation.calculateCiteIndex(citationNumber)
         m_conn.Execute "UPDATE citation SET long_citeIndex = " & CStr(newIndex) & " WHERE key_citation = " & CStr(citationNumber), , adCmdText
     End If
     rs.MoveNext
 Wend rs.UpdateBatch
 rs.Close
 Set rs = Nothing