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

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

Помогите отучить ADO сжирать память ! [D5, Access]


Socrat ©   (2002-04-16 09:03:00) 

Возникла проблема. При открытии запроса, который содержит объединение двух Access"oвских таблиц, память начинает утекать маленькой речкой, за 5 минут, 500 мег утерялось, а запрос так и не открылся. В таблицах около 250 000 записей.

Соединение пытаюсь устанавливать следующее:
Provider=MSDataShape.1; Data Source=DBMS.mdb;Mode=ReadWrite;Persist Security Info=True;Data Provider=Microsoft.Jet.OLEDB.4.0

Помогите, пожалуйста


Socrat   (2002-04-18 09:18:00) [1]

sniknik

Вот как, спасибо за информацию, надо рассмотреть возможность перехода на них.


sniknik   (2002-04-18 09:04:00) [2]

по официальным данным и ADOTable и ADOQuery устарели и оставлены дл "облегчения перехода". рекомендуют к использованию ADOCommand и ADODataSet.


Socrat   (2002-04-18 07:07:00) [3]

alex_eliseev
Помимо выборки просто нужно еще обеспечить импорт данных в Access. ADOTable мне показался самым удобным вариантом. Или я ошибался ?


alex_eliseev   (2002-04-17 11:10:00) [4]

А почему собственно ADOTable, а не ADODataSet или ADOQuery?


wicked   (2002-04-17 09:38:00) [5]

2 Socrat
гы-гы... а ты Filter, Sort или Locate примени... тогда поймёшь, почему серверные курсоры не рекомендуются...


Socrat   (2002-04-17 03:25:00) [6]

Большое спасибо мастерам за ответы и неоценимую помощь.
Что выходит : только при использовании курсора KeySet, набор данных позволил вывести себя в гриде, загрузка памяти стала достигать 38 метров, поиск по всей базе проходит в 5-8 секунд с 2-5 критериями. Просто замечателльно, хотя есть потенциал для оптимизации.


roottim   (2002-04-16 15:17:00) [7]

+Anatoly Podgoretsky © (16.04.02 12:58)
понятия скл сервера здесь нет.. это файл сервер.. и для формирования курсора он всеравно использует клиента... только работать с UseServer он будет не совсем корректно!


wicked   (2002-04-16 13:09:00) [8]


> В при CursorLocation = clUseServer в воздух?
> Это же не сервер!

не обязательно... CursorLocation = clUseServer диктует провайдеру, что нужно использовать курсор на стороне сервера...
а если курсор динамический (CursorType = ctDynamic), то имхо сервер даже не трудится выбирать всёи тот час же, а выдаёт записи по мере продвижения клиента по набору данных... если же курсор кейсетовый (CursorType = ctKeyset), то сервер формирует и кеширует только набор ключевых полей, сами записи выдаёт опять же по мере обращения клиента...


Anatoly Podgoretsky   (2002-04-16 12:58:00) [9]

В при CursorLocation = clUseServer в воздух?
Это же не сервер!


Севостьянов Игорь   (2002-04-16 12:50:00) [10]

Да-да-да при CursorLocation = clUseClient он выкачивает данные из SELECT на клиента (как бы кеширует), ну вот и думай а надо ли выкачивать все это клиенту и искать( производящую поиск) или же можно это сделать на сервере ?


wicked   (2002-04-16 12:11:00) [11]

2 Mike S ©
имхо да... хотя я не пробовал и работал только с клиентскими...

2 Socrat
так ты их хочешь аккумулировать или выбирать на показ?... ADO ест память только тогда, когда ты в adoquery/adodataset"е делаешь select твоих данных...
для аккумулирования/обновления данных вовсе не обязательновыбирать данные, достаточно использовать adocommand и операции sql...


Mike S   (2002-04-16 10:59:00) [12]

> могу только предложить использовать серверные курсоры
А разве Access их поддерживает.
Может ADO тянет всю базу себе.


Socrat   (2002-04-16 10:54:00) [13]

По какой-то причине ADO пытается сразу отхватить 150-180 метров просто при попытке открытия ADOTable.


Socrat   (2002-04-16 10:47:00) [14]

Belov : Я возвращаю 15 полей из одной и 15 из другой таблицы. Типы данных : числовые и текстовые, дата.

wicked : Чем мне помогут серверные кусоры

Обрисую ситуацию: необходимо сделать поиск по записям. 250000 записей это основной набор данных, каждый месяц будут приходить обновления. Надо разработать программу аккумулирующию в себе все данные и производящую поиск. Попытался перекидывать в Paradox, но все происходит очень медленно и размер файла, по какой то причине, ограничивается 255 мегами. Пока оптимального решения так и не нашел.


wicked   (2002-04-16 10:28:00) [15]


> В таблицах около 250 000 записей

скока-скока?... зачем тебе столько и сразу?... юзеру показывать?... так никакой памяти не хватит...
могу только предложить использовать серверные курсоры (св-во CursorLocation = clUseServer), но это отдельный разговор...


Belov   (2002-04-16 09:26:00) [16]

посмотри тип полей, который у тебя возвращаются в запросе


Наверх

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