|
Access 2007 - объект RecordSet - проверка статуса записи
|
|||
---|---|---|---|
#18+
Есть следующая проблема: в форме пользователь может добавлять/удалять/редактировать записи, при этом внизу формы в текстовом поле выводится их сумма. Это текстовое поле обновляется в динамическом режиме через события формы Current, AfterUpdate и т. п. Для вычисления суммы используется цикл по объекту типа DAO.Recordset. В процессе работы выяснилось, что при удалении записи в форме (через событие Delete) из объекта Recordset она не удаляется. (Был также создан тестовый запрос средствами конструктора Access, и выяснилось, что он также "видит" удаленную запись). Обновление суммы, соответственно, происходит только после того, как пользователь перемещается на какую-либо другую запись. Была идея проверять в процессе перебора записей в Recordset их статус, но средств для этого в справке Access найти не удалось. Вопрос: есть ли способы решить эту проблему? (Принципиально вижу два пути: либо просмотр статуса записи в DAO.Recordset'е, либо какая-то хитрая настройка базы данных, чтобы удаленные записи в Recordset'е не отображались). P.S. Я нашел в справке информацию по свойству RecordStatus для ADODB .Recordset - в принципе это именно то, что мне нужно. Однако смена типа объекта Recordset явно потребует перелопачивания кода соответствующей функции, плюс с ADODB у меня опыта никакого. Поэтому хотелось бы всё-таки решить проблему с минимальными трудозатратами. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 12:23 |
|
Access 2007 - объект RecordSet - проверка статуса записи
|
|||
---|---|---|---|
#18+
uuxЕсть следующая проблема: в форме пользователь может добавлять/удалять/редактировать записи, при этом внизу формы в текстовом поле выводится их сумма. Это текстовое поле обновляется в динамическом режиме через события формы Current, AfterUpdate и т. п. Для вычисления суммы используется цикл по объекту типа DAO.Recordset. ... а чё так ? почему не простой =sum() в примечании формы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 12:27 |
|
Access 2007 - объект RecordSet - проверка статуса записи
|
|||
---|---|---|---|
#18+
Код: vbnet 1.
Ну раз так хотите, невоспользовавшись советом 112, то справок по Refresh, Requery полно... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 12:32 |
|
Access 2007 - объект RecordSet - проверка статуса записи
|
|||
---|---|---|---|
#18+
Ukraina Код: vbnet 1.
Ну раз так хотите, невоспользовавшись советом 112, то справок по Refresh, Requery полно... не учи человека плохому :)) у ТС проблема НЕ с синхронизацией просто удаление НЕ зафиксированно - и он "видит" - то что есть на самом деле, а хочет "видеть" - то что будет ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 12:38 |
|
Access 2007 - объект RecordSet - проверка статуса записи
|
|||
---|---|---|---|
#18+
qwerty112Ukraina Код: vbnet 1.
Ну раз так хотите, невоспользовавшись советом 112, то справок по Refresh, Requery полно... не учи человека плохому :)) у ТС проблема НЕ с синхронизацией просто удаление НЕ зафиксированно - и он "видит" - то что есть на самом деле, а хочет "видеть" - то что будет Да я чё? Я ни чё... Заметил тенденцию... Простые вопросы пытаются решить такими оборотами, что и изобретателю ВБА не снились, а навороченные проблемы стремятся разрешить простыми арифметическими операциями (даже без деления), и при этом возмущаются: ах какой плохой ВБА, акцесс и все тут на этом форуме вместе взятые... (Автор, это не стёб, это так междусабойчик) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 12:48 |
|
Access 2007 - объект RecordSet - проверка статуса записи
|
|||
---|---|---|---|
#18+
uuxВ процессе работы выяснилось, что при удалении записи в форме (через событие Delete) из объекта Recordset она не удаляется. Т.е. перерасчет суммы выполняется на событии Delete? Конечно в этот момент запись еще сужествует. Надо использовать AfterDeleteConfirm, причем только при статусе acDeleteOK. А зачем это делать на Current? "цикл по объекту типа DAO.Recordset", это по RecordsetClone формы? И все же, "qwerty112 - почему не простой =sum() в примечании формы ?" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 14:07 |
|
Access 2007 - объект RecordSet - проверка статуса записи
|
|||
---|---|---|---|
#18+
Всё, разобрался. Ниже опишу, в чем была проблема. почти всеИ все же, "qwerty112 - почему не простой =sum() в примечании формы ?" Ну, как сказать... Простой sum() у меня сходу не заработал, и я, вместо того, чтобы разбираться, сделал всё теми средствами, какими мне удобнее. Наверно, это мозги такие кривые. Я и в Excel для всяких подсчетов обычно предпочитаю не формулки в ячейках прописывать, а сразу забацывать макрос. Анатолий ( Киев ) Т.е. перерасчет суммы выполняется на событии Delete? Конечно в этот момент запись еще сужествует. Надо использовать AfterDeleteConfirm, причем только при статусе acDeleteOK. Пробовал. У меня отключено подтверждение удаления записи (и включать его не планирую - неудобно работать), возможно, поэтому результат был отрицательный. Анатолий ( Киев ) А зачем это делать на Current? Просто на всякий случай. Работу программы это не тормозит в сколь-либо заметной степени, а ее автору (т. е. мне) спокойнее. Анатолий ( Киев ) "цикл по объекту типа DAO.Recordset", это по RecordsetClone формы? Вот тут-то собака и порылась. Про существование RecordsetClone я не знал, и сделал следующее: сотворил SQL-запрос, дублирующий источник данных для формы, и открывал его через OpenRecordset при обработке событий. Тут-то и обнаружилось, что при добавлении записи и смене количества всё суммируется корректно, а вот свежеудаленную запись запрос продолжает видеть. Далее ход моих мыслей был такой: я приостановил выполнение программы и открыл оригинальный запрос-источник данных для формы. Обнаружилось, что там всё отображается правильно. Попытался открыть его напрямую из VBA через OpenRecordset - получил ошибку исполнения. Потом посмотрел форум, увидел про RecordsetClone, переделал код под этот метод - всё заработало, как часы. Ukrainaи при этом возмущаются: ах какой плохой ВБА, акцесс и все тут на этом форуме вместе взятые... Ни в коем случае! VBA - чудесный язык, а уж как мне замечательно (и оперативно) помогли на этом форуме - просто слов нет. Всем огромное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 16:17 |
|
|
start [/forum/new_topic.php?fid=42]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 10652ms |
total: | 10815ms |
0 / 0 |