Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
ВнизDisableControl-EnableControl Найти похожие ветки
← →
fedor (2005-09-03 17:20) [0]Господа, подскажите пожалуйста, почему всетаки DisableControl-EnableControl так искажает результат пересчета суммы записей в таблице, если между отключением и включением контроля вставить перебор First-Next?
← →
Anatoly Podgoretsky © (2005-09-03 17:23) [1]Не потдверждается, значит у тебя что то накручено в обработчиках.
← →
Prohodil Mimo © (2005-09-03 18:57) [2]DisableControl-EnableControl tol"ko na skorost" podschota vlijajet
← →
Ильш © (2005-09-05 06:16) [3]как считаешь то сумму записей?
и что это за зверь "сумма записей"? может ты хотел сказать "количество записей"?
← →
fedor (2005-09-06 18:42) [4]Да все вроде просто:
i:=0
with table1 do
begin
First;
while not EOF do
begin
i:=i+table1["field1"];
Next;
end;
end;
Так вот если отключаю контроль, сумма разза в три становится больше
← →
Ильш © (2005-09-07 06:09) [5]а вот этот код где живет? в какой процедуре?
← →
fedor (2005-09-07 13:38) [6]Процедура созданная мной. Разве это должно влиять?
← →
Ильш © (2005-09-07 13:46) [7]
> значит у тебя что то накручено в обработчиках
вот по этому поводу !!!
ты уж выкладывай все ежели хошь помощи
пока нифига непонятно
← →
fedor (2005-09-08 03:26) [8]Ближе к реальности: table1-master, table2-detal
i:=0;
table1.DisableControl;
with table1 do
begin
table1.First;
while not table1.EOF do
begin
with table2 do
begin
table2.First;
while not table2.EOF do begin
i:=i+table2["field2"];
table2.Next;
end;
end;
table1.Next;
end;
end;
table1.EnableControl;
По всей видимости при отключении контроля теряется связь мастер-деталь, потомучто судя по результату переход позаписям table1 происходит, в вот переход по записям table2 только в пределах тех записей, что относятся к первой записи из table1. Как бы этого избежать?
← →
Ильш © (2005-09-08 06:13) [9]может не отключать контроль?
← →
fedor (2005-09-08 06:19) [10]Слишком медленно идет пересчет (особенно на CtrlGrid) просто жопа. Естественно можно через SQL, но че-то разобраться охота, почему же так
← →
Ильш © (2005-09-08 09:20) [11]
> но че-то разобраться охота
не вижу смысла!!!
SQL в зубы и вперед...
ИМХО: table та еще какашка :((((
← →
RUYurik © (2005-09-08 09:36) [12]
> SQL в зубы и вперед...
> ИМХО: table та еще какашка :((((
правильно, с запросами вообще не нужно возиться :)
а насчет table - отключи еще и table2, должно сработать
← →
Nikolay M. © (2005-09-08 10:07) [13]Как насчет чтения справки?
procedure DisableControls;
Description
If controls are not already disabled, DisableControls records the current state of the dataset, broadcasts the state change to all associated data-aware controls and detail datasets, and increments the dataset’s disabled count variable. Otherwise, DisableControls just increments the disabled count variable.
The disabled count is used internally to determine whether to display data in data-aware controls. When the disable count variable is greater than zero, data is not updated.
If the dataset is the master of a master/detail relationship, calling DisableControls also disables the master/detail relationship. Setting BlockReadSize instead of calling DisableControls updates the detail datasets as you scroll through the dataset, but does not update data-aware controls.
← →
Nikolay M. © (2005-09-08 10:20) [14]
> fedor (08.09.05 03:26) [8]
Кстати, что такое table1.EnableControl и на кой черт в указанном коде нужныwith
-ы?
← →
RUYurik © (2005-09-08 10:47) [15]
> Nikolay M. ©
сорри...не посмотрел...не пользуюсь Table )))
> fedor (08.09.05 06:19) [10]
да уж...почему просто не воспользоваться стандартным Query
select count(<Dataset1.поле связи>)
from Dataset1
where Dataset1.<поле связи> = Dataset2.<поле связи>
← →
аматор © (2005-09-08 22:47) [16]Привет.
если работаем с двумя таблицами то почему отключаем одну...
← →
fedor (2005-09-09 00:00) [17]Да и две пробовал. Бесполезно. Вот если отключить только деталь, оно как-то побыстрее и все правильно, но скорость совсем не то.
← →
аматор © (2005-09-09 08:21) [18]если я правильно понял, подбивается итого второй таблицы, то зачем трогать первую...
← →
Nikolay M. © (2005-09-09 10:22) [19]
> fedor (09.09.05 00:00) [17]
> Да и две пробовал. Бесполезно
Если ты не читаешь ответы на свой вопрос, зачем вообще что-то спрашивать?
← →
fedor (2005-09-11 20:23) [20]
> Nikolay M
Извини, занят был. table1.EnableControl для того чтобы после окончания операции стала доступна навигация по гриду. А что with чемто мешает?
> аматор © (09.09.05 08:21) [18]
> если я правильно понял, подбивается итого второй таблицы,
> то зачем трогать первую...
Вот это логично. Но дело в том что в момент пересчета записи отобраны по определенному условию и разрывать таблицы не желательно
← →
Nikolay M. © (2005-09-11 20:42) [21]
> Извини, занят был. table1.EnableControl для того чтобы после
> окончания операции стала доступна навигация по гриду. А
> что with чемто мешает?
Епт...блин.
1) У TTable нет метода EnableControl.
2) Мешает человеческому воприятию кода.
3) Правильный ответ тебе был дан еще в [13]. (специально выделил).
← →
fedor (2005-09-11 20:57) [22]С чего ты взял, что это TTable? Я просто назвал их так table1 и table2. Это IBDataSet"ы
← →
Nikolay M. © (2005-09-11 21:41) [23]
> fedor (11.09.05 20:57) [22]
Это что-то меняет?
Тем более, что у IBDataSet тоже нет такого метода.
← →
аматор © (2005-09-12 00:10) [24]Пардон fedor, если Вы используете IBDataSet то зачем мастер - деталь (запросами краше... и быстрее (а с мидасс вообще красота (тока память хавать у клиента будет больше))). Может я плохо понял о чём беседа... Тогда ссссори...
Да можна сказать: нужно отобразить две таблицы одновременно, но кто сказал, что пользователю проще будет работать именно с 2...3 таблицами (может ему краше кнопочку нажать - для просмотра вложеных данных, и пересчет нужных будет с нормальной скоростью).
Ещё раз повторю, можен я плохо понял о чём беседа...
← →
fedor (2005-09-12 17:11) [25]> Nikolay M.
Почему же нет? Все это очень даже работает с одной таблицей(без мастер-деталь). К тому же как вернуть управление?
← →
fedor (2005-09-12 17:12) [26]>аматор
По поводу запоросов, полностью согласен. Просто разобраться хотелось
← →
Prohodil Mimo © (2005-09-12 17:19) [27]fedor (12.09.05 17:11) [25]
как вернуть управление
zastrelicca
← →
Nikolay M. © (2005-09-12 17:45) [28]
> Prohodil Mimo © (12.09.05 17:19) [27]
> zastrelicca
Согласен :)
> fedor (12.09.05 17:11) [25]
> как вернуть управление
Тебе черным жирным италиком по белому было сказано: либо не делать DisableControls, убивая тем самым мастер-детейл связку, либо делать по-человечески.
← →
аматор © (2005-09-12 20:55) [29]И вообще, если я правильно помню, то в IB всё основано на запросах, даже компонент табл. А Ваш вопрос fedor, ради интереса попробуйте в локальных движках, и кажись, если логически расмотреть даную ситуацию, то мастер-детале записи фильтруются согласно связи, получается, что при выборе записи в главной таблице записи в подчиненке фильтруются, отсюда и скорость огромная... (и если пойти далее, то можна создать алгоритм, но:
1. В серверном варианте смешно работать с таблицами;
2. Время расходываться будет больше, чем при запросах (доказано многими примерами);)
Далее будет 3...100 и т.д.
Кажись вывод такой, для Вашего подсчёта пользуйтесь запросами,
а Ваш вариант подсчёта краше использовать в локалках (отключить связь в таблицах, закрыть прорисовку компонентов: DisableControls и EnableControl, а после подсчета возобновить всё, но хлопотно это)...
← →
RUYurik © (2005-09-13 06:30) [30]
> Nikolay M. © (11.09.05 21:41) [23]
>
>
> > fedor (11.09.05 20:57) [22]
>
> Это что-то меняет?
> Тем более, что у IBDataSet тоже нет такого метода.
Такие методы есть у всех стандартных датасетов (EnableControls, DisableControls)
>fedor (12.09.05 17:12) [26]
> >аматор
>По поводу запоросов, полностью согласен. Просто разобраться >хотелось
А тебе нужно было решение а не курсы по ликбезу, как поступить в твоем случае - тебе предложили использовать запросы, что работает намного быстрее
← →
Nikolay M. © (2005-09-13 10:34) [31]
> RUYurik © (13.09.05 06:30) [30]
> > Тем более, что у IBDataSet тоже нет такого метода.
>
> Такие методы есть у всех стандартных датасетов (EnableControls,
> DisableControls)
А я что-то говорил про EnableControls?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.039 c