|
|
|
Поле-сумма в основной форме по подформе...
|
|||
|---|---|---|---|
|
#18+
Вступление будет немного длинным. Проект adp (Access 2000), данные на SQL-сервере. 1. Есть простая форма (т.е. показывается одна запись). Реально это путевые листы. 2. Подформа в виде таблицы . В основной форме есть поле "ПробегСум". В подформе есть столбик "Пробег" (т.е. каждая строка подформы описывает маршрут). Хочу сделать так, чтобы при изменении поля "Пробег" в подформе сума по столбикам этой подформы записывалась в поле осн. формы "ПробегСум". Т.е. суммарный пробег хранить сразу в базе. Пробовал два варинта: 1. В примечании подформы создал поле, назовем его [Пробег_сум], свойство "Данные" (ControlSource) для него установил Код: plaintext Код: plaintext 2. Тогда попробовал второй вариант. Для события AfterUpdate для подформы повесил процедуру, которая просто обращается к базе и пересчитывает сумму по маршрутам для данного листа: Код: plaintext 1. 2. 3. 4. 5. Программка делается для себя, и вот надолго на такой мелочи застрял :-(. Как это можно решить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2004, 17:09:31 |
|
||
|
Поле-сумма в основной форме по подформе...
|
|||
|---|---|---|---|
|
#18+
Можешь в подчиненной форме сделать события AfterUpdate и Delete и в них обратившись к форме - родителю через Me.Parent записать, например Dim rst AS Recordset Dim curSum As Currency curSum = 0 Set rst = Me.RecordSetClone With rst Do Until .EOF curSum = curSum + NZ(!Сумма) .MoveNext Loop .Close Set rst = Nothing End With Me.Parent!Сумма = curSum ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2004, 18:50:04 |
|
||
|
Поле-сумма в основной форме по подформе...
|
|||
|---|---|---|---|
|
#18+
2 Quick_Yak После удаления записи в подформе все равно клон этой подформы содержит удаленную запись (т.е. на экране записи уже нет, а в клоне и в базе она еще существует при запуске события Delete), поэтому сумма снова получается неправильной. Только что проверил. Или я чего не понимаю :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2004, 19:13:21 |
|
||
|
Поле-сумма в основной форме по подформе...
|
|||
|---|---|---|---|
|
#18+
Возможно, что у тебя стоит подтверждение удаления записей, тогда либо 1) отключи его (Сервис - Параметры - Правка/Поиск - Подтверждение: флажок Удаление документов) 2) либо поставь в событие Private Sub Form_AfterDelConfirm P.S. Если не получится пиши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2004, 23:53:19 |
|
||
|
Поле-сумма в основной форме по подформе...
|
|||
|---|---|---|---|
|
#18+
Позволю себе слегка подредактировать код от Quick_Yak... :) Как ни странно, но сумму лучше всего высчитывать по событию Form_Current у подчинённой, т.к. это событие происходит после редактирования, после удаления и после вставки, причём RecordSetClone имеет "правильный" набор записей и свойство Dirty = False. Но что бы не высчитывать сумму без необходимости, например при простом переходе с записи на запись, надо создать флаг IsMileageCalculated Код в подчинённой форме Код: plaintext 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. 60. 61. Единственная ситуация когда Form_Current у подчинённой не срабатывает и, соответственно, не вычисляет сумму для основной, это когда пользователь начал редактировать подчинённую запись и не сходя с нее жмёт на кнопку перехода на другую запись у основной формы. Вернее Form_Current у подчинённой срабатывает, но уже для другой основной записи, и получается что сумма осталась не обновлённой. Выход: начать редактировать основную форму по событию Form_Dirty у подчинённой (см. выше строку Me.Parent!tboMileage = Me.Parent!tboMileage), чтобы запустить код на событие BeforeUpdate у главной формы. Код в главной форме: Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext Сие есть плод двухдневных экспериментов. Может кто лучше придумал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2004, 01:49:44 |
|
||
|
Поле-сумма в основной форме по подформе...
|
|||
|---|---|---|---|
|
#18+
2 Quick_Yak авторВозможно, что у тебя стоит подтверждение удаления записей, тогда либо 1) отключи его (Сервис - Параметры - Правка/Поиск - Подтверждение: флажок Удаление документов) Забрал этот флажок. Подтверждения при удалении не просит. Но результат с сумой тот же самый, а именно: неправильный. автор2) либо поставь в событие Private Sub Form_AfterDelConfirm Ничего не изменилось (флажок, который снял в предыдущем пункте, я поставил назад). Хотя вот это многообещающе: For example, you can use a macro or event procedure associated with the AfterDelConfirm event to recalculate totals affected by the deletion of records. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 11:18:01 |
|
||
|
Поле-сумма в основной форме по подформе...
|
|||
|---|---|---|---|
|
#18+
по поводу удаления записей в adp деййствительно в событии "после удаления" запись на сервере еще есть. лови реальное удаление на событие "текущая запись" но там тоже есть минус: если удалить сразу все записи, то соьытие "текущая запись" уже не возникает. так что имей ввиду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 12:25:02 |
|
||
|
Поле-сумма в основной форме по подформе...
|
|||
|---|---|---|---|
|
#18+
2 lobodava Большое спасибо. Вроде все работает. При удалении всех строк в подформе тоже все работает. В подформу только добавил Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 12:38:06 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32609384&tid=1673116]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 347ms |

| 0 / 0 |
