Обновление набора записей VB6 ADODB

vb6 #ado

#vb6 #ado

Вопрос:

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

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

Когда я нажимаю на отладку, мне требуется обновить.поля (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 и как бы изучаю все это по ходу дела.

Ответ №1:

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

 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
 

Ответ №2:

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

 If reUpdate.EOF Then 
    Exit Sub 
End If