Форум: "Базы";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
ВнизКак победить тормоз в ADO????? Найти похожие ветки
← →
kav (2002-12-15 10:43) [0]Использую 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 :( такие тормоза ужас просто . причем машинка мощная.... подскажите как обойти эти тормоза.... учитывая что есть такое условия к отбору у клиента должны быть открытые счета.... :( никак победить не могу
← →
ЮЮ (2002-12-15 11:06) [1]Может не ADO тормозит, а тот, кто вместо элементарного запроса к БД "сканирует" TTable ???
← →
kav (2002-12-15 11:15) [2]может быть .... но раз уж ты такой умный подскажи запросик который бы отбирал записи в которых в поле день роэждения стоял бы определенный месяц.. и в связной (подчиненной) таблице были записи удовлетворяющие определенному условия (например одно поле не должно быть пустым) ... может это конечно делается... только я не силен в SQL .. пишу только простыек запросы раньше всегда хватало .... а теперь вот обошел так
← →
sniknik (2002-12-15 11:34) [3]понаписано, даже смотреть не хочется, а запрос простейший может быть
SELECT * FROM Table Month(nBirthDat)=12 //к примеру
← →
kav (2002-12-16 03:46) [4]это кнечно интересно но чего за функция
Month(nBirthDat) bde такую не понимает
← →
ЮЮ (2002-12-16 05:00) [5]А причем здесь 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 05:47) [6]да да все кругом правы........ короче я пошел своим путем
попробовал построить запрос в 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));
это работает..
спасибо всем за проявленную поддержку.. а то так бы и мучился
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c