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

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

Как победить тормоз в ADO????? [D5]


kav ©   (2002-12-15 10:43:00) 

Использую ADO и аксесовскую базу, в ней таблица клиентов у некоторых клиентов по несколько счетов(ьаблица счетов), есть вот такая процедурка: отбирает всех клиентов у которых день рождение в заданном месяце..

IF BirthMonthForm.ShowModal = mrOK then begin
DM.dsClient.Enabled:=False;
DM.dsAccount.Enabled:=False;
DM.tMemView.Open;
with DM do begin
while not tClient.EOF do begin
if tClient.FieldValues["BIRTHDAY"]<>null then
begin
closed:=True;
tAccount.First;
while not tAccount.EOF do
begin
If tAccount.Fields[5].Value=null then closed:=False;
tAccount.Next;
end;
If closed=True then
begin
tClient.Next;
continue;
end;
RecDate:=tClient.FieldValues["BIRTHDAY"];
DecodeDate(RecDate, Year, Month, Day);
If (CurMonth = Month) then
tMemView.AppendRecord([tClientCHIEF,tClientNAME,{tClientBIRTHDAY}RecDate,Day]);
end;
tClient.Next;
end;
end;

QRListForm.QuickRep1.PreviewModal;
DM.tMemView.Close;
DM.dsClient.Enabled:=True;
DM.dsAccount.Enabled:=True;
ShowMessage("Сделано");

Так вот с одинаковым количеством данных через BDE+*.dbf таблицы эта процедурка работает 20 сек.... импортим эти таблица в аксесс используем ADO эта процедурка работает минут 7 :( такие тормоза ужас просто . причем машинка мощная.... подскажите как обойти эти тормоза.... учитывая что есть такое условия к отбору у клиента должны быть открытые счета.... :( никак победить не могу


kav   (2002-12-16 05:47:00) [1]

да да все кругом правы........ короче я пошел своим путем
попробовал построить запрос в Access .. ну и построил... работает как надо даже в Delphi(причем засунул его безо всяких изменений)... (и это радует)... кому интересно приведу его ниже

SELECT Client.Chief, Client.NAME, Client.BIRTHDAY
FROM Client INNER JOIN ACCOUNT ON Client.CL_NUM = ACCOUNT.CL_NUM
WHERE ((Month([BIRTHDAY])=10)) AND (([ACCOUNT]![CLOSE_D] Is Not Null));

это работает..
спасибо всем за проявленную поддержку.. а то так бы и мучился


ЮЮ   (2002-12-16 05:00:00) [2]

А причем здесь bde, если речь щла об ADO? В Local SQL тоже есть функции для выделения из даты (в Неlp заглядывать не пытался?)
C:\Program Files\Common Files\Borland Shared\BDE\LocalSql.hlp

SELECT SaleDate,

EXTRACT(YEAR FROM saledate) AS YY,
EXTRACT(MONTH FROM saledate) AS MM,
EXTRACT(DAY FROM saledate) AS DD

FROM Orders


kav   (2002-12-16 03:46:00) [3]

это кнечно интересно но чего за функция
Month(nBirthDat) bde такую не понимает


sniknik   (2002-12-15 11:34:00) [4]

понаписано, даже смотреть не хочется, а запрос простейший может быть
SELECT * FROM Table Month(nBirthDat)=12 //к примеру


kav   (2002-12-15 11:15:00) [5]

может быть .... но раз уж ты такой умный подскажи запросик который бы отбирал записи в которых в поле день роэждения стоял бы определенный месяц.. и в связной (подчиненной) таблице были записи удовлетворяющие определенному условия (например одно поле не должно быть пустым) ... может это конечно делается... только я не силен в SQL .. пишу только простыек запросы раньше всегда хватало .... а теперь вот обошел так


ЮЮ   (2002-12-15 11:06:00) [6]

Может не ADO тормозит, а тот, кто вместо элементарного запроса к БД "сканирует" TTable ???


Наверх

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