![]() |
|
|
![]()
|
|
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
Здравствуйте.
Подскажите,возможно ли результат запроса(база MS SQL 2000,ADOQuery) занести в массив данных без использования перебора с помощью Next? Слишком уж длительным становится выполнение некста даже по 1млн. записей,поэтому хочу занести сначала данные в массив и перебирать их там. -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Lunatikus, делай однонаправленный курсор.
длительно не Next, а выбор и пересылка записей от сервера к клиенту (1 млн Без Next скорее всего не обойтись. А ты уверен, что будет быстрее чем ADOQuery? Может тогда обработку на сервере в процедуре сделать? -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
А для чего их перебирать, может стоит условие перебора сразу в запрос воткнуть и выбрать только те записи что нужны.
Ну а ежели все обработать надо по-любому, то процедура на сервере и вперед, в этом и плюс сервера, что не надо таскать записи по сети, которая является самой медленной частью передачи данных, сервер обработает сам все и намного быстрее. -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
хм.Спасибо за разъяснения.Это получается,что клиент получил результат выборки.Далее он запрашивает некст и сервер снова пересылает данные?Я думал,что клиент работает с тем,что получил.
Ну если так,то буду делать процедуру на сервере. -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Lunatikus, не совсем правильно понял.
Клиент послал запрос на сервер и получил ответ (возможно была ошибка и т.д.). Сервер пересылает метаданные по запросу(поля, типы и т.д.) Клиент запрашивает порцию данных (в зависимости от компонент и настроек 1, порция или все записи) Далее Next двигает указатель по локальному набору на клиенте, если указатель дошел до конца локального набора, то запрашивается следующая порция с сервера и так до тех пор, пока не прочитаются все записи с сервера по заданному запросу. И это (все считанные записи с сервера) хранится на клиенте в памяти/на диске - кто как умеет. Если в клиенте выставить свойство однонаправленности, то на клиенте будет только 1 запись и Next, забрав следующую запись, перепишет ее поверх текущей, т.о. нельзя перейти на предыдущую запись, но сильно экономится память и возрастает скорость обработки. Немного сумбурно описал, но ... я думаю будет понятно. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
Какими средствами выставляется однонаправленность?
-------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
TADOQuery.CursorType
Из справки:
PS: так же смотри CursorLocation и LockType возможно еще немного помогут. PSS: не зная толком задачи можно насоветовать много чего, например:
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |