Как обработать Access «Ошибка времени выполнения 3021 - нет текущей записи» после DoCmd.Requery? - PullRequest
1 голос
/ 12 февраля 2020

У меня возникла довольно раздражающая проблема в моем проекте доступа. Это файл Access 2007 - 2016.

В моей базе данных есть два запроса, которые я собираюсь использовать для фильтрации данных для подачи комбинированных списков. В одной из моих форм я сделал это с успехом. Первый список подается из таблицы, а последующие - путем фильтрации их соответствующей таблицы на основе предыдущего выбора списка. Вот скриншот моей формы, которая сработала . И вот часть кода, которая идет с ним:

Private Sub frm01ListSetor_Click()

DoCmd.Requery (qry01_frm01ListArea)
Me![frm01ListArea] = Null

DoCmd.Requery (qry02_frm01ListEquip)
Me![frm01ListEquip] = Null

Me![frm01TextID] = Null

End Sub

Private Sub frm01ListArea_Click()

DoCmd.Requery (qry02_frm01ListEquip)
Me![frm01ListEquip] = Null

Me![frm01TextID] = Null

End Sub

Вот запросы, которые идут вместе с кодом выше:

  • qry01_frm01ListArea
SELECT tblAreas.ID_Area, tblAreas.NomeArea
FROM tblAreas
WHERE (((tblAreas.SetorArea)=[Forms]![frm01_AddEquip]![frm01ListSetor]));
  • qry02_frm01ListEquip
SELECT tblEquipamentos.ID_Equipamento, tblEquipamentos.NomeEquipamento
FROM tblEquipamentos
WHERE (((tblEquipamentos.SetorEquipamento)=[Forms]![frm01_AddEquip]![frm01ListSetor]) AND ((tblEquipamentos.AreaEquipamento)=[Forms]![frm01_AddEquip]![frm01ListArea]))
ORDER BY tblEquipamentos.ID_Equipamento;

Приведенный выше код работает просто отлично. Он соответствующим образом фильтрует данные для предыдущего выбора, а также очищает данные и выбор «правильных» списков каждый раз, когда выбирается другое значение из «последующих». Так что эту форму я создал, чтобы помочь мне при заполнении базы данных моего оборудования.

Давайте теперь перейдем к проблемному c близнецу:

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

Вот у меня вот что: Скриншот проблемной формы

После выбора расширенного поля со списком на изображении 2 я должен выполнить следующий код:

Private Sub frm02SetorOM_Click()

    DoCmd.Requery (qry04_frm02CBArea)
    Me![frm02AreaOM] = Null

    DoCmd.Requery (qry05_frm02CBEquip)
    Me![frm02EquipamentoOM] = Null

End Sub

Private Sub frm02AreaOM_Change()

    DoCmd.Requery (qry05_frm02CBEquip)
    Me![frm02EquipamentoOM] = Null

End Sub

Это в основном то же самое, что я сделал в первой форме, но с другими переменными.

Но я получаю «Ошибка времени выполнения 3021: нет текущей записи» каждый раз, когда выбираю значение в поле «Setor». Cra sh происходит в строке «DoCmd.Requery (qry04_frm02CBArea)».

Вот запрос для поля области этой формы (qry04_frm02CBArea):

SELECT tblAreas.ID_Area, tblAreas.NomeArea
FROM tblAreas
WHERE (((tblAreas.SetorArea)=[Forms]![frm02_SubmitOM]![frm02SetorOM]));

Но дело в том, что Больше всего меня смущает то, что когда я нажимаю «Конец» в диалоговом окне «Ошибка времени выполнения», мое поле со списком «Область» - которое раньше было пустым - даже с ошибкой получает правильные параметры, например, если оно действительно «запрошено».

Как я могу решить эту проблему?

Заранее спасибо. Кстати, это мой первый проект Access, поэтому, пожалуйста, учтите это в ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...