powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подскажите !!! Поиск записи в форме.
4 сообщений из 4, страница 1 из 1
Подскажите !!! Поиск записи в форме.
    #32043664
Савва
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При использовании кода (в adp-проекте):

Private Sub FindRecord(strSearchKod As String)
Dim frm As Form
Dim rsClone As New ADODB.Recordset
Set frm = Forms!Форма.Form
frm.Requery
Set rsClone = frm.RecordsetClone
rsClone.Find "код = " & Chr(39) & strSearchKod & Chr(39)
frm.Bookmark = .Bookmark
Set rsClone = Nothing
Set frm = Nothing
End Sub

формируется следующая ошибка:
Ошибка 3021' Either BOF or EOF or the current record has been deleted.
Requested operation requires a current record.

Подскажите в чем дело:
-в запросе ((запрос на обновление) источнике формы, в которой проводится поиск) или в том, что несколько пользователей пытаются редактировать одну и туже запись или ... в чем ?????.

Может подскажете как еще можно организовать поиск конкретной записи средствами VBA ?
Docmd.FindRecord не подходит (поле в котором проводится поиск скрыто).
...
Рейтинг: 0 / 0
Подскажите !!! Поиск записи в форме.
    #32043709
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так думаю проиходит следующее:

Private Sub FindRecord(strSearchKod As String)
Dim frm As Form
Dim rsClone As New ADODB.Recordset 'New тут необязательно
Set frm = Forms!Форма.Form
frm.Requery

'Обновление такого плана носит асинхронный характер, т.е. выполнение кода продолжается, не дожидаясь окончания выборки данных

Set rsClone = frm.RecordsetClone
rsClone.Find "код = " & Chr(39) & strSearchKod & Chr(39)

'Попытка найти запись в наборе, в то время как этой записи еще нет в числе тех, что приехали на клиента(асинхронная выборка) и как следствие - потеря текущей записи

frm.Bookmark = .Bookmark

'соответственно происходит ошибка

Set rsClone = Nothing
Set frm = Nothing
End Sub


___________
Что можно посоветовать. Посмотрите мой пример по адресу: http://am.rusimport.ru/MsAccess/show.asp?ID=15
Там используется событие рекордсета окончания выборки для дальнейшего продолжения кода. В принципе можно не дожидаться окончания выборки, а циклично проверять приехала ли искомая запись(забыл имя соотв.события рекордсета).
Другой вариант организовать синхронную выборку:
frm.Requery
Docmd.gotorecord,,, aclast
таким образом гарантировано приезжают все записи, а потом уже можно вести поиск
...
Рейтинг: 0 / 0
Подскажите !!! Поиск записи в форме.
    #32043941
Савва
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей БОЛЬШОЕ СПАСИБО.
Попробовал Docmd.gotorecord,,, aclast, работает!!!!
...
Рейтинг: 0 / 0
Подскажите !!! Поиск записи в форме.
    #32062657
Попробовал вместо:
frm.Requery
Docmd.gotorecord,,, aclast
использовать:
RunCommand acCmdRefresh
Короче и красивше, правда? Кстати я везде использую RunCommand вместо DoCmd, и особенно вместо MenuItem

Внимание, грабли! В хелпе написано, что использование form.requery быстрее: при acCmdRefresh происходит закрытие источника и его повторное открытие, тогда как при form.requery только перечитываются данные. Так вот, когда в таблицу вставлялись данные (из другой формы), после чего я делал form.requery, после чего Recordset.Find по ключу находил не то, что я его просил найти. Долго крестился, пока не дошло, что, вероятно, Recordset ищет по индексу, а по form.requery индекс не обновлялся (какой индекс? не знаю какой, где-то на клиенте, очевидно! похоже, Recordset имеет копию индекса у себя?) C acCmdRefresh всё в порядке стало.

Очевидно, что Савва ищет запись после изменения данных (иначе зачем Requery?). Если бы он искал по ключевому полю, он наступил бы и на эти грабли.
Ув. Сергей, не прокомментируете мои излияния?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подскажите !!! Поиск записи в форме.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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