Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2010, 13:29   #1
lonelybooba
Новичок
Джуниор
 
Регистрация: 24.02.2010
Сообщений: 4
По умолчанию Зависание между BeforeOpen и AfterOpen

салют всем.

товарищи, я уже голову сломал, подскажите плс как реализовать следующую вещь:

в дельфях работаю с DAC for MySQL. выполняю запрос (может не прально выполняю):

Код:
 QueryResForm.SQLQuery.Active:=false;
 QueryResForm.SQLQuery.SQL.Clear;
 QueryResForm.SQLQuery.SQL:=LookupForm.ReportSqlMemo.Lines;
 QueryResForm.SQLQuery.Open;
Идея такая, что когда выполняется запрос у меня появляется окошко с надписью "Выполняется запрос" и прочей лабудой (не столь важно какой). Делаю это так:

Код:
procedure TQueryResForm.SQLQueryBeforeOpen(DataSet: TDataSet);
begin
 LookupForm.Visible:=false;
 QueryProc.Visible:=true;
end;

procedure TQueryResForm.SQLQueryAfterOpen(DataSet: TDataSet);
begin
 QueryProc.Visible:=false;
 QueryResForm.Visible:=true;
end;
И на этом деле, как вы поняли, всё виснет (запросы большие). Подскажите плс, как "успокоить" приложение, чтобы его можно было спокойно сворачивать и т.п. Application.Processmessages как я понял юзать нельзя, хотя пробовал, но тоже не работает.


Заранее спасибо
lonelybooba вне форума Ответить с цитированием
Старый 24.02.2010, 15:04   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

может что то типо так

Код:
QueryResForm.SQLQuery.Active:=false;
 QueryResForm.SQLQuery.SQL.Clear;
 QueryResForm.SQLQuery.SQL:=LookupForm.ReportSqlMemo.Lines;
// Тут показываем окошко "Подождите"
 QueryResForm.SQLQuery.Open;
// тут убираем
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 24.02.2010, 15:23   #3
lonelybooba
Новичок
Джуниор
 
Регистрация: 24.02.2010
Сообщений: 4
По умолчанию

BARNEY не, оно всё равно повиснет, т.е. двигать окошко нельзя будет =(
lonelybooba вне форума Ответить с цитированием
Старый 24.02.2010, 15:30   #4
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

может просто "убыстрить" запрос, индексы добавить в таблицу или с запросом ченить сделать.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 24.02.2010, 15:34   #5
lonelybooba
Новичок
Джуниор
 
Регистрация: 24.02.2010
Сообщений: 4
По умолчанию

там с таблицой делать ниче нельзя, плюс ко всему она оооочень большая по размеру. ну и в конце концов такая функция быть должна, т.е. реализовать надо...
и как на зло еще у компоненты mySQLQuery нет ивентов типа OnExecute или OnProcess(
lonelybooba вне форума Ответить с цитированием
Старый 24.02.2010, 15:41   #6
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Всегда было Интересно зачем ОЧЕНЬ большую таблицу выводить пользователю.... прокрутить не прокрутит....искать что то не найдёт...
переписать на бумашку не перепишет... Может посмотреть в торону изменения Тех задания... Или логики программы... Да и всё таки Ну очень большие запросы и данные всё равно можно запрос оптимизировать... у меня несколько миллионов записей обрабатывает с читаные секунду... Может лучше запрос покажите за одно и расскажите зачем больная таблица Пользователю
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 24.02.2010, 15:52   #7
lonelybooba
Новичок
Джуниор
 
Регистрация: 24.02.2010
Сообщений: 4
По умолчанию

я очень большую не вывожу, у меня в конце LIMIT запрос генерируется "руками", точнее визуально и запросы связываются. выглядит это страшно, но в тз было так, сделал

ну например вот так:

Код:
SELECT * FROM fond_egrpo WHERE

((name LIKE "%газпром%") OR 
(kname LIKE "%газпром%") OR
(lname LIKE "%газпром%"))
AND
(okpo>"50432")

LIMIT 1000
ну и самое важное, что таблица не индексирована, не моя вина.

короче деваться некуда, надо с окошком "подождите" разобраться...
lonelybooba вне форума Ответить с цитированием
Старый 24.02.2010, 18:21   #8
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

дык проиндексируйте.... это 2 минуты....

и пользователь 1000 записей листает руками??? Может ему счёты выдать?

да и Like да ещё и в связке с or не самый хороший вариант.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное зависание. DIMANJ Операционные системы общие вопросы 20 18.11.2009 17:08
CriticalSection -> зависание программы PUH Помощь студентам 1 05.11.2009 13:19
Зависание при показе Диалога nusik Общие вопросы C/C++ 11 02.07.2009 08:20
Зависание клиента Firebird. KrPr БД в Delphi 4 28.01.2009 09:13
Зависание JRcoker Общие вопросы Delphi 8 06.08.2008 08:29