Member 13396059 Ответов: 1

Ошибка времени выполнения 3021 - EOF или BOF имеет значение true или текущая запись была удалена


Я пытаюсь получить данные из MS Access в vb6 и его ошибка отображается как 3021
Я преобразую свои данные в шестнадцатеричный код в базе данных и хотел получить таблицу в соответствии с именем но когда имя совпадает я получаю ошибку времени выполнения 3021

пожалуйста, помогите мне!!
Спасибо

Что я уже пробовал:

Частная суб view_Click()

Dim a1 как строка
А1 = РС!nameoftest
РС.Рядом
rs.Open "Select * from Table1 where NameofTest='" + Label26.Caption + "'", con, adOpenDynamic, adLockPessimistic
str = a1
Для x = 1 до Len(str) Шаг 2
str1 выглядит следующим образом = str1 выглядит следующим образом &амп; ЧР(функция val("&амп;ч" &ампер; средний$(стр, х, 2)))
Следующий

Если Label26.Заголовок = str1 выглядит следующим образом Затем
дисплей
Еще
MsgBox "запись не найдена..!!", vbInformation
Label26.Заголовок = ""
Конец, Если
Конец Подводной Лодки

1 Ответов

Рейтинг:
2

Jochen Arndt

Ваш код не имеет смысла: вы назначаете a1 от rs, закройте набор записей, откройте его снова с новым запросом, но никогда не используйте данные из этого запроса.

Я ожидал бы чего-то вроде

'rs.Close
rs.Open "Select * from Table1 where NameofTest='" + Label26.Caption + "'", con, adOpenDynamic, adLockPessimistic
If Not rs.EOF
    a1 = rs.nameoftest
    ' ...
End If
' ...
' EDIT: Close here
rs.Close
Если NameofTest это не уникально, вы должны использовать цикл вместо этого:
While Not rs.EOF
    a1 = rs.nameoftest
    ' ...
    rs.MoveNext
End While
[РЕДАКТИРОВАТЬ]
Почему вы держите набор записей открытым?
Закройте его, когда он больше не используется. Поскольку код вызывается по событию пользователя (щелчок), вы не можете использовать его в других функциях, где вы не знаете состояния.
[РЕДАКТИРОВАТЬ]


Member 13396059

я изменил свою программу, но все еще получаю ошибку

Jochen Arndt

Вы не должны получать ошибку при использовании моего примера кода (доступ к rs только после проверки на отсутствие EOF). Однако вы также можете проверить, нет ли BOF.

Member 13396059

я изменил свой код, как вы сказали

rs.Open "Select * from Table1 where NameofTest='" + Label26.Caption + "'", con, adOpenDynamic, adLockPessimistic
Пока не rs.EOF
А1 = РС!nameoftest
Label26.Заголовок = А1
str = a1
Для x = 1 до Len(str) Шаг 2
str1 выглядит следующим образом = str1 выглядит следующим образом &амп; ЧР(функция val("&амп;ч" &ампер; средний$(стр, х, 2)))
Следующий
Label26.Заголовок = str1 выглядит следующим образом
дисплей
РС.Метод MoveNext
Венд

но все равно я не могу получить эти данные

Jochen Arndt

Вы получаете ошибку или просто нет данных?
Если вы не получаете никаких данных, проверьте свой запрос (и если ваша таблица содержит набор записей, где NameOfTest имеет значение вашей метки).

Member 13396059

Dim a1, sqlstr как строка
против.Откройте "поставщика= Майкрософт.Джет.Oledb для.4.0;Источник данных=С:\Пользователи\Рагхава\рабочий стол\база данных\artoss.МБР;"
sqlstr = "Select * from Table1"
rs.Open sqlstr, con, adOpenKeyset
a1 = rs!NameofTest
str = a1
Для x = 1 до Len(str) Шаг 2
str1 выглядит следующим образом = str1 выглядит следующим образом &амп; ЧР(функция val("&амп;ч" &ампер; средний$(стр, х, 2)))
Следующий
Если str1 выглядит следующим образом = Label26.Заголовок Тогда
Пока не rs.EOF
дисплей
РС.Метод MoveNext
x = x + 1
Венд
Конец, Если

если я пишу так я могу получить данные но это не проверка всей базы данных это проверка только первой строки файла БД
Есть ли какие-то проблемы в моем коде??

Jochen Arndt

Он обрабатывает все строки в таблице.
While Not rs.EOF - Wend
петля. Вы должны поместить дополнительный код в этот цикл, чтобы показать значения.

Я не знаю вашего дизайна базы данных, поэтому ничем не могу вам помочь. Но похоже, что вы передаете неправильные значения в свое предложение WHERE, так что никакие resuts не возвращаются.

Member 13396059

в базе данных данные были преобразованы в шестнадцатеричный код