Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ZQuery1AfterScroll работает долго [D7, XP]


lamer6666 ©   (2010-02-15 21:15:00) 

Доброго времени суток уважаемые.
На форме два ZQuery и два DbGridEh.
В первый (ЗАПРОС1)ГРИД загружаю список пользователей, во второй (ЗАПРОС2)ГРИД нужно загрузить список сообщений пользователя (который на данный момент отражен в первом ГРИДе)

Для этих целей использую ZQuery1AfterScroll первого запроса, где выбираю все сообщения в ZQuery2.

Но все очень медленно работает, количество сообщений для каждого пользователя не более двух, но выборка в первый ZQuery1 происходит сравнительно долго.
Прошу помощи, такое впечатление, что для каждой записи ZQuery1 еще при отборе (до отражения в ГРИДе) отбираются и сообщения для каждой выбранной строки в ZQuery1.

Прошу помощи, уважаемые.


lamer6666   (2010-02-17 11:58:00) [1]


> WHERE  table2_table1_id=:table2_table1_id

Спасибо, уважаемый Sergey13, пробую.


Sergey13   (2010-02-17 10:08:00) [2]

> [6] lamer6666 ©   (16.02.10 19:03)
> Так же.

Значит индексов скорее всего нет на table2_table1_id.

> Если не затруднит, можно подробнее?

WHERE  table2_table1_id=:table2_table1_id


lamer6666   (2010-02-16 19:03:00) [3]


> Без подзапроса быстро работает?

Так же.

> Почему бы не заменить запрос на динамический с параметрами?

Если не затруднит, можно подробнее?

Спасибо


Sergey13   (2010-02-16 14:42:00) [4]

> [4] lamer6666 ©   (16.02.10 13:14)
> В ПОДSELECT-е выбираю наименования типа сообщения в место кода.

Запрос в подселекте разумеется секретный? Зачем он вообще? Почему просто не сджоинить справочник с Тable2?
Без подзапроса быстро работает?
Почему бы не заменить запрос на динамический с параметрами?


lamer6666   (2010-02-16 13:14:00) [5]


> с какого перепугу?

просто не владею знаниями в достаточной степени, пробежался по списку событий ZQuery1 и решил что AfterScroll событие наступающее "ПОСЛЕ СМЕНЫ ЗАПИСИ" как раз то что надо (меняется текущая запись в верхнем ГРИДе - меняются сообщения в нижнем ГРИДе соответствующие каждой записи верхнего ГРИДа)


>сравнительно с чем? с миллиардом записей? с десятью?

Ну если не использую свойство AfterScroll, отражение в верхнем ГРИДе происходит моментально.


procedure TForm8.ZQuery1AfterScroll(DataSet: TDataSet);
begin
 ZQuery2.Close;
 if not ZQuery1.IsEmpty then
 begin
 ZQuery2.SQL.Text:=' SELECT * '+
 ' (SELECT ... FROM .... WHERE ... =....  LIMIT 1)msgkindename '+
 ' FROM table2  '+
 ' WHERE  table2_table1_id='+ZQuery1.FieldByName('table1_id').AsString+
 ' ORDER BY table2_date';
 try ZQuery2.Open;
   except ShowMessage('Не удаеться отобразить сообщения!');exit; end;
 end;
end;

В ПОДSELECT-е выбираю наименования типа сообщения в место кода.

СУБД mySQL

Структура:
Таблица1 (table1_id, table1_user)

Таблица2 (table2_id, table2_table1_id, table2_msg, table2_date, table2_msg_type_id)

Таблицы связанны между собой table1<->table1_id<->table2_table1_id<->table2 связью одни ко многим соответственно.


Sergey13   (2010-02-16 10:19:00) [6]

> [0] lamer6666 ©   (15.02.10 21:15)

Как обычно. СУБД, структура БД, тексты запросов и код обработчиков нужно выдирать под пыткой.


Игорь Шевченко   (2010-02-15 23:27:00) [7]


> В первый (ЗАПРОС1)ГРИД загружаю список пользователей, во
> второй (ЗАПРОС2)ГРИД нужно загрузить список сообщений пользователя
> (который на данный момент отражен в первом ГРИДе)


а у ZQuery свойства DataSource нету ? Через которое обычно отношение Master-Detail реализуется


KilkennyCat   (2010-02-15 22:49:00) [8]


> ZQuery1AfterScroll

с какого перепугу?

> сравнительно долго.

сравнительно с чем? с миллиардом записей? с десятью?

> Прошу помощи

продумай алгоритм действий.


Наверх

Титульная страница Поиск, карта сайта Написать письмо