Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: CL | DM;

Вниз

Построение баланса   Найти похожие ветки 

 
MVVD ©   (2003-04-25 11:19) [0]

В таблице CountsAL (TCALL) имеются данные в виде: счет, дата, сумма. Стоим баланс на дату d.

Dmod.qWork2.Active := False;
Dmod.qWork2.SQL.Clear;
Dmod.qWork2.SQL.Add("Select LS ,Max(DATA) as qMDD From CountsAL );
Dmod.qWork2.SQL.Add("Where DATA <="""+DateToStr(db)+"""");
Dmod.qWork2.SQL.Add("Group by LS");
Dmod.qWork2.Active := True;

Dmod.qWork2.First; While(not Dmod.qWork2.EOF) do begin {While}
ls:=Trim(Dmod.qWork2.FieldByName("LS").AsString);
d := Dmod.qWork2.FieldByName("qMDD").AsDateTime;
DMod.TCALL.FindKey([nels,d]);
<Занесение в таблицу с данными баланса>
Dmod.qWork2.Next;
end; {While}
При большой таблице выборка долгая. Есть ли у кого решения по убыстрению этого процесса?


 
MsGuns ©   (2003-04-25 11:35) [1]

Баланс, надо полагать, не бухгалтерский ?
Надо полагать, что целью приведенного кода является выборка из т.н. "баланса" мах.дат в пределах указанной границы по каждому счету, и из записи раб.таблицы с этой самой датой что-то берется и куда-то кладется ?
Использовать для этого подобный алгоритм - извращение. Все делается либо одним запросом UPDATE/INSERT со встроенным SELECT или ХП, если база - не локалка. Для напрсания такого запроса нужно, конечно, иметь структуры таблиц и собственно знать, что надо сделать конкретно.


 
MVVD ©   (2003-04-25 11:43) [2]

Dmod.qWork2.SQL.Add("Select * from CountsAl c");
Dmod.qWork2.SQL.Add("Where DATA <="""+DateToStr(d)+"""");
Dmod.qWork2.SQL.Add(" and DATA= (select max(DATA) from CountsAl");
Dmod.qWork2.SQL.Add(" where LS = c.LS ");
Dmod.qWork2.SQL.Add(" and DATA <="""+DateToStr(d)+""" )");
Dmod.qWork2.SQL.Add(" order by LS ");

Зацикливается насмерть


 
NickBat ©   (2003-04-25 11:55) [3]

Запросы лучше проверять каким-нибудь SQl монитором, а не из под Делфи все это гонять.


 
MVVD ©   (2003-04-25 12:01) [4]

так SQl монитор и гонял


 
kravchuk ©   (2003-04-25 12:06) [5]

А пробовал смотреть план запроса, например в IBExpert?


 
NickBat ©   (2003-04-25 12:21) [6]

> так SQl монитор и гонял
А пример запроса почему-то приводишь с компонентами. :))


 
MVVD ©   (2003-04-25 12:23) [7]

NickBat! Гонял естественно текст


 
ЮЮ ©   (2003-04-25 14:13) [8]

Зацикливается насмерть
потому что для каждой строки CountsAl выполняется запрос. Подожди маленько, пока для всех строк выполнится :-)

Не проще ли сначала выбрать только нужные записи

SELECT LS, MAX(Data), MAX(ID)
WHERE Data < :DATA
GROUP BY LS

а затем результаты связать с CountsAl для получения остальной информации из записи


 
MVVD ©   (2003-04-25 14:20) [9]

Так то же самое делается в самом первом примере


 
ЮЮ ©   (2003-04-25 14:27) [10]

Так связывать не в цикле с FindKey а запросом
SELECT Таблица.*
FROM <запрос>, Таблица
WHERE <запрос>.ID = Таблица.ID AND <запрос>.LC = Таблица.LC

БД какая?


 
MVVD ©   (2003-04-25 14:33) [11]

и Парадокс и Interbase


 
Zacho ©   (2003-04-25 14:37) [12]


> MVVD © (25.04.03 14:33)

Не знаю, как там в LocalSQL, а для IB настоятельно рекомендую явно указывать алиасы таблиц в запросе.



Страницы: 1 вся ветка

Текущий архив: 2003.05.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-59755
k-sergey
2003-05-05 21:35
2003.05.19
Как передать данные( массив buf: array


14-59876
Dimaz-z
2003-04-28 16:22
2003.05.19
Где достать нормальные шрифты?


1-59788
GarT
2003-05-07 01:27
2003.05.19
Ввод символа.


3-59601
Alpine
2003-04-24 13:58
2003.05.19
Посоветуйте компоненты для доступа к базе MS SQL.


14-59889
badaxe2
2003-04-29 13:47
2003.05.19
Кто-нибудь ставил RX Library 2.75 conversion to Delphi 7?