Обновление набора записей VB6 ADODB - PullRequest
2 голосов
/ 13 июня 2011

Так что я довольно новичок в Visual Basic и унаследовал этот код VB6, над которым мне нужно работать сейчас. Прямо сейчас я пытаюсь обновить базу данных SQL с помощью ADODB.RecordSet. У меня есть оператор Select SQL, который извлекает нужные данные из базы данных в ADODB.RecordSet, но у меня возникают проблемы с обновлением всех строк. Я пытаюсь обновить один и тот же столбец для каждой строки с одинаковым значением. Сейчас обновляются некоторые записи, но появляется сообщение об ошибке. Я получаю ошибку:

Ошибка времени выполнения 3021: либо BOF, либо EOF Истинно или текущая запись была удален. Запрашиваемая операция требует текущая запись.

Когда я нажимаю для отладки, я перехожу на rsUpdate.fields (TargetFieldName) = значение

Сам проект огромен и слишком велик для публикации, но часть кода, над которой я сейчас работаю, такова:

If rsUpdate.State = adStateOpen Then
  If rsUpdate.EOF Then
   rsUpdate.Close
   Exit Function
  End If
rsUpdate.MoveFirst
Dim i as Integer
For i = 0 To rsUpdate.recordCount
 rsUpdate.fields(TargetFieldName) = value
 rsUpdate.MoveNext
Next i
On Error GoTo canupdaterecord
rsUpdate.Update
On Error GoTo 0
rsUpdate.Close
End If
Exit function

Так что любая помощь, которую вы, ребята, можете оказать мне, будет с благодарностью. Как я уже сказал, я довольно новичок в VB и изучаю все это по ходу дела.

Ответы [ 2 ]

6 голосов
/ 13 июня 2011

Я бы предположил, что проблема в нерегулярной ошибке:

For i = 0 To rsUpdate.recordCount
   rsUpdate.fields(TargetFieldName) = value       
   rsUpdate.MoveNext
Next i

Если recordcount вернет 5 , этот цикл сделает 6 прогонов: 0,1,2,3,4,5.

Я бы написал так:

while not rsUpdate.EOF do
   rsUpdate.fields(TargetFieldName) = value       
   rsUpdate.MoveNext
wend
0 голосов
/ 23 июня 2011

Попробуйте также:

If reUpdate.EOF Then 
    Exit Sub 
End If
...