|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
Всем доброго времени суток! Есть ли для форм способ перехвата события изменения записи, если более корректно, то событие "после_изменения_значения_любого_поля" :-) Допустим, источником данных формы рекордсет с полным доступом к данным из какой-нибудь таблицы. Я когда-то придумал туповатый способ: создаем самопальную процедурку типа: Код: vbnet 1. 2. 3.
Ну, и в событии Dirty каждого поля просто вызываем эту процедуру. Очень тупо, особенно, при большом количестве полей. Но, может, есть какой-то более рациональный способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 14:58 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
Beliar, Чем не устраивает стандартное событие "До обновления" формы? Например, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 15:16 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
POKEPЧем не устраивает стандартное событие "До обновления" формы? Это событие срабатывает один раз перед апдейтом всей записи, а ТС, насколько я понимаю, нужно фиксировать все изменения в полях до того, как они полетят в базу. Если это так, то такого события нет, нужно перехватывать события от каждого контрола. Кстати, можно не прописывать код для каждого контрола, а вызывать процедуру, указав ее непосредственно в свойстве события: Код: vbnet 1.
Просто выделяем все нужные контролы и прописываем этот код в свойство On Dirty Только это должна быть Function, не Sub. И еще, думаю, лучше брать не On Dirty, а After Update, но это нужно смотреть, что в конечном итоге требуется, есть нюансы в срабатывании. Dirty срабатывает после первого же изменения, а After Update - при выходе из поля и может вообще не сработать, если пользователь отменил изменения, нажав на ESC ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 16:23 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
POKEP, BeforUpdate срабатывает только кода уходишь с записи. Не то пальто, нужно при изменении значения любого из полей записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 16:25 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
Данные пусть "летят в базу", главное, чтобы срабатывала процедура обработки (код из recordChange), после того как пользователь изменил значение какого-нибудь поля. MrShinЕсли это так, то такого события нет, нужно перехватывать события от каждого контрола. Кстати, можно не прописывать код для каждого контрола, а вызывать процедуру, указав ее непосредственно в свойстве события: Код: vbnet 1.
Просто выделяем все нужные контролы и прописываем этот код в свойство On Dirty Только это должна быть Function, не Sub. Попробовал - весьма приемлемо! Пожалуй, остановлюсь на этом. Спасибо огромное! Хотя идея с событиями именно рекорда, а не контролов или формы, меня не отпускает. Доберусь до литературы и поищу, я помню, что где-то расписывалось по событиям для каждого элемента, может и для записей рекордсета есть. Если найду - поделюсь, вдруг еще вариант найдется. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 17:52 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
Beliar, а чем не нравится implements? создали коллекцию, интерфейсный класс, объект закинули в коллекцию, объявили свойство, прописали его один раз для всех. Здесь есть достойные примеры - по их мотивам. в объявлении модуля Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
хорошо тем что прописываете все в том же классе в котором все и создали (поскольку наследования реализации нет-часто прописывать все переменные по новой может быть утомительно), конечно для одного события кажется кода многовато, но когда одинаковых событий наберется побольше, количество кода практически не увеличится, этот же интерфейсный класс может быть задействован и в других случаях не говоря о том что в случае добавления/удаления новых элементов все изменения проводятся в пару кликов. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 18:10 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
alecko, Слишком громоздко для маленькой задачки. Но стоит запомнить. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2018, 20:59 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
MrShinЕсли это так, то такого события нет, нужно перехватывать события от каждого контрола. Кстати, можно не прописывать код для каждого контрола, а вызывать процедуру, указав ее непосредственно в свойстве события: Код: vbnet 1.
Просто выделяем все нужные контролы и прописываем этот код в свойство On Dirty Только это должна быть Function, не Sub. Вопрос: а как передать этой функции данные этого контрола? в данном случае это поле, нужно значение свойства text этого поля. Скажем, у функции указан стринговый аргумент t1. Как ему присвоить значение этого поля? Вызов функции я прописываю в свойстве "внесены изменения" просто в режиме конструктора формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2018, 08:41 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
Впрочем сам додумался: в свойстве "внесены изменения" вызываю эту свою функцию: Код: vbnet 1.
и все. Работает, проверил. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2018, 08:46 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
BeliarВпрочем сам додумался: в свойстве "внесены изменения" вызываю эту свою функцию: Код: vbnet 1.
и все. Работает, проверил. поправочка: функцию вызывать надо в свойстве "изменения". Если в свойстве "внесены изменения", то считывается значение до изменения, тоже может где-нибудь пригодится. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2018, 08:51 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
Beliarвсе. Работает, проверил. Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2018, 09:55 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
BeliarВпрочем сам додумался: в свойстве "внесены изменения" вызываю эту свою функцию: Код: vbnet 1.
и все. Работает, проверил. Не надо ничего передавать, иначе придется руками редактировать каждое свойство. Просто в функции получайте ссылку на контрол, как посоветовал Панург ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2018, 10:00 |
|
перехват события изменения изменения записи
|
|||
---|---|---|---|
#18+
MrShin, Я сделал проще, без всяких аргументов, просто значение из [имя_контрола].value с проверкой функцией IsNull(), тем более что значения надо брать из нескольких текст- и комбо-боксов. Весьма удобно получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2018, 15:49 |
|
|
start [/forum/topic.php?desktop=1&fid=45&tid=1611484]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 163ms |
0 / 0 |