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

Вниз

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

 
Александр Ч_   (2003-06-26 16:58) [0]

Простой вопрос. Перебор записей (AdoDataSet) в конструкции типа

While not dmConvert.ADODataSetEKS.Eof do begin
dmConvert.ADODataSetEKS.Next;
end; // While not

выполняется очень медленно (40 000) записей примерно 15 -20 сек.
Это так и есть или можно как-то ускорить?


 
Соловьев   (2003-06-26 17:02) [1]

просто перебрать надо? или что еще надо делать? AfterScroll не обрабатывается?


 
Johnmen   (2003-06-26 17:26) [2]

15 -20 сек. - нормально для 40 000 записей
:)))



 
sniknik   (2003-06-26 17:40) [3]

>While not dmConvert.ADODataSetEKS.Eof do begin
> dmConvert.ADODataSetEKS.Next;
>end; // While not

вот просто так без ничего? просто перебор?

ускоряется -
при положении курсира на clUseServer установкой типа курсора ctOpenForwardOnly.
при clUseClient цикл пройдет еще быстрей но потратится время на предварительную закачку рекордсета(ее время считается? судя по вопросу/коду нет). что в сумме будет быстрей надо сравнить.

если уже так стоит, считай что это нормально. (даже нет, много не выиграеш)


 
Александр Ч_   (2003-06-26 17:41) [4]

Делать надо, конечно, но и так медленно.


 
Sandman25   (2003-06-26 17:48) [5]

Не надо тащить на клиента 40.000 записей. Используйте секцию WHERE.


 
Александр Ч_   (2003-06-26 17:59) [6]


Sandman25 . SQL для меня родной язык,но в данной ситуации не прокатит.

Задача такая. Нужно перебрать на клиенте. (сложная текстовая обработка). Может их в какую временную таблицу запихать, типа dbf, но лучше что-нибудь в памяти создать.
Получится?


 
Александр Ч_   (2003-06-26 18:05) [7]

Попробовал ту же таблицу из dbf перебрать - 0 секунд получилось.
Но не хочу я в dbf.

Скажите лучше, как из dataSet влить все данные куда-нибудь
виртуально, без файлов, чтоб потом быстро перебрать.


 
Fiend   (2003-06-26 18:08) [8]

То Александр Ч_:
А что же на родном для вас языке SQL нельзя эту сложную текстовую обработку сделать прямо на сервере, например используя курсор?


 
Александр Ч_   (2003-06-26 18:12) [9]

Я бы рад, но нельзя на сервере ничего делать (БД чужая, только на
чтение данных)


 
sniknik   (2003-06-26 18:12) [10]

может можно все сделать на стороне сервера, продумай задачу, может и качать ничего не придется, и циклов не будет.

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

var OldTime: TDateTime;
ErrMessage: string;
begin
Label1.Caption:= "0:00:000";
OldTime:= Now;

ADOConnection1.Connected:= False;
ADOConnection1.ConnectionString:= "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind";
ADODataSet1.CommandText:= "SELECT * FROM Sl1_Category";
ADODataSet1.Open;
ADODataSet1.DisableControls;
While not ADODataSet1.Eof do begin
ADODataSet1.Next;
end;
ADODataSet1.EnableControls;
DateTimeToString(ErrMessage, "n:ss:zzz", Now - OldTime);
Label1.Caption:= ErrMessage;
end;


работает около 2,4сек. (в таблице напомню 78848зап)


 
Fiend   (2003-06-26 18:16) [11]

То Александр Ч_:
для создания курсора никаких дополнительных прав кроме на чтение данных не надо


 
sniknik   (2003-06-26 18:36) [12]

то же самое что sniknik © (26.06.03 18:12)
только с положением clUseServer
и типом
ctDynamic - 24,8-24,9сек
ctOpenForwardOnly - 24,3 - 24,5сек

(2 замера конечно не показатель)

> влить все данные куда-нибудь
> виртуально, без файлов, чтоб потом быстро перебрать.
рекордсет это как раз и есть виртуальное (в памяти) хранилище данных.



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

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

Наверх




Память: 0.47 MB
Время: 0.007 c
3-67695
rosl
2003-06-27 07:42
2003.07.21
sql


1-67790
TolikM
2003-07-08 17:00
2003.07.21
Работа со StringGrid ом


7-68091
Dion
2003-05-13 07:33
2003.07.21
Подскажите, Плз, как можно программно определить имя пользователя


1-67793
jiura84
2003-07-07 15:54
2003.07.21
Как отследить перевод каретки при вставке данных?


8-67926
sndanil
2003-04-01 12:24
2003.07.21
Рисование прицела





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский