![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выполнение SQL-запроса
anp © (2002-03-07 15:45:00)В процессе работы программы запрос должен выполняться каждый раз когда изменяется DBGrid расчитывая значение переменной и вывдя его в Label. Сделал так:
DBGrid1DrawColumnCell
.....
Query1.Close;
Query1.Open;
Label1.caption := Query1.fieldbyname("COUNT___").text;
Но программа стала заметно притомаживать. По другому сделать не получается. Как переделать чтобы не тормозило?
Ray Adams (2002-03-10 02:06:00) [1]Ну вообщето это делается через Master/Detail. В гриде сидит результ из первого Query. Во втором сидит скажем select sum(field) from table where id = :id. Далее ко второму Query подсоединяется DataSource от первого. Главное чтобы в первом квери было это поле ID. Или любое другое ключевое поле по которому во втором квери считается сумма (или что там надо). И все теперь тебе самому не надо закрывать или открывать второй квери. Двигаешся по гриду и занчение само меняется. Только на форму брось TDBLabel и через DataSource поключи его ко второму квери. Надеюсь что ты понял что я описал.
Johnmen (2002-03-09 02:40:00) [2]Для начала уясни себе, что DBGrid не меняется ! , являясь лишь окном просмотра набора данных...А вот НД может меняеться, и тогда для его обновления надо принимать меры, которые зависят от типа БД и компонентов доступа !
Delirium (2002-03-08 16:09:00) [3]Просто надо поток организовать и поместить туда запрос с рассчётом
anp (2002-03-07 16:01:00) [4]Спасибо, попробую ...
sniknik (2002-03-07 15:57:00) [5]Все одно будет притормаживать при достаточно большом наборе. И зачем пересчитывать все в наборе если меняется одно значение?
Val (2002-03-07 15:52:00) [6]Надо ловить не изменения грида, а изменения набора данных
sniknik (2002-03-07 15:51:00) [7]Вызывать запрос один раз вначале а все изменения расчитывать самому, из общего - то что было + то что стало.