![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите отучить 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]посмотри тип полей, который у тебя возвращаются в запросе