![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
Neuling |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Есть два формуляра: главный - frm1 и подчинённый 1:n - frm2. Как сделать так, чтобы при любом изменении значений одного из полей frm2, происходила автоматическая запись суммы всех значений данного поля из формуляра frm2 в одно из полей frm1. Сумма должна не просто отображаться, а именно переписываться сразу же после изменения любого значения или добавления нового. В общем случае это может быть не только сумма, но и любая другая формула. Очевидно, что данная операция д.б. широко востребована, но мне почему-то не удалось отыскать способа её реализации. Стоит Access 97.
|
|||
|
||||
Neuling |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Никто не знает ответа? Или я не чётко сформулировал вопрос?
Тогда ещё одна попытка. Насколько я понимаю, Access запоминает введённые данные только при переходе к новой записи. А это означает, что для того, чтобы использовать эти вновь введённые данные для рассчёта и записи значения в какоге-либо другое поле, необходимо сначала перейти к какой-нибудь другой записи, затем вернуться назад и только после этого произвести расчёт. Мой вопрос заключается в том, можно ли обойтись без таких трюков и производить данную операцию сразу после ввода или изменения значения какого-либо поля. Ответьте хоть кто-нибудь, а то программирование искусственного интеллекта застопорилось:-) |
|||
|
||||
dionisiu |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 13.5.2006 Где: Крым Репутация: 1 Всего: 2 |
каждая форма имеет рекордсет, который может быть представлен просто таблицей либо запросом на выборку/объединение, причём иногда с параметрами/условиями/сортировкой. подчинение форм происходит по одному/нескольким полям или может отсутствовать.
В твоём случае наблюдается необходимость связывание рекордсетов двух форм (главной и подчинённой) по таблице, причём обе формы должны сслылаться на одну таблицу (в подчинённой таблице рекордсет - запрос). Для раскрытия темы выложи в форум больше инфы именно о рекордсетах форм и инициирующих таблах, можно воспользоваться возможностью прикрепления файла, куда закинуть таблы и формы (сожми любым удобным архиватором - размер ограничен) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Насколько я понимаю, поле главной формы не привязано к рекордсету-источнику данных этой формы - иначе теряется смысл действа.
А коли так - нужно просто обработать событие Change поля подчиненной формы и обновить содержимое нужного поля главной формы. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Neuling |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Чтобы было более понятно, я вот сделал маленький примерчик . Требуется, чтобы сразу после любых изменений или новых записей поля "Prihod", высчитывалась сумма их значений и записывалась в соответствующее поле "Summa" (разумеется, для каждого ID отдельно). Как это можно сделать?
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Neuling
Теперь вопрос понятен. Настоятельная рекомендация - немедленно отказаться от подобного подхода. Рекомендую воспользоваться поиском и понять что такое нормализация баз данных. Переопределенные данные - потенциальный источник разрушения логической целостности данных. Применительно к примеру - таблица сумм не должна существовать вообще, а сумма по категориям должна считаться именно в тот момент, когда она нужна - динамическим либо статическим запросом. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Neuling |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Спасибо, Akina.
Мне не нравится то, что высчитываемые поля, особенно если их много или формулы достаточно сложны,- появляются со значительной задержкой и создают впечатление тормознутости программы. Для контроля целостности данных достаточно сделать индикатор, появляющийся в случае, если по какой-то причине сумма, например окажется не равной составляющим слагаемым. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
??? у тебя каков объем данных? сотни тысяч записей? миллионы? потому что если это наблюдается на 10 тыс. записей - явно где-то косяк. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Neuling |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Это заметно даже если запись всего одна. Всегда можно отличить высчитываемое поля от поля с постоянным значением, поскольку всегда заметна небольшая задержка. Если таких полей достаточно много и формулы достаточно сложны, то задержка явно бросается в глаза. В случае табличных форм, когда производится расчёт сразу для множества записей, задержка становится ещё более заметной. Разумеется многое зависит и от мощности самого компьютера, но в этом случае я ориентируюсь на худший вариант. Всегда наблюдал такие эффекты на самых разных программах и думаю "косяки" здесь ни при чём. В качестве примера задержки,- я реализовывал функцию, когда по адресу клиента или его телефонному коду должны высчитываться и отображаться расстояния до десяти фиксированных аэропортов. В исходной таблице с координатами населённых пунктов и с их телефонными кодами около 16000 записей и задержка при отображении расстояний составляет от 1 до 2 сек в зависимости от мощности компьютера.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "MS Access" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS Access | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |