![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как победить тормоз в 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 ???