Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заставить ADOQuery не скачивать все записи набора данных? [D5, MSSQL]


Askik ©   (2003-04-18 15:44:00) 

Как заставить ADOQuery не скачивать все записи набора данных, а только по мере необходимости, т. е. чтобы он не делал сразу Fetch для всех записей?


BlackTiger   (2003-04-22 14:56:00) [1]

Вот проблема... Трафик... Нагрузка.
Возьми грид от DevExpress (cxGrid/dxGrid). У него есть несколько режимов работы ("все-сразу", "с докачкой").

ЗЫ: Почитайте про ADO.NET - вот где можно посыпать голову пеплом (предварительно выдрав волосы).


sniknik   (2003-04-20 21:25:00) [2]

настрой асинхронное получение данных. первые отобразятся моментально, остальные докачаются по ходу.

кстати 2000 это несерьезно (можно не успеть заметить как все закачается) ~16-тыс качается (у меня) ~ 0.5-0,9 сек.
несерьезно для закачивания но просмотреть и обработать столько ни один оператор не сможет. лутше ограничить запрос (для справочника по группе например).


Askik   (2003-04-20 14:33:00) [3]

>> DSR (20.04.03 10:11)
>>Alexandr © (20.04.03 10:24)

Дело в том, что я раньше работал по схеме:
Приложение->BDE->ODBC->MSSQL-Server.
И работало все следующим образом:
Например пользователь открывает справочник клиентов и я делаю простой запрос к спраочнику: SELECT ... FROM Clients ...
Допустим в базе 2000 клиентов.
Открывается таблица с клиентами и отображаются сначало естественно первые 20 клиентов, так как в гриде сразу все не отобразить. Так вот по мере продвижения вниз по списку происходило постепенное "докачивание клиентов", как воникала необходимость отобразить его на экране. Это было видно по трафику сети (сервер находится на другом компе) да и вообще курсор передергивался на песочные часы (crSQLWait), что происходит тогда когда идет ображение к БД. И соответственно экономился трафик сети и нагрузка на сервер небольшая.
Кто этим руководит BDE или ODBC я не знаю.

После перехода на ADO я этого не замечаю, вот и возник вопрос.
Я так понимаю, что теперь этим придется заниматься мне? Т. е. мне надо следить, сколько записей на даный момент отобразится на экране и столько скачивать? Это на самом деле усложняет задачу.

Кто что знает по этому поводу просьба помочь.


Alexandr   (2003-04-20 10:24:00) [4]

кароче в запросе ограничивай.
И то твоя фраза

> Зачем же скачивать все сотни записей, когда отображаются
> только 20?

какая-то двусмысленная...


DSR   (2003-04-20 10:11:00) [5]

а если select делать? как-нибудь можно ведь ограничиться.наверное. или я чего то не так понял?


Askik   (2003-04-18 16:22:00) [6]

>>Нада делать TOP N или Fetch:=false;
А можно узнать а где это делать?

>>тока он всё равно вернет тебе всё но всё ты не увидишь...

Что-то непонятно, получается, что у ADO есть такой большой минус - при запросах скачиваются ВСЕ ЗАПИСИ?
Чтобы ты не делал?

Я понимаю, если бы я делал что-то типа Last или RecordCount, тогда пусть скачивает наздоровье.
Зачем же скачивать все сотни записей, когда отображаются только 20?
При схеме BDE->ODBC-> MSSQL все работало нормально.

Очень удевительно.


super   (2003-04-18 16:03:00) [7]

Нада делать TOP N или Fetch:=false;

тока он всё равно вернет тебе всё но всё ты не увидишь...


Наверх

Титульная страница Поиск, карта сайта Написать письмо