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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2008, 17:14   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Почему запрос работает медленно

Всем привет. Вопрос такой:
Делаю два запроса
Код:
Oborotform.QTemp.Close;
Oborotform.QTemp.SQL.Clear;
Oborotform.QTemp.SQL.Add('Select sum(summa) from fin_oper  Where (debet = "' + Oborotform.QBuh_BegNUM_SCH.Text + '") And (data >= "' + dStartStr + '") And (data <= "' + dEndStr + '")');
Oborotform.QTemp.Open;
summaD := Oborotform.QTemp.Fields[0].AsFloat;

Oborotform.QTemp.Close;
Oborotform.QTemp.SQL.Clear;
Oborotform.QTemp.SQL.Add('Select sum(summa) from fin_oper  Where (kredit = "' + Oborotform.QBuh_BegNUM_SCH.Text + '") And (data >= "' + dStartStr + '") And (data <= "' + dEndStr + '")');
Oborotform.QTemp.Open;
summaK := Oborotform.QTemp.Fields[0].AsFloat;
Если эти два запроса объединить в один...
Код:
Oborotform.QTemp.Close;
Oborotform.QTemp.SQL.Clear;
Oborotform.QTemp.SQL.Add('Select sum(a.summa), sum(b.summa) from fin_oper a, fin_oper b Where (a.debet = "' + Oborotform.QBuh_BegNUM_SCH.Text + '") and (b.kredit = "' + Oborotform.QBuh_BegNUM_SCH.Text + '") And (data between "' + dStartStr + '" And "' + dEndStr + '")');
Oborotform.QTemp.Open; 
summaD := Oborotform.QTemp.Fields[0].AsFloat;
summaK := Oborotform.QTemp.Fields[1].AsFloat;
... то он выполняется в несколько раз медленнее. Почему?
_SERGEYX_ вне форума Ответить с цитированием
Старый 24.10.2008, 17:30   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Понятно почему - идет "параллельное" выполнение фактически двух запросов и они друг другу просто мешают, ведь условия WHERE постоянно сменяют друг друга.
Если позволите, Сергей, парочку замечаний-советов:
1. Вам не кажется, что две строки
Код:
Oborotform.QTemp.SQL.Clear;
Oborotform.QTemp.SQL.Add('.....
заменяются на одну:
Код:
Oborotform.QTemp.SQL.Text:='......
2. Чтобы не высчитывать номер поля (summaD := Oborotform.QTemp.Fields[0]...) чуть-чуть усовершенствуем ваши запросы:
Select sum(summa) as sum1...
Теперь можно обращаться к полю по имени, а не по номеру. (представьте себе, что будет, если выходной набор данных содержит десятки полей...)
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему не работает domovoi Общие вопросы Delphi 1 15.10.2008 18:42
Почему не работает цикл????? Marsik Помощь студентам 2 22.06.2008 14:16
Почему ХОR работает медленно? Иллидан Помощь студентам 5 01.05.2008 14:51
Почему не выполняется запрос? chingiz БД в Delphi 2 27.05.2007 21:56