Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как актуализировать высчитываемое поле 
:(
    Опции темы
Neuling
Дата 28.6.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Есть два формуляра: главный - frm1 и подчинённый 1:n - frm2. Как сделать так, чтобы при любом изменении значений одного из полей frm2, происходила автоматическая запись суммы всех значений данного поля из формуляра frm2 в одно из полей frm1. Сумма должна не просто отображаться, а именно переписываться сразу же после изменения любого значения или добавления нового. В общем случае это может быть не только сумма, но и любая другая формула. Очевидно, что данная операция д.б. широко востребована, но мне почему-то не удалось отыскать способа её реализации. Стоит Access 97. 
PM MAIL   Вверх
Neuling
Дата 22.7.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Никто не знает ответа? Или я не чётко сформулировал вопрос?
Тогда ещё одна попытка. Насколько я понимаю, Access запоминает введённые данные только при переходе к новой записи. А это означает, что для того, чтобы использовать эти вновь введённые данные для рассчёта и записи значения в какоге-либо другое поле, необходимо сначала перейти к какой-нибудь другой записи, затем вернуться назад и только после этого произвести расчёт. Мой вопрос заключается в том, можно ли обойтись без таких трюков и производить данную операцию сразу после ввода или изменения значения какого-либо поля.
Ответьте хоть кто-нибудь, а то программирование искусственного интеллекта застопорилось:-) 
PM MAIL   Вверх
dionisiu
Дата 5.9.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



каждая форма имеет рекордсет, который может быть представлен просто таблицей либо запросом на выборку/объединение, причём иногда с параметрами/условиями/сортировкой. подчинение форм происходит по одному/нескольким полям или может отсутствовать.

В твоём случае наблюдается необходимость связывание рекордсетов двух форм (главной и подчинённой) по таблице, причём обе формы должны сслылаться на одну таблицу (в подчинённой таблице рекордсет - запрос).
Для раскрытия темы выложи в форум больше инфы именно о рекордсетах форм и инициирующих таблах, можно воспользоваться возможностью прикрепления файла, куда закинуть таблы и формы (сожми любым удобным архиватором - размер ограничен)
PM MAIL ICQ   Вверх
Akina
Дата 5.9.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Насколько я понимаю, поле главной формы не привязано к рекордсету-источнику данных этой формы - иначе теряется смысл действа.

А коли так - нужно просто обработать событие Change поля подчиненной формы и обновить содержимое нужного поля главной формы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Neuling
Дата 5.9.2006, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Чтобы было более понятно, я вот сделал маленький примерчик . Требуется, чтобы сразу после любых изменений или новых записей поля "Prihod", высчитывалась сумма их значений и записывалась в соответствующее поле "Summa" (разумеется, для каждого ID отдельно). Как это можно сделать?
PM MAIL   Вверх
Akina
Дата 5.9.2006, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Neuling
Теперь вопрос понятен.

Настоятельная рекомендация - немедленно отказаться от подобного подхода. Рекомендую воспользоваться поиском и понять что такое нормализация баз данных. Переопределенные данные - потенциальный источник разрушения логической целостности данных. 

Применительно к примеру - таблица сумм не должна существовать вообще, а сумма по категориям должна считаться именно в тот момент, когда она нужна - динамическим либо статическим запросом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Neuling
Дата 6.9.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Спасибо, Akina.
Мне не нравится то, что высчитываемые поля, особенно если их много или формулы достаточно сложны,- появляются со значительной задержкой и создают впечатление тормознутости программы. Для контроля целостности данных достаточно сделать индикатор, появляющийся в случае, если по какой-то причине сумма, например окажется не равной составляющим слагаемым.
PM MAIL   Вверх
Akina
Дата 6.9.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Neuling @  6.9.2006,  11:26 Найти цитируемый пост)
высчитываемые поля, особенно если их много или формулы достаточно сложны,- появляются со значительной задержкой 

??? у тебя каков объем данных? сотни тысяч записей? миллионы? потому что если это наблюдается на 10 тыс. записей - явно где-то косяк. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Neuling
Дата 6.9.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Это заметно даже если запись всего одна. Всегда можно отличить высчитываемое поля от поля с постоянным значением, поскольку всегда заметна небольшая задержка. Если таких полей достаточно много и формулы достаточно сложны, то задержка явно бросается в глаза. В случае табличных форм, когда производится расчёт сразу для множества записей, задержка становится ещё более заметной. Разумеется многое зависит и от мощности самого компьютера, но в этом случае я ориентируюсь на худший вариант. Всегда наблюдал такие эффекты на самых разных программах и думаю "косяки" здесь ни при чём. В качестве примера задержки,- я реализовывал функцию, когда по адресу клиента или его телефонному коду должны высчитываться и отображаться расстояния до десяти фиксированных аэропортов. В исходной таблице с координатами населённых пунктов и с их телефонными кодами около 16000 записей и задержка при отображении расстояний составляет от 1 до 2 сек в зависимости от мощности компьютера.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0796 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.