![]() |
|
![]() ![]() ![]() |
|
Delphist |
|
||||||||||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Возникла довольно неприятная ситуации, сейчас на простом примере постораюсь объяснить:
Есть грид-DBGridEh, с 3-мя колонками: одна из них связана с полем fkData компонента FIBDataSet, а две других с полями fkCalculated этого же датасета.
В обработчике FIBDataSet.OnCalcFields весит код который для каждой записи колонки №2 и №3 делает расчет типа:
Возник большой вопрос какой должен быть код в GetSumFirstField, варианты которые я делал (для упрощения объема кода будут приведены прототипы): Способ 1:
Способ 2:
Способ 3:
Подскажите, пожалуйста, какой должен быть кода в GetSumFirstField, чтобы он всегда возвращал правильно сумму? Это сообщение отредактировал(а) Delphist - 12.9.2008, 10:41 -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
||||||||||
|
|||||||||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Большая просьба помочь с ответом
-------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
работате медленно потому что запрос для каждой записи выполняется, ты его выполняй перед расчетом полей и ложи результат в переменную и при расчете полей использкуй переменную а не вызов функций Это сообщение отредактировал(а) Frees - 15.9.2008, 09:51 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
Frees |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
а в чем проявляется не корректная раббота? может так будет работать лучше
Это сообщение отредактировал(а) Frees - 15.9.2008, 10:59 -------------------- Кольцов Виктор Владимирович |
||||
|
|||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Не очень хороший подход мне, кажется. На мой взгляд, не всегда, удастся определить именно цикл расчета для всех записей. Т.е., конечно, мы можем написать в процедуре типа BeforeFieldsCalc определение суммы, но и этот же BeforeFieldsCalc будет вызываться для каждой записи, а вот как определить, то место или процедуру которая бы вызывалась бы до расчета всех полей. Вот в это проблемно. -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Delphist |
|
||||||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
К сожалению, на сегодняшний день мне приходиться пользоваться компонентами FIBs, это не много урезанный вариант FIBPlus. В них нет RefreshClientFields(), DisableCalcFields, EnableCalcFields. Вот это:
в принцепе их можно реализовать, на скок я понимаю, через
RefreshClientFields() - не знаю что делает ![]() И опять же у меня берет сомнение, что AfterPost, будет всегда срабатывать после AfterOpen ![]() Это сообщение отредактировал(а) Delphist - 16.9.2008, 10:09 -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
||||||
|
|||||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
пересчет вычисляемых полей запускается -------------------- Кольцов Виктор Владимирович |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
угу уже понял, посмотри, пожалуйста, еще раз мой последний ответ, в особеннности последнее предложение Это сообщение отредактировал(а) Delphist - 16.9.2008, 10:45 -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
точно будет сперва AfterOpen на закрытом дата сете же пост не сделать -------------------- Кольцов Виктор Владимирович |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
не совсем тебя понял. ты согласился с моими выводом или наоборот утверждаешь, что AfterPost будет всегда после AfterOpen'a? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
AfterPost будет всегда после AfterOpen'a
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Ток что проверил, и делаю вывод AfterPost НЕ вызывается после AfterOpen и это правильно как по сути так и по логике. Это сообщение отредактировал(а) Delphist - 16.9.2008, 13:06 -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
AfterPost будет происходить если ты будеш делать post но до этого уже отработается AfterOpen отработать AfterPost нужно что бы если ты вносиш изменения перещитались все поля без переоткрытия -------------------- Кольцов Виктор Владимирович |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Ты предлагаешь искусствено вызывать Post после AfterOpen? Опять же Post можно вызывать ток в том случае если DataSet.State in [dsEdit, dsInsert] а иначе генириться исключение. -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
ты меня не понял в AfterPost можно ничего не писать и все будет работать только до того момента пока ты не начнеш редактировать первое поле, а что бы учесть его редактирование на AfterPost и делаем перещет полей -------------------- Кольцов Виктор Владимирович |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |