Консультация № 168687
01.06.2009, 15:40
0.00 руб.
0 6 2
Привет!

Возникла необходимость создать временную таблицу. Можно ли ее создать в пямяти? Использую ADO, Access. В пямяти, потому что иначе будет намного медленее работать в добавок к тормазнутому Access (поменять субд нет возможности, да и неохото). Таблицу нужно создать с двумя полями типа longint и memo.

Спасибо.

Обсуждение

Неизвестный
01.06.2009, 17:29
общий
Вы и так, работаете с данными в памяти через ADO. Все что Вы получаете, получаете в кэш.
если целочисленный тип работать еше будет обычно, то с memo действительно не актуально что-то городить.
тормазнутость Access можно частично вылечить путем её сжатия, т.е. очистить от всех фантомов, тем самым, уменьшить размер БД в десятки а то и сотни раз.
Неизвестный
01.06.2009, 17:44
общий
это ответ
Здравствуйте, ragnarog.


Вариант использовать библиотеку RX - в ней есть rxmemory, второй бы вариант который бы использовал - XML
Неизвестный
01.06.2009, 21:46
общий
это ответ
Здравствуйте, ragnarog.

Лично я очень часто пользуюсь компонентом StringGrid, для поддержки которого, правда, создаю массив в памяти с нужной мне структурой. Работа получается трудоёмкая (необходимо самому отслеживать добавление, правку и удаление элементов, а в конце ещё и сбрасывать в базу изменения, не трогая того, что не трогал пользователь), но взамен значительно облегчается адаптация программы к новому серверу (если его придётся сменить), снижается зависимость от текущего выбранного сервера СУБД и минимизируются сетевой трафик и блокировки редактируемых таблиц. По моему опыту - даже значительные изменения, внесённые пользователем за один сеанс, сбрасываются на сервер меньше чем за секунду, что улучшает масштабируемость базы данных. Для связи с сервером я тоже использую компоненты ADO, и пока вполне доволен ими.

Кстати, в качестве сервера СУБД я использую PostgreSQL 8.2.4 и готов помочь Вам его освоить. Но это уже на Ваше усмотрение.
Неизвестный
02.06.2009, 06:25
общий
Понимаете, мне нужно создать именно таблицу, потому что нужен интерфейс таблицы, во вторых, как я уже говорил, ее нужно создать в памяти, так как я сделал ее в БД и получил 6 секундное ожидание проработки операций с таблицей - удаление в ней предыдущего массива данных, заполнение новым массивом, чтение массива из таблицы - при этом строк в таблице было всего навсего 120 и каждое мемо поле было заполнено от 0 до 4 слов. Фантомов нет. А то что что-то тормазит Access это факт...
Неизвестный
02.06.2009, 08:03
общий
ragnarog, есть идя по ускорению работы Access'a. Если в полях Memo заведомо мало информации, можно заменить их тип в базе на строковый, а длину Вы подберёте исходя из Вашей задачи. Думаю, эффект может оказаться весьма заметным. Попробуйте.
Неизвестный
02.06.2009, 11:36
общий
ragnarog:
ее нужно создать в памяти, так как я сделал ее в БД и получил 6 секундное ожидание проработки операций с таблицей - удаление в ней предыдущего массива данных, заполнение новым массивом, чтение массива из таблицы - при этом строк в таблице было всего навсего 120 и каждое мемо поле было заполнено от 0 до 4 слов.

1. Это говорит о том, что у вас не верно реализована работа с Access.
2. MS Access не поддерживает временные таблицы
3. Откуда Вы знаете что база не требует сжатия? Вы её сжимали?

Медленная работа Access возможна если у вас множество (порядка сотни таблиц), или если БД имеет большой размер (данных может быть и мало, но давно не проводилось сжатие), если Много наворочено скриптов на VBA и работа идет посредством их.

Во всех остальных случаях - работа вполне нормальная. Разговор конечно идет о одном пользователе (это однопользовательская система, не смотря на то, что позволяет работать нескольким пользователям).

Делайте всё через TADOQuery - а управляющие запросы через TADOCommand.

Вы и так получаете массив данных в памяти при работе через ADO, т.к. там все основано на SQL.
Пересмотрите логику работы с БД.
Форма ответа