Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Занесение результата запроса в массив, (без использования Next) 
V
    Опции темы
Lunatikus
Дата 11.12.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Здравствуйте.
Подскажите,возможно ли результат запроса(база MS SQL 2000,ADOQuery) занести в массив данных без использования перебора с помощью Next?
Слишком уж длительным становится выполнение некста даже по 1млн. записей,поэтому хочу занести сначала данные в массив и перебирать их там.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Deniz
Дата 12.12.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Lunatikus, делай однонаправленный курсор.
Цитата(Lunatikus @  11.12.2007,  16:37 Найти цитируемый пост)
Слишком уж длительным становится выполнение некста 
длительно не Next, а выбор и пересылка записей от сервера к клиенту (1 млн  smile клиенту не нужен).
Без Next скорее всего не обойтись.
А ты уверен, что 
Цитата(Lunatikus @  11.12.2007,  16:37 Найти цитируемый пост)
хочу занести сначала данные в массив и перебирать их там
будет быстрее чем ADOQuery? Может тогда обработку на сервере в процедуре сделать?



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Vas
Дата 12.12.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



А для чего их перебирать, может стоит условие перебора сразу в запрос воткнуть и выбрать только те записи что нужны. 
Ну а ежели все обработать надо по-любому, то процедура на сервере и вперед, в этом и плюс сервера, что не надо таскать записи по сети, которая является самой медленной частью передачи данных, сервер обработает сам все и намного быстрее. 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Lunatikus
Дата 12.12.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



хм.Спасибо за разъяснения.Это получается,что клиент получил результат выборки.Далее он запрашивает некст и сервер снова пересылает данные?Я думал,что клиент работает с тем,что получил.
Ну если так,то буду делать процедуру на сервере.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Deniz
Дата 13.12.2007, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Lunatikus, не совсем правильно понял.
Клиент послал запрос на сервер и получил ответ (возможно была ошибка и т.д.).
Сервер пересылает метаданные по запросу(поля, типы и т.д.)
Клиент запрашивает порцию данных (в зависимости от компонент и настроек 1, порция или все записи)
Далее Next двигает указатель по локальному набору на клиенте, если указатель дошел до конца локального набора, то запрашивается следующая порция с сервера и так до тех пор, пока не прочитаются все записи с сервера по заданному запросу. И это (все считанные записи с сервера) хранится на клиенте в памяти/на диске - кто как умеет.
Если в клиенте выставить свойство однонаправленности, то на клиенте будет только 1 запись и Next, забрав следующую запись, перепишет ее поверх текущей, т.о. нельзя перейти на предыдущую запись, но сильно экономится память и возрастает скорость обработки.
Немного сумбурно описал, но ... я думаю будет понятно.



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Lunatikus
Дата 13.12.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Какими средствами выставляется однонаправленность?


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Deniz
Дата 14.12.2007, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



TADOQuery.CursorType

Из справки:
Код

ctUnspecified: A specific cursor type has not yet been specified.

ctOpenForwardOnly: Forward-only cursor in which you can only scroll forward; better performance because only requires single through recordset.

ctKeyset: Keyset cursor; records added by other users are not visible; records deleted by other users are inaccessible.

ctDynamic: Dynamic cursor; data modifications, deletions, and insertions by other users are visible; scrolling forward and back allowed.

ctStatic: Static cursor; static copy of records; data changes by other users not visible; used mostly for reporting.

PS: так же смотри CursorLocation и LockType возможно еще немного помогут.
PSS: не зная толком задачи можно насоветовать много чего, например:
  • асинхронное выполнение TADOQuery.ExecuteOptions
  • настройку уровней изоляции TADOConnection.IsolationLevel
  • и т.д.



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.