Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];

Вниз

Работа c TADOQuery   Найти похожие ветки 

 
kuchumovkv   (2003-08-23 23:50) [0]

Господа, помогите разрешить вопрос. Работаю с TADOQuery, деляю "селектом" выборку из дбф-ки и загоняю компонентом в другую дбф-ку (предвосхищая вопросы - так наиболее удобно для решаемой задачи). Делаю

...
TADOQuery.ExecSQL;
...
TADOQuery.Open;
TADOQuery.First;
i:=0;
repeat
inc(i)
...
//Обработка текущей записи
...
TADOQuery.Next
until i=TADOQuery.RecordCount;

Для контроля прицепил прогресс-бар, и заметил, что с каждой записью скорость обработки уменьшается. Впечатление, что несмотря на .Next, курсор начинает пробегать каждый раз с начала рекордсета. Подскажите, в чем может быть причина. База на 50000 записей, и время обработки имеет значение.


 
Hawk2   (2003-08-24 00:13) [1]

Где ты видел такой код?


 
Hawk2   (2003-08-24 00:20) [2]

Во-первых нужно использовать экземпляр класса, а не сам клас, в во-вторых это обычно делается так:
...
ADOQuery.ExecSQL;
...
ADOQuery.Open;
ADOQuery.First;
while not ADOQuery.EOF do
begin
...
//Обработка текущей записи
...
ADOQuery.Next;
end;
ADOQuery.Close;


 
kuchumovkv   (2003-08-24 00:24) [3]

Hawk2 (c)

Этот код работает у меня на машине.() Может, есть более эффективный способ доступа к полям запроса? Подскажи.


 
kuchmovkv   (2003-08-24 00:30) [4]

Hawk2 (c)

Thanks. Класс в коде я указал условно, естественно, это экземпляр вроде ado_q: TADOQuery; А ты можешь объяснить мне в чем предпочтение стейтмента While...eof перед repeat, или, например, For?


 
Hawk2   (2003-08-24 13:19) [5]

kuchumovkv © (24.08.03 00:24) [3] > Может, есть более эффективный способ доступа к полям запроса? Подскажи.
Смотря что тебе нужно сделать, может можно и через SQL.
kuchmovkv (24.08.03 00:30) [4]> А ты можешь объяснить мне в чем предпочтение стейтмента While...eof перед repeat, или, например, For?
Если разбирать твой код то получается что вот в этом месте until i=TADOQuery.RecordCount; ты все время подсчитываешь количество записей в Квере, а если как ты сказал их у тебя 50000, то понятно почему падает скорость. В крайнем случае нужно было объявить переменную и присвоить ей количество записей:
ADOQuery.ExecSQL;
...
ADOQuery.Open;
ADOQuery.First;
rc:=ADOQuery.RecordCount;i:=0;
repeat
inc(i)
...
//Обработка текущей записи
...
TADOQuery.Next
until i=rc;
Но если нужно "пробежаться" по наборе данных (или файле) то правильнее всего использовать while ... do и функцию EOF (End Of File) которая проверяет когда достигнут конец НД (или файла) и ничего ненадо вычислять.


 
MsGuns   (2003-08-24 15:44) [6]

Var
RecCnt: Integer;

...
TADOQuery.ExecSQL;
...
TADOQuery.Open;
TADOQuery.Last;
RecCnt=TADOQuery.RecordCount;

TADOQuery.First;
i:=0;
repeat
inc(i)
...
//Обработка текущей записи
...
TADOQuery.Next
until i =RecCnt;



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

Форум: "Базы";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
1-48546
tria
2003-09-04 14:28
2003.09.15
Как сделать чтобы в TEdit при Enabled=F не менялся цвет шрифта?


14-48722
Denkop
2003-08-26 17:05
2003.09.15
Оффтопик% как в PHP распаковать tar архив


14-48717
Ahmad K
2003-08-26 02:43
2003.09.15
Delphi 7 vs Delphi 3


1-48555
Relaxxx
2003-09-01 16:29
2003.09.15
Поиск по строкам у комбоБокс


1-48642
AK
2003-09-02 20:47
2003.09.15
Как скопировать внутреннюю и внешнюю часть формы чужой программы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский