Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.044 c
6-1118241099
twin
2005-06-08 18:31
2005.10.23
Заполнение HTML форм из Delphi


14-1128003502
mr.il
2005-09-29 18:18
2005.10.23
D7 глючит после апдейта


5-1104156102
Meson
2004-12-27 17:01
2005.10.23
Tools API, написание эксперта


2-1127813315
ABS
2005-09-27 13:28
2005.10.23
ADO


14-1127983580
ocean
2005-09-29 12:46
2005.10.23
Честность и доброта не нужны





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский