У меня есть программа VB6, использующая наборы записей adodb и файл базы данных 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 открывают наборы записей, предполагая пакетное обновление.
У кого-нибудь есть какие-либо идеи, почему это было бы неправильно, и неправильно только в небольшом проценте времени?Как я уже сказал, он работает правильно, насколько я могу судить по десяткам / сотням машин, и затем имеет ошибку в этой конкретной базе данных.