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