Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.21;
Скачать: CL | DM;

Вниз

Перебор записей в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
7-68103
SPeller
2003-05-11 14:24
2003.07.21
Создание отдельной нити, но не простой...


1-67817
clickmaker
2003-07-07 20:24
2003.07.21
Параметр lcid в TExcelApplication.Workbooks


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


14-67962
zolotov
2003-07-01 19:00
2003.07.21
Где можно достать ToolBar c окном настройки кнопок?


4-68111
likeanangel
2003-05-19 19:10
2003.07.21
Работа с реестром