Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.045 c
15-1138874093
syte_ser78
2006-02-02 12:54
2006.02.26
web дизайн


2-1139680272
Rust007
2006-02-11 20:51
2006.02.26
Нажатие кнопок в WebBrowsere


2-1139148471
Вячеслав Бессонов
2006-02-05 17:07
2006.02.26
TMemo


2-1139417312
kilonet
2006-02-08 19:48
2006.02.26
TObjectList. Чтение и запись


2-1139245393
pupapumQ
2006-02-06 20:03
2006.02.26
Массив записей