Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка run-time error 3021 / 11 сообщений из 11, страница 1 из 1
14.03.2016, 20:20
    #39191757
Ошибка run-time error 3021
Здравствуйте.

Пытаюсь сделать проверку логина и пароля в Access через VBA с использованием запросов.
Нужно чтобы выводило по логину и паролю получало id.

По нажатию на кнопку авторизации должна происходить проверка. Если логин и пароль есть в таблице Пользователи, то авторизация проходит успешно, но если логин или пароль с ошибкой, то при выполнении SQL запроса через VBA выскакивает ошибка "Run-time error 3021, Текущая запись отсутствует".

Пытался бороться с ней проверяя значение rst!result_2, но возникает тогда другая ошибка - Run-time error '424', Object required

Помогите пожалуйста разобраться.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Dim rst As DAO.Recordset
Dim log As String
Dim pass As String

        log = Me.username
        pass = Me.password
        
        Set rst = CurrentDb.OpenRecordset("SELECT Пользователи.id AS result_2 FROM Пользователи WHERE Пользователи.Логин = '" & log & "' AND Пользователи.Пароль='" & pass & "';")
        'выше возникает ошибка 3021, а ниже проверка и если она присутствует, то выдает ошибку 
            If (rst!result_2 Is EOL) Then
                t_ans = 0
                MsgBox "Ошибка авторизации"
            Else
                t_ans = rst!result_2
            End If
            
            rst.Close
        Set rst = Nothing
...
Рейтинг: 0 / 0
14.03.2016, 20:35
    #39191763
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка run-time error 3021
Ежик_из_тумана, а это чего?
Код: vbnet
1.
            If (rst!result_2 Is EOL) Then
...
Рейтинг: 0 / 0
14.03.2016, 21:10
    #39191776
Ошибка run-time error 3021
А это я бессилия экспериментировал и забыл вернуть. Просто не первый день пытаюсь решить в чём проблема, а опыта нету. Там у меня должно быть If rst!result_2 Is Empty - таким образом с помощью условного оператора я пытаюсь проверить выводит ли он id или пуст.
В любом случае хоть там Is Null, хоть Is Empty, хоть Is Empty стоит - всегда возникает ошибка 424.
Если проверки этой нет то выполнение этого кода останавливается на строчке с SQL запросом:
Код: vbnet
1.
Set rst = CurrentDb.OpenRecordset("SELECT Пользователи.id AS result_2 FROM Пользователи WHERE Пользователи.Логин = '" & log & "' AND Пользователи.Пароль='" & pass & "';")

и выдает ошибку 3021.
...
Рейтинг: 0 / 0
14.03.2016, 21:35
    #39191788
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка run-time error 3021
Код: vbnet
1.
If rst.EOF Then
...
Рейтинг: 0 / 0
15.03.2016, 04:13
    #39191872
Ошибка run-time error 3021
mds_world,

Огромное спасибо !
Оно работает!
...
Рейтинг: 0 / 0
15.03.2016, 06:05
    #39191873
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка run-time error 3021
Или
Код: vbnet
1.
If rst.Recordcount=0 then
...
Рейтинг: 0 / 0
15.03.2016, 06:21
    #39191879
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка run-time error 3021
MrShin, при некоторых условиях будет неверный результат, поэтому лучше проверять EOF/BOF.
...
Рейтинг: 0 / 0
15.03.2016, 06:44
    #39191881
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка run-time error 3021
Сразу после создания рекордсета? Можно поподробнее, что там может возникнуть?
Всю жизнь этим пользуюсь, никогда проблем не было.
Если рекордсетом уже пользовались, то да, полагаться на это нельзя
...
Рейтинг: 0 / 0
15.03.2016, 08:12
    #39191893
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка run-time error 3021
MrShinСразу после создания рекордсета? Можно поподробнее, что там может возникнуть?
Код: vbnet
1.
2.
3.
4.
5.
    With CurrentProject.Connection.Execute("ЗапросИлиТаблица")'получаем набор только для чтения и только вперёд
        Debug.Print .RecordCount
        .Close
    End With
'выведет -1


Обсуждалось неоднократно на форуме.
MrShin Если рекордсетом уже пользовались , то да, полагаться на это нельзя а вот это почему?
...
Рейтинг: 0 / 0
15.03.2016, 09:36
    #39191925
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка run-time error 3021
\\\\,
У ADO свои заморочки, есть такое - в некоторых случаях типа этого счетчик не определен, пока не попросили первую строку. В DAO, которым пользуется автор, такого нет:
Код: vbnet
1.
2.
3.
4.
With CurrentDb.OpenRecordset("Table1")
    Debug.Print .RecordCount
    .Close
End With


дает >=1 для не пустых запросов

\\\\а вот это почему?
Пока писал, какая-то проблема крутилась в голове, сейчас не смог вспомнить ничего, что обнуляло бы Recordcount. Так что и дальше можно пользоваться
...
Рейтинг: 0 / 0
15.03.2016, 10:37
    #39191962
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка run-time error 3021
MrShin,\\\\ (у Recordcount) при некоторых условиях будет неверный результат , поэтому лучше проверять EOF/BOF.MrShinУ ADO свои заморочкиА свойства EOF/BOF у наборов данных DAO и ADO выдают одинаковые результаты.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка run-time error 3021 / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]