Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
6-1124059770
Delphi_is_cool
2005-08-15 02:49
2006.02.26
winsock - авторизация


1-1138122133
integeri
2006-01-24 20:02
2006.02.26
робота со шрифтом


15-1139231593
Три корочки
2006-02-06 16:13
2006.02.26
На чем пишет Microsoft?


1-1138173919
sally
2006-01-25 10:25
2006.02.26
Доступ к свойствам интерфейса через RTTI


15-1138741427
Michael5
2006-02-01 00:03
2006.02.26
Решил сделать сервер. Мне подарили материнку. Посмотрел: 486!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский