Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10824
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 7039
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1089
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Delphi и Lazarus

Номер выпуска:1658
Дата выхода:03.04.2014, 17:46
Администратор рассылки:Филатов Евгений Геннадьевич (Профессионал)
Подписчиков / экспертов:60 / 38
Вопросов / ответов:1 / 1

Консультация # 187795: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Есть приложение, база данных. При добавлении данных проблем не замечено, а вот при удалении данных, после 3-4 удалений появляется ошибка "Не достаточно памяти". В диспетчере задач видно что при каждом удалении растет объем занятой памяти приложением. В чем может быт...


Консультация # 187795:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Есть приложение, база данных. При добавлении данных проблем не замечено, а вот при удалении данных, после 3-4 удалений появляется ошибка "Не достаточно памяти". В диспетчере задач видно что при каждом удалении растет объем занятой памяти приложением. В чем может быть проблема? После закрытия приложения память освобождается. Использую БД Microsoft Access, подключение через ADOConnection, ADOTable, ну и для навигации использую DBNavigator1.

Дата отправки: 20.03.2014, 18:00
Вопрос задал: Владимир (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Филатов Евгений Геннадьевич (Профессионал):

Здравствуйте, Владимир!

По Вашим ответам в переписке удалось выяснить, что отображение таблицы производится на главной форме, а для изменения/удаления данных вызывается вторичная форма с выводом этой же таблицы. При этом перед вызовом формы редактирования на основной форме командой ADOTable.Edit список записей переводится в режим редактирования. В то же время во вторичной форме при каких-либо изменениях компонент DBNavigator автоматически вносит изменения в таблицу. Но, т.к. таблица в основной форме уже подготовлена для изменений, то фактически получается многопользовательский режим в одном приложении и все изменения не могут быть внесены до того, пока не закроются все открытые для изменения таблицы. При добавлении новых записей это не так страшно - в первичной форме их еще нет, но при удалении/редактировании оказывается, что данные записи уже заблокированы, и вся работа не может быть сохранена на диске. Наборы данных ADO используют на клиентской стороне локальн ый кэш для хранения данных и сделанных изменений. В этом режиме все сделанные изменения не передаются немедленно источнику данных, а накапливаются в локальном кэше. В момент выхода из формы редактирования и снятия в основной форме режима Edit производится обновление таблицы в базе. При этом все данные из оперативной памяти перегоняются на диск и в этот момент производится очистка временно сохраненных данных из оперативной памяти и ее освобождение. В том случае, если производится большой объем изменений во вторичной форме, то все это хранится в оперативной памяти, и в какой-то момент ее может не хватить и появится такая ошибка.
Решением проблемы послужит отказ от перевода таблицы в режим Edit перед открытием формы редактирования, т.к. в DBNavigator уже предусмотрен переход в режим изменений записей и автоматическое сохранение введенных данных при различных манипуляциях пользователя с введенными данными либо это нужно программно предусмотреть при закрытии формы редактирован ия и возврата на основную форму.

Хотелось бы еще написать вот о чем. В данном случае используется монопольный ( однопользовательский ) режим доступа к данным. Но в случае, когда на разных компьютерах будет запущено несколько таких приложений и некоторые пользователи будут находится на форме редактирования для внесения изменений в таблицу, может возникнуть такая же ситуация. Т.к. данные вносятся в базу только при выходе из формы, то на всех компьютерах они будут храниться в оперативной памяти.
В этом случае решением может быть использование SQL запросов на добавление/изменение/удаление записей. Таблицы используются только для отображения. При необходимости изменения/добавления открывается дополнительная форма с текстовыми полями, соответствующими данным в таблице. После ввода пользователем данных производится проверка ввода и запускается SQL-запрос Insert, Update или Delete соответственно. Т.к. выполнение запроса происходит значительно быстрее, чем блокировка записи перед редактированием, ожидание ввода пользователя и подтверждение вводимых изменений, то таблица или соответствующая запись блокируется на незначительное время, что позволит избежать трат оперативной памяти на хранение изменений таблицы. Но при этом желательно отслеживать факт изменения таблиц другими пользователями и своевременно обновлять содержимое таблиц.

С уважением.

Консультировал: Филатов Евгений Геннадьевич (Профессионал)
Дата отправки: 27.03.2014, 22:45
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


© 2001-2012, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А. | Гладенюк А.Г.
Версия системы: 2011.6.36 от 26.01.2012

В избранное