powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access 2007 - объект RecordSet - проверка статуса записи
7 сообщений из 7, страница 1 из 1
Access 2007 - объект RecordSet - проверка статуса записи
    #37729210
uux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
uux
Гость
Есть следующая проблема: в форме пользователь может добавлять/удалять/редактировать записи, при этом внизу формы в текстовом поле выводится их сумма. Это текстовое поле обновляется в динамическом режиме через события формы Current, AfterUpdate и т. п. Для вычисления суммы используется цикл по объекту типа DAO.Recordset.

В процессе работы выяснилось, что при удалении записи в форме (через событие Delete) из объекта Recordset она не удаляется. (Был также создан тестовый запрос средствами конструктора Access, и выяснилось, что он также "видит" удаленную запись). Обновление суммы, соответственно, происходит только после того, как пользователь перемещается на какую-либо другую запись.

Была идея проверять в процессе перебора записей в Recordset их статус, но средств для этого в справке Access найти не удалось.

Вопрос: есть ли способы решить эту проблему? (Принципиально вижу два пути: либо просмотр статуса записи в DAO.Recordset'е, либо какая-то хитрая настройка базы данных, чтобы удаленные записи в Recordset'е не отображались).

P.S. Я нашел в справке информацию по свойству RecordStatus для ADODB .Recordset - в принципе это именно то, что мне нужно. Однако смена типа объекта Recordset явно потребует перелопачивания кода соответствующей функции, плюс с ADODB у меня опыта никакого. Поэтому хотелось бы всё-таки решить проблему с минимальными трудозатратами.
...
Рейтинг: 0 / 0
Access 2007 - объект RecordSet - проверка статуса записи
    #37729219
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uuxЕсть следующая проблема: в форме пользователь может добавлять/удалять/редактировать записи, при этом внизу формы в текстовом поле выводится их сумма. Это текстовое поле обновляется в динамическом режиме через события формы Current, AfterUpdate и т. п. Для вычисления суммы используется цикл по объекту типа DAO.Recordset.
...
а чё так ? почему не простой =sum() в примечании формы ?
...
Рейтинг: 0 / 0
Access 2007 - объект RecordSet - проверка статуса записи
    #37729224
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
но средств для этого в справке Access найти не удалось.



Ну раз так хотите, невоспользовавшись советом 112, то справок по Refresh, Requery полно...
...
Рейтинг: 0 / 0
Access 2007 - объект RecordSet - проверка статуса записи
    #37729236
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ukraina
Код: vbnet
1.
но средств для этого в справке Access найти не удалось.



Ну раз так хотите, невоспользовавшись советом 112, то справок по Refresh, Requery полно...
не учи человека плохому :))

у ТС проблема НЕ с синхронизацией
просто удаление НЕ зафиксированно - и он "видит" - то что есть на самом деле,
а хочет "видеть" - то что будет
...
Рейтинг: 0 / 0
Access 2007 - объект RecordSet - проверка статуса записи
    #37729257
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112Ukraina
Код: vbnet
1.
но средств для этого в справке Access найти не удалось.



Ну раз так хотите, невоспользовавшись советом 112, то справок по Refresh, Requery полно...
не учи человека плохому :))

у ТС проблема НЕ с синхронизацией
просто удаление НЕ зафиксированно - и он "видит" - то что есть на самом деле,
а хочет "видеть" - то что будет

Да я чё? Я ни чё... Заметил тенденцию... Простые вопросы пытаются решить такими оборотами, что и изобретателю ВБА не снились, а навороченные проблемы стремятся разрешить простыми арифметическими операциями (даже без деления), и при этом возмущаются: ах какой плохой ВБА, акцесс и все тут на этом форуме вместе взятые...

(Автор, это не стёб, это так междусабойчик)
...
Рейтинг: 0 / 0
Access 2007 - объект RecordSet - проверка статуса записи
    #37729444
uuxВ процессе работы выяснилось, что при удалении записи в форме (через событие Delete) из объекта Recordset она не удаляется. Т.е. перерасчет суммы выполняется на событии Delete? Конечно в этот момент запись еще сужествует. Надо использовать AfterDeleteConfirm, причем только при статусе acDeleteOK.
А зачем это делать на Current? "цикл по объекту типа DAO.Recordset", это по RecordsetClone формы?

И все же, "qwerty112 - почему не простой =sum() в примечании формы ?"
...
Рейтинг: 0 / 0
Access 2007 - объект RecordSet - проверка статуса записи
    #37729834
uux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
uux
Гость
Всё, разобрался. Ниже опишу, в чем была проблема.

почти всеИ все же, "qwerty112 - почему не простой =sum() в примечании формы ?"

Ну, как сказать... Простой sum() у меня сходу не заработал, и я, вместо того, чтобы разбираться, сделал всё теми средствами, какими мне удобнее. Наверно, это мозги такие кривые. Я и в Excel для всяких подсчетов обычно предпочитаю не формулки в ячейках прописывать, а сразу забацывать макрос.

Анатолий ( Киев ) Т.е. перерасчет суммы выполняется на событии Delete? Конечно в этот момент запись еще сужествует. Надо использовать AfterDeleteConfirm, причем только при статусе acDeleteOK.


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

Анатолий ( Киев ) А зачем это делать на Current?
Просто на всякий случай. Работу программы это не тормозит в сколь-либо заметной степени, а ее автору (т. е. мне) спокойнее.

Анатолий ( Киев ) "цикл по объекту типа DAO.Recordset", это по RecordsetClone формы?

Вот тут-то собака и порылась. Про существование RecordsetClone я не знал, и сделал следующее: сотворил SQL-запрос, дублирующий источник данных для формы, и открывал его через OpenRecordset при обработке событий. Тут-то и обнаружилось, что при добавлении записи и смене количества всё суммируется корректно, а вот свежеудаленную запись запрос продолжает видеть.

Далее ход моих мыслей был такой: я приостановил выполнение программы и открыл оригинальный запрос-источник данных для формы. Обнаружилось, что там всё отображается правильно. Попытался открыть его напрямую из VBA через OpenRecordset - получил ошибку исполнения. Потом посмотрел форум, увидел про RecordsetClone, переделал код под этот метод - всё заработало, как часы.

Ukrainaи при этом возмущаются: ах какой плохой ВБА, акцесс и все тут на этом форуме вместе взятые...

Ни в коем случае! VBA - чудесный язык, а уж как мне замечательно (и оперативно) помогли на этом форуме - просто слов нет. Всем огромное спасибо!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access 2007 - объект RecordSet - проверка статуса записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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