Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизAfterPost Найти похожие ветки
← →
Fynjy1984 © (2006-02-07 08:36) [0]Не знаю к чему отнести этот вопрос к датасету или DBGridEh. Вобщем после изменения данных выполняются расчеты, я засунул их в обработчик AfterPost. Но при копировании в Grid обработчик запускается после изменения каждой записи (логично). Как мне отловить начало копирования, отключить обработчик, дождаться окончания, включить обработчик.
← →
DUDAS © (2006-02-07 09:28) [1]Может лучше было бы начать рассчеты по какому-то другому событию?
← →
Sergey13 © (2006-02-07 09:32) [2]Что за расчеты? Может калк-поле? Или по кнопке запустить?
← →
msguns © (2006-02-07 09:32) [3]>Вобщем после изменения данных выполняются расчеты
?
Отдели мух (отображение данных) от котлет (хранение данных) и проблема, думаю, исчезнет
← →
Fynjy1984 © (2006-02-07 09:37) [4]
> Может лучше было бы начать рассчеты по какому-то другому
> событию?
Я всеми руками за. По какому?
Таблицу можно отредактировать вручную (поменять одно значение), тогда все отлично. Но когда в таблицу вставляется из буфера несколько записей то перерасчет происходит после добавления каждой, а надо после добавления последней.
Конечно можно кинуть кнопку "Обновить" и производить расчет после ее нажатия, но хотелось что нибудь по культурнее.
← →
Sergey13 © (2006-02-07 09:42) [5]2[4] Fynjy1984 © (07.02.06 09:37)
> Но когда в таблицу вставляется из буфера несколько записей то перерасчет происходит после добавления каждой, а надо после добавления последней.
Сделай задержку по таймеру на полсекунды (или около того).
← →
Fynjy1984 © (2006-02-07 09:55) [6]
> Сделай задержку по таймеру на полсекунды (или около того).
Спасибо попробую.
← →
evvcom © (2006-02-07 09:55) [7]Из буфера кто вставляет эти записи? Если в коде цикл, то перед циклом отключи, после включи. Если пользователь вставляет, то каким-то образом ты же, наверное, отлавливаешь момент, когда юзер коммитит свои действия. Вот тебе и нужный момент.
← →
msguns © (2006-02-07 10:01) [8]>Sergey13 © (07.02.06 09:42) [5]
>Сделай задержку по таймеру на полсекунды (или около того).
Не советуй дурни.
← →
ZeroDivide © (2006-02-07 10:02) [9]то перерасчет происходит после добавления каждой, а надо после добавления последней
Как узнать какая из "каждой" окажется "последней"?
когда в таблицу вставляется из буфера несколько записей
Вот сразу после этого и делай свои расчеты. В чем проблема?
← →
Fynjy1984 © (2006-02-07 10:03) [10]
> evvcom © (07.02.06 09:55) [7]
Данные вставляются юзером, отвечает за это DBGridEh. Т.е. моего кода там нет. Вот я и думал может кто знает как отловить начало и конец копирования.
← →
DUDAS © (2006-02-07 10:06) [11]Если вставка из буфера происходит по нажатию клавиш Ctrl + V:
можно ввести глобальную переменую и на событие DBGridEh1KeyDown
переводить ее в False, а на событие DBGridEh1KeyUp в True. А в AfterPost ее проверять.
← →
Sergey13 © (2006-02-07 10:06) [12]2[8] msguns © (07.02.06 10:01)
>Не советуй дурни.
Чего хочу - того и советую. Не ндравится - посоветуй умни. 8-)
← →
evvcom © (2006-02-07 10:31) [13]
> Fynjy1984 © (07.02.06 10:03) [10]
Хорошо. Теперь каков признак того, что уже пора пересчитывать? Кто или что этот момент определяет? Если пользователь сразу должен видеть результат пересчета, то все уже и так правильно. Если же только после того, как он сам решил, что пора, то делается кнопка, по которой данные сохраняются и соответственно наступает момент пересчета.
← →
Fynjy1984 © (2006-02-07 10:34) [14]
> DUDAS © (07.02.06 10:06) [11]
> Если вставка из буфера происходит по нажатию клавиш Ctrl
> + V:
> можно ввести глобальную переменую и на событие DBGridEh1KeyDown
> переводить ее в False, а на событие DBGridEh1KeyUp в True.
> А в AfterPost ее проверять.
Попробовал: то что надо! Осталось чуток доработать (Shift+Ins)
← →
DUDAS © (2006-02-07 10:39) [15]Ок! Удачи...
← →
msguns © (2006-02-07 11:57) [16]Операция проистекает дальше. Хирург чего-то у кого-то отрезал, телефонные консультанты умнО покивали головами.
Что отрезал, у кого - несущественно
;)
← →
msguns © (2006-02-07 12:12) [17]Не поленюсь и поясню [16] чтоб не обвинили в неуважении, пренебрежении, оскорблении и т.д.
Все же следует четко понимать следующие вещи:
1. То, что отображается "на клиенте" далеко не всегда соответствует тому, что в базе (на "сервере")
2. Множественные изменения в БД, составляющие единое логическое целое, должны выполняться полностью или не выполняться вообще. Для этого служат транзакции либо специальный аппарат, состоящий из генрераторов (последовательностей, автоикрементов и т.д.), триггеров, хранимых процедур и функций, в совокупности составляющих бизнес-логику БД. Часто большинство сложных операций по преобразованию и пересчету данных в БД выносят именно в бизнес-логику, "облегчая" "клиента" и отделяя хранение данных от их отображения. Таким образом обеспечивается высокая степень независимости клиентских приложений работы с данными БД от собственно данных БД.
3. Для того, чтобы можно было квалифицированно посоветовать, надо как миниму ясно объяснить суть задачи и снять покров тайны с типа БД и компонентов доступа. В противном случае любая помощь в большинстве случаев уподобляется консультации оперирующего хирурга по телефону.
ЗЫ. События датасета (BeforeXXX, AfterXXX) служат для вспомогательных целей исключительно на клиенте, поэтому использовать их надо с большой осторожностью дабы не поставить впросак пользователя.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.049 c