Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизZQuery1AfterScroll работает долго Найти похожие ветки
← →
lamer6666 © (2010-02-15 21:15) [0]Доброго времени суток уважаемые.
На форме два ZQuery и два DbGridEh.
В первый (ЗАПРОС1)ГРИД загружаю список пользователей, во второй (ЗАПРОС2)ГРИД нужно загрузить список сообщений пользователя (который на данный момент отражен в первом ГРИДе)
Для этих целей использую ZQuery1AfterScroll первого запроса, где выбираю все сообщения в ZQuery2.
Но все очень медленно работает, количество сообщений для каждого пользователя не более двух, но выборка в первый ZQuery1 происходит сравнительно долго.
Прошу помощи, такое впечатление, что для каждой записи ZQuery1 еще при отборе (до отражения в ГРИДе) отбираются и сообщения для каждой выбранной строки в ZQuery1.
Прошу помощи, уважаемые.
← →
KilkennyCat © (2010-02-15 22:49) [1]
> ZQuery1AfterScroll
с какого перепугу?
> сравнительно долго.
сравнительно с чем? с миллиардом записей? с десятью?
> Прошу помощи
продумай алгоритм действий.
← →
Игорь Шевченко © (2010-02-15 23:27) [2]
> В первый (ЗАПРОС1)ГРИД загружаю список пользователей, во
> второй (ЗАПРОС2)ГРИД нужно загрузить список сообщений пользователя
> (который на данный момент отражен в первом ГРИДе)
а у ZQuery свойства DataSource нету ? Через которое обычно отношение Master-Detail реализуется
← →
Sergey13 © (2010-02-16 10:19) [3]> [0] lamer6666 © (15.02.10 21:15)
Как обычно. СУБД, структура БД, тексты запросов и код обработчиков нужно выдирать под пыткой.
← →
lamer6666 © (2010-02-16 13:14) [4]
> с какого перепугу?
просто не владею знаниями в достаточной степени, пробежался по списку событий 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 14:42) [5]> [4] lamer6666 © (16.02.10 13:14)
> В ПОДSELECT-е выбираю наименования типа сообщения в место кода.
Запрос в подселекте разумеется секретный? Зачем он вообще? Почему просто не сджоинить справочник с Тable2?
Без подзапроса быстро работает?
Почему бы не заменить запрос на динамический с параметрами?
← →
lamer6666 © (2010-02-16 19:03) [6]
> Без подзапроса быстро работает?
Так же.
> Почему бы не заменить запрос на динамический с параметрами?
Если не затруднит, можно подробнее?
Спасибо
← →
Sergey13 © (2010-02-17 10:08) [7]> [6] lamer6666 © (16.02.10 19:03)
> Так же.
Значит индексов скорее всего нет на table2_table1_id.
> Если не затруднит, можно подробнее?
WHERE table2_table1_id=:table2_table1_id
← →
lamer6666 © (2010-02-17 11:58) [8]
> WHERE table2_table1_id=:table2_table1_id
Спасибо, уважаемый Sergey13, пробую.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.06 c