Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];

Вниз

Помогите отучить ADO сжирать память !   Найти похожие ветки 

 
Socrat   (2002-04-16 09:03) [0]

Возникла проблема. При открытии запроса, который содержит объединение двух 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

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


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

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


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


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

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


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

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

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

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


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

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


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

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


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

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

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


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

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


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

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


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


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

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


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

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


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

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


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

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


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

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


 
Socrat   (2002-04-18 07:07) [14]

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


 
sniknik   (2002-04-18 09:04) [15]

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


 
Socrat   (2002-04-18 09:18) [16]

sniknik

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.006 c
1-39735
DEJRGU
2002-04-27 11:38
2002.05.13
Нужно в программе создавать печатные документы....


1-39711
HDD
2002-04-25 07:05
2002.05.13
Помогите пожалуйста!


1-39804
СергейКнязев
2002-04-29 12:06
2002.05.13
Как скопировать группу файлов без Open- SaveDialog


1-39741
Smithson
2002-04-27 11:55
2002.05.13
Вопрос по потокам


1-39772
Anton+
2002-04-28 21:03
2002.05.13
Сбросить таймер.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский