![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как быстро открыть БД из 130000 зап с небольшой потерей памяти [D7, Access]
Yerbol © (2005-02-04 14:01:00)Я открываю базу данных Access через ADO и отображаю их в DBGrid.
База моя большая быстро не открывается да и памяти жрет моного на простых компах не работает :). Задача моя такая открыть базу все целиком а по кусочкам их не устраивает :(
Подскажите как можно открыть эту базу без больших потерь памяти и чтоб как можно быстрее (а то у меня она открывается более 1 минут :(
Или есть какой нить компанент типа True DBGrid Pro 6.0 в Visual Basic 6
Виталий Панасенко (2005-02-04 17:39:00) [1]Johnmen © (04.02.05 17:18) [28]
вряд ли ... я в коде делаю
Tbl.Close;
Tbl.Open;
в обработчике кнопки Открыть... т.е. НД закрывается...
Блин.. надо с 1000000 записей загнать...:-) чем сейчас и займусь... :-)..
sniknik (2005-02-04 17:26:00) [2]> Там еще и TableDirect значение имеет... Вообще-то странно, что sniknik не откликнулся - это ж его стихия.. :-)
имеет, посмотри хелп по seek от adodataset в дельфях (там оптимальные параметры для аксесс серверного курсора приводятся(в примечаниях, как и пояснение что кроме jet-а нет аналогов), как раз такие что jet будет напрямую с базой работать локально, не перегоняя данные через ядро фактически эмулируя сервер)
но для клиент серверных технологий это увы не пройдет... исключительно на локали так можно.
работать тоже надо иногда... ;о))
Johnmen (2005-02-04 17:18:00) [3]>при первом открытии пауза,
Вот тут всё и закачалось на клиента. А дальше просто работа с этими локальными данными...
Виталий Панасенко (2005-02-04 17:15:00) [4]Положил, проверил.. 100 мБ сетка - при первом открытии пауза, заметная на глаз.. потом - нет различия, что на локали, что на сети.. одинаково.. на глаз, по крайней мере не видно..:-)
Johnmen (2005-02-04 16:42:00) [5]>Виталий Панасенко (04.02.05 16:36) [25]
Аксеса нет у меня. А вручную гоношиться лень...:)
И потом, ты же делал всё в рамках одного комп., локально. А по сети гонять такие НД, как правильно сказали, чистый изврат...
Виталий Панасенко (2005-02-04 16:36:00) [6]Johnmen © (04.02.05 16:25) [23]
Конечно Access...
памяти - 256 (видео-интегрированное), Celeron 1.7, OS - XP SP2
Неужели все такие ленивые ?:-).. сами попробуйте - увидите ...
Stanislav (2005-02-04 16:26:00) [7]А что ты в этой таблице храниш ? Какие данные.
Зачем сразу 130000 ?
Johnmen (2005-02-04 16:25:00) [8]>Виталий Панасенко (04.02.05 16:15) [19]
>Создал БД
Аксесную ?
Danilka (2005-02-04 16:24:00) [9][21] Виталий Панасенко (04.02.05 16:20)
Ну, тогда, либо у тебя комп/памяти побольше чем у автора, либо у него полей не один десяток. :))
По-идее, отжираемая память после ухода в конец грида должна быть такая-же как и при клиентском курсоре..
Или есть варианты?
Виталий Панасенко (2005-02-04 16:20:00) [10]Ебстебственно !:-) Самое первое, что пробовал..
Danilka (2005-02-04 16:19:00) [11][19] Виталий Панасенко (04.02.05 16:15)
В конец грида уходил? :))
Виталий Панасенко (2005-02-04 16:15:00) [12]Знаете, не поленился.. Создал БД с одной таблицей 128000 записей.. Открываю ADODataSetом (select * from T1) - доли секунды..
таблица T1
F1 - счетчик
F2 - строка 50
F3 - строка 50
F4 - длинное целое..
У dataSetа курсор на сервере... все работает "мухой".. перемещение и тд ..:-)
Danilka (2005-02-04 15:53:00) [13][17] Johnmen © (04.02.05 15:36)
Не, автору грид как-раз нужен, поэтому однонаправленый не катит. :)
Просто, незнаю как в аццессе, но возможно если поставить серверный курсор, то он не все сразу в кэш затолкает, а только то, что в гриде, и пихать в кэш будет по-мере листания, то-есть на первоначальное открытие удет меньше чем в случае с клиентским курсором - 1 минута.
Хотя, все равно, на мой взгляд, вываливать запрос на сотни тысяч записей в грид - извращение. :)
Наверняка, можно сделать какую-нибудь первоначальную группировку, например слева в лист-бокс вывливать клиентов, улицы, еще что, а в самом запросе вываливающем все в грид, фильтровать по выбранному значению.
если это документы, то еще проще, две даты задающие период и по-умолчанию период день или месяц хотя-бы.
Johnmen (2005-02-04 15:36:00) [14]>Danilka © (04.02.05 15:29) [14]
>Виталий Панасенко (04.02.05 15:29) [15]
Конечно, память будет забита. Но можно однонаправленный датасет. Тогда кеш всего на 1 запись, но никакой двусторонней навигации, никаких дбгридов...:)
А второй вопрос - скорость. Скачать 130000 - это время.Не зависимо от направленности...
Sergey13 (2005-02-04 15:34:00) [15]2[13] msguns © (04.02.05 15:27)
>А психика ? Ты ж, Сергунь, у нас впечатлительный
Это где написано? 8-)
>Представляешь, выходишь из-за угла, помахивая двухверстовым узи, а на тебя монстер прыгает с небоскреб, а ?
Так я ж на вертолете. 8-)
Виталий Панасенко (2005-02-04 15:29:00) [16]Johnmen © (04.02.05 15:22) [11]
Там еще и TableDirect значение имеет... Вообще-то странно, что sniknik не откликнулся - это ж его стихия.. :-)
Danilka (2005-02-04 15:29:00) [17][11] Johnmen © (04.02.05 15:22)
Ну, вобщем-то да, но все-таки одно дело вытащить в кэш 20 записей из таблицы, а другое 130к.
Хотя, конечно, когда долистают до конца то память будет забита точно также.
msguns (2005-02-04 15:27:00) [18]>Sergey13 © (04.02.05 15:19) [10]
>Тебе узера жалко, а мне монитор. Наверное я не прав. Но монитор уж очень пондравился - километр диагональ. Вот бы на таком в HL2. 8-)
А психика ? Ты ж, Сергунь, у нас впечатлительный. Представляешь, выходишь из-за угла, помахивая двухверстовым узи, а на тебя монстер прыгает с небоскреб, а ? Лучше бегай на свом 17-ти дубовом..
Danilka (2005-02-04 15:26:00) [19][9] Виталий Панасенко (04.02.05 15:17)
Это Аццесс, какой там сервер, думаю, не поможет. :)
Хотя, кто его знает, Yerbol, если хочешь продолжать пляски с извращениями попробуй измени у ADOConnection свойство CursorLocation.
Johnmen (2005-02-04 15:22:00) [20]Виталий Панасенко (04.02.05 15:17) [9]
На каком сервере ?