У Access недостаточно памяти для выполнения операции
Обновлено: 21.11.2024
В этой статье содержится код ошибки 2004, широко известный как Недостаточно памяти для выполнения этой операции, описанный как Недостаточно памяти для выполнения этой операции. Закройте ненужные программы и повторите попытку.
Информация об ошибке
Этот инструмент восстановления может исправлять распространенные компьютерные ошибки, такие как BSOD, зависания и сбои системы. Он может заменять отсутствующие файлы операционной системы и библиотеки DLL, удалять вредоносное ПО и устранять вызванный им ущерб, а также оптимизировать работу ПК для достижения максимальной производительности.
О Runtime Code 2004
Runtime Code 2004 возникает при сбое или сбое Microsoft Access во время его работы, отсюда и его название. Это не обязательно означает, что код был каким-то образом поврежден, а просто означает, что он не работал во время выполнения. Такая ошибка будет отображаться как раздражающее уведомление на вашем экране, если ее не обработать и не исправить. Вот симптомы, причины и способы устранения проблемы.
Определения (бета)
Здесь мы перечисляем некоторые определения слов, содержащихся в вашей ошибке, чтобы помочь вам понять вашу проблему. Эта работа еще не завершена, поэтому иногда мы можем дать неверное определение слову, так что не стесняйтесь пропустить этот раздел!
- Память. Используйте этот тег для управления памятью или решения проблем в программировании.
Признаки Code 2004: недостаточно памяти для выполнения этой операции
Ошибки во время выполнения происходят без предупреждения. Сообщение об ошибке может появиться на экране в любое время при запуске Microsoft Access. Фактически, сообщение об ошибке или какое-либо другое диалоговое окно может появляться снова и снова, если не принять меры на раннем этапе.
Могут быть случаи удаления файлов или появления новых файлов. Хотя этот симптом в значительной степени связан с заражением вирусом, его можно отнести к симптому ошибки времени выполнения, поскольку заражение вирусом является одной из причин ошибки времени выполнения. Пользователь также может столкнуться с внезапным падением скорости интернет-соединения, но опять же, это не всегда так.
(Только в иллюстративных целях)
Причины Недостаточно памяти для выполнения этой операции — код 2004
Во время разработки программного обеспечения программисты пишут код, предвидя возникновение ошибок. Однако идеальных дизайнов не бывает, так как даже при самом лучшем дизайне программы можно ожидать ошибок. Сбои могут возникать во время выполнения, если определенная ошибка не обнаружена и не устранена во время проектирования и тестирования.
Ошибки выполнения обычно возникают из-за одновременного запуска несовместимых программ. Это также может произойти из-за проблем с памятью, плохого графического драйвера или заражения вирусом. В любом случае, проблема должна быть решена немедленно, чтобы избежать дальнейших проблем. Вот способы исправить ошибку.
Методы ремонта
Ошибки во время выполнения могут быть раздражающими и постоянными, но это не совсем безнадежно, ремонт доступен. Вот как это сделать.
Если метод восстановления работает для вас, нажмите кнопку "Проголосовать" слева от ответа, это позволит другим пользователям узнать, какой метод восстановления в настоящее время работает лучше всего.
Этот форум перенесен в раздел вопросов и ответов Майкрософт. Посетите Microsoft Q&A, чтобы публиковать новые вопросы.
Отвечает:
Вопрос
В моей базе данных есть одна форма, которая вызывает у меня затруднения. Access сообщает мне: «Недостаточно памяти для выполнения этой операции. Закройте ненужные программы и повторите попытку», когда я пытаюсь открыть его. Форма не очень сложная, в ней есть кнопка копирования записи, кнопка добавления новой записи и поле поиска. Есть идеи, почему это плохо? Я полагаю, что мне просто нужно удалить и начать с нуля. Мне любопытно узнать, является ли это симптомом более серьезной проблемы. Я понимаю, что это довольно общий и расплывчатый текст, поэтому дайте мне знать, какая еще информация вам нужна.
Ответы
Я согласен с Бобом - это говорит о том, что форма повреждена. В какой момент вы получаете ошибку? Можно ли открыть форму в режиме конструктора? Если вы нажмете Ctrl-G, чтобы открыть редактор VBA и скомпилировать базу данных, вы получите какие-либо ошибки?
Я бы предложил удалить форму, сжать и восстановить базу данных (чтобы избавиться от любых ее остаточных фрагментов), скомпилировать базу данных и перестроить форму.
Джон В. Винсон/MVP
Все ответы
Я не гуру, но если бы раньше форма работала нормально, я бы предположил повреждение.
Бизсофтвер Боба Фитца
Должен согласиться — это звучит как повреждение формы, хотя я обычно получаю это, если у меня слишком много элементов управления или слишком много подчиненных форм в форме. Прежде чем начать с нуля, я пытаюсь переименовать форму, добавив OLD в конец имени, а затем скопировав форму и сохранив копию, используя старое имя. Иногда я пробую недокументированный Saveastext, а затем загружаю его обратно в свою базу данных. Кроме того, я могу исправить это, экспортировав его в другую базу данных, переименовав существующую форму, а затем импортировав форму обратно в мою базу данных.
Я согласен с Бобом - это говорит о том, что форма повреждена. В какой момент вы получаете ошибку? Можно ли открыть форму в режиме конструктора? Если вы нажмете Ctrl-G, чтобы открыть редактор VBA и скомпилировать базу данных, вы получите какие-либо ошибки?
Я бы предложил удалить форму, сжать и восстановить базу данных (чтобы избавиться от любых ее остаточных фрагментов), скомпилировать базу данных и перестроить форму.
Джон В. Винсон/MVP
Я получил сообщение об ошибке до того, как смог его открыть. Он также не открывался в режиме конструктора. Я сделал компиляцию VBA и получил несвязанную ошибку, но ничего для формы, которая не открывалась. Я удалил, уплотнил и отремонтировал, а затем перестроил. Кажется, теперь все работает нормально. Спасибо за помощь!
Это случается со мной время от времени.
Еще один совет: перед удалением формы вы можете перейти к модулю кода поврежденной формы в VBE и скопировать код.
Это избавляет вас от необходимости переписывать код формы.
Вот ссылка на книгу Аллена Брауна «Восстановление после порчи». Когда я получаю нехватку памяти, это происходит из-за того, что форма повреждена. Однако, если вы посмотрите на последнее предложение Аллена, использование SaveAsText/LoadFromText спасло меня от удаления формы и повторного создания формы. Я использовал это пару раз, и каждый раз это срабатывало.
Сожалеем, что вы потеряли работу.
Центры разработки
Учебные ресурсы
Сообщество
Поддержка
Программы
© Корпорация Майкрософт, 2022 г.
Проверка диспетчера задач указывает на наличие достаточного количества свободной памяти. Закрытие других открытых программ не имеет значения.
Это происходит время от времени и при различных обстоятельствах: иногда при сохранении дизайна формы или изменения кода VBA, иногда, когда несколько форм открыты и используются.
Если при попытке сохранить изменения дизайна возникает эта ошибка, объекты Access повреждены и не могут быть восстановлены.
Будем рады любым предложениям о том, что может быть причиной этого.
7 ответов 7
Возможно, проект VBA в интерфейсе пользователя поврежден. Вам нужно перестроить его с нуля, а затем использовать надлежащие методы кодирования Access:
в параметрах VBE отключите КОМПИЛИРОВАНИЕ ПО ЗАПРОСУ (см. статью Майкла Каплана о DECOMPILE, чтобы узнать, почему).
в параметрах VBE включите ТРЕБУЕТСЯ ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ.
в VBE настройте панель инструментов так, чтобы кнопка КОМПИЛЯЦИЯ была легко доступна (она находится в меню "Отладка"). Я также рекомендую добавить кнопку CALL STACK (из меню VIEW), так как она удобна для отладки ошибок в режиме прерывания. Смысл здесь в том, чтобы максимально упростить отладку и компиляцию.
настроив среду, просмотрите все модули вновь восстановленного проекта и добавьте OPTION EXPLICIT в начало каждого модуля, в котором он отсутствует. Затем скомпилируйте. Вы быстро обнаружите, где у вас неверный код, и вам нужно будет его исправить.
отныне при программировании компилируйте часто, после каждых двух или трех строк кода. Вероятно, я компилирую свой проект 100 или более раз в день при написании кода.
Периодически декомпилируйте проект, сжимайте и перекомпилируйте его. Это удалит всю грязь, которая накапливается во время обычной разработки.
Эти методы гарантируют, что код в неповрежденном проекте останется в максимально возможном чистом состоянии. Он ничего не сделает для восстановления уже поврежденного проекта.
Что касается того, как перестроить проект, я думаю, что я бы пошел радикальным путем, экспортируя все объекты с помощью Application.SaveAsText и импортируя их в новую пустую базу данных с помощью Application.LoadFromText. Это лучше, чем простой импорт из вашего существующего поврежденного внешнего интерфейса, поскольку импорт может импортировать поврежденные структуры, которые не переживут циклы SaveAsText/LoadFromText.
Я ежедневно программирую в Access, работая с нетривиальными приложениями, которые используют много кода, включая множество автономных модулей классов. Я не потерял ни одного объекта из-за повреждения кода за более чем 5 лет, и это было в те дни, когда я все еще использовал A97.
Надеюсь, праздники у всех прошли (или продолжаются) хорошо. Сегодня мой первый рабочий день, и я пошел, чтобы внести несколько изменений в одну из моих баз данных, но когда я пошел, чтобы открыть одну из форм в базе данных (и только эту форму), я получил сообщение об ошибке:
"Недостаточно памяти для выполнения этой операции. Закройте ненужные программы и повторите попытку."
Это отбросило меня назад, так как я использую очень легкую систему (память 1 ГБ, но загрузка 85 МБ). У меня был запущен Firefox с открытым GMail и CoolPlayer (малогабаритный MP3-плеер с открытым исходным кодом), который проигрывал некоторые мелодии. Все остальные формы открывались нормально, поэтому я закрыл Firefox, закрыл CoolPlayer и снова попытался открыть форму, но получил ту же ошибку.
Затем я решил закрыть Access (2003, SP2), быстро скопировать/вставить резервную копию и перезапустить Access. Я так и сделал, попытался открыть форму и получил ту же ошибку.
Затем я выполнил сжатие/восстановление, открыл Access, попытался открыть форму и все равно получил ту же ошибку.
Я искал людей с похожей проблемой (у некоторых она возникает часто) и наткнулся на страницу Microsoft, на которой проблема была описана как исправленная с помощью исправления, выпущенного после SP1. Поскольку я использую Access 2003 SP2, я чувствую себя довольно обескураженным.
Кто-нибудь уже сталкивался с этой проблемой?
Кто-нибудь знает, как восстановить эту форму?
ДиДжейкарл
Зарегистрированный пользователь.
Можно ли открыть форму в режиме конструктора? Если это так, посмотрите на открытые формы и события загрузки, я предполагаю, что там есть код, и код генерирует эту ошибку. Если есть код, поставьте точку останова, а затем попробуйте выполнить код по одной строке за раз с помощью ключа.
ипок
Нуб. Ну, в основном нуб.
Можно ли открыть форму в режиме конструктора? Если это так, посмотрите на открытые формы и события загрузки, я предполагаю, что там есть код, и код генерирует эту ошибку. Если есть код, поставьте точку останова, а затем попробуйте выполнить код по одной строке за раз с помощью ключа.
Нет, это настоящий мозговой удар для меня — я не могу открыть в дизайне, форме или предварительном просмотре.
Я думаю, что могу просто воссоздать форму из резервной копии и потратить некоторое время на повторное подключение функций кнопок. Сомневаюсь, что это займет больше времени, чем выяснение источника проблемы.
ДиДжейкарл
Зарегистрированный пользователь.
Нет, это настоящий мозговой удар для меня — я не могу открыть в дизайне, форме или предварительном просмотре.
Я думаю, что могу просто воссоздать форму из резервной копии и потратить некоторое время на повторное подключение функций кнопок. Сомневаюсь, что это займет больше времени, чем выяснение источника проблемы.
Значит, это связанная форма? Если он связан с таблицей или запросом, попробуйте открыть любой из них напрямую и посмотреть, возникает ли ошибка, но в конечном итоге я думаю, что лучше всего будет воссоздать ее заново.
ипок
Нуб. Ну, в основном нуб.
Тогда это связанная форма? Если он связан с таблицей или запросом, попробуйте открыть любой из них напрямую и посмотреть, возникает ли ошибка, но в конечном итоге я думаю, что лучше всего будет воссоздать ее заново.
Я открыл запрос, к которому была привязана форма, и все таблицы, связанные с запросом, и не обнаружил ошибок. Это хорошая новость, так как это, очевидно, простое повреждение формы, и я смог воссоздать форму без каких-либо проблем.
Я просто хотел бы знать, что произошло, чтобы (1) предотвратить это в будущем и (2) иметь возможность помочь другим, если проблема возникнет снова.
ипок
Нуб. Ну, в основном нуб.
Думаю, мне следует поднять это для некоторых обновлений.
Я только что отредактировал другую форму в той же базе данных и получил ту же ошибку, которая фактически убила эту форму.
Аппаратные переменные:
Dell Latitude D620 с
Intel Core 2 @ 2 ГГц
1 ГБ ОЗУ
2 флэш-накопителя Kingston по 1 ГБ подключены
Ноутбук подключен к розетке
Важные фоновые процессы:
Сканирование на вирусы McAfee (активно)
Агент Intel Wireless Connection
Активные программы:
Firefox с примерно 10 открытыми вкладками
Access 2003 SP2
CoolPlayer (MP3-плеер с малым объемом памяти)
Последние действия до симптоматического поведения:
открыл 2 формы, работаю над одной в режиме конструктора
скопировал 4 прямоугольника
сделал 3 кнопки (следующая запись, предыдущая запись, сохранить запись)
Открытые свойства заголовка, скопированный цвет, открытые свойства нижнего колонтитула, вставленный цвет
Сохраненная форма
Закрытая форма
Открытая основная форма
нажал кнопку, чтобы открыть форму, над которой я работал
получил сообщение об ошибке.
ипок
Нуб. Ну, в основном нуб.
Дополнительная информация. Я только что проверил антивирусный сканер, и он выполнял фоновое сканирование примерно за 5 минут до возникновения ошибки. Сканирование выполняется автоматически и находится вне моего контроля, поскольку я вынужден использовать учетную запись с ограниченными правами доступа на этом школьном ноутбуке.
Я не удивлюсь, если ошибка и сканирование связаны.
Райд
Новый участник
Я также столкнулся с этой проблемой, и похоже, что она возникает при копировании данных из одной формы в другую. Я заметил, что вы копируете ящики, и поэтому я думаю, что это виновник. Чтобы избежать этого, я думаю, вам нужно будет создать эти блоки, а не копировать их.
Ригби
Новый участник
Я согласен, что это может быть связано с добавлением ящиков. Просто сегодня со мной такое впервые случилось. Все шло отлично, пока я не решил добавить в свой отчет флажок Да/Нет. Как только я добавил флажок (используя панель инструментов) в раздел сведений, все заблокировалось для меня. Я перезапустил Access и попытался открыть отчет только для того, чтобы получить сообщение об ошибке, независимо от того, какое представление я пытаюсь использовать. Если кто найдет исправление, отпишитесь. Сейчас я собираюсь воссоздать свой отчет.
ипок
Нуб. Ну, в основном нуб.
Я согласен, что это может быть связано с добавлением ящиков. Просто сегодня со мной такое впервые случилось. Все шло отлично, пока я не решил добавить в свой отчет флажок Да/Нет. Как только я добавил флажок (используя панель инструментов) в раздел сведений, все заблокировалось для меня. Я перезапустил Access и попытался открыть отчет только для того, чтобы получить сообщение об ошибке, независимо от того, какое представление я пытаюсь использовать. Если кто найдет исправление, отпишитесь. Сейчас я собираюсь воссоздать свой отчет.
В качестве обновления, я не нашел решения ни с помощью собственных экспериментов, ни с помощью других. Я только что узнал, что самый быстрый способ восстановиться — это смириться и воссоздать форму. =\
дядя
Зарегистрированный пользователь.
Если база данных находится в сети и вы используете беспроводную связь для подключения к ней. Не надо! Беспроводная связь может привести к повреждению.
Вот хороший сайт Аллена Брауна о повреждении базы данных.
И хотя у вас все еще есть доступ к базе данных, используйте средство проверки базы данных.
Привет всем!
Надеемся, что праздники у всех прошли (или продолжаются) хорошо. Сегодня мой первый рабочий день, и я пошел, чтобы внести несколько изменений в одну из моих баз данных, но когда я пошел, чтобы открыть одну из форм в базе данных (и только эту форму), я получил сообщение об ошибке:
snip .
ЦИТАТА]
джазджефф
Новый участник
Ошибка памяти — первые мысли
Кто-нибудь знает, как решить проблему с ошибкой памяти, забыть о репликациях и т. д. Когда я вхожу, чтобы сделать какое-либо существенное редактирование формы или отчета, доступ просто отключается, и форма или отчет становятся непригодными для использования. Теперь я нажимаю «Сохранить» после каждого небольшого изменения, которое я делаю, но это такой смешной способ программирования. У нас 2003, установлено исправление sp3 для ошибки памяти от msft.
Джефф
Регистрация на e-vents
zeLounge
Новый участник
привет.
хорошо. Я сталкивался с такими проблемами в некоторых случаях. Мне как-то удалось создать новую базу данных проекта и импортировать все из неисправной. Также возникла проблема с зависанием доступа к определенному объекту (отчет, форма, запрос) при импорте, что предложило мне не импортировать этот объект и восстановить остальные.
Я также отметил, что во время разработки устранение неполадок с формой (например), ее запуск и одновременное исправление кода могут привести к некоторой внутренней путанице и невозможности сохранить мои изменения (получение той же ошибки как получится). Я иногда решаю эту проблему после повторного открытия БД, вырезая весь код формы и вставляя его обратно. кажется, что это принудительный доступ для повторной инициализации свойств события формы. и решить проблему.
во время разработки есть несколько вещей, которые я делаю довольно часто:
- сохранение (очевидно, в среднем каждые 10 минут)
- вырезание, повторная вставка кода (всякий раз, когда поведение не соответствует объект, который должен быть завершен, пока)
- копировать-резервировать БД 2-3 раза в день (я написал небольшую подпрограмму, чтобы скопировать все через оконную оболочку с датой и увеличивающимся числом, добавленным в имя файла) (с оболочкой это быстро, и мне не нужно закрывать БД)
- декомпилировать, сжимать-восстанавливать, повторно открывать (всякий раз, когда я замечаю, что БД слишком сильно увеличивается, с 50 МБ до 200 МБ. Иногда я делаю дважды)
Я привык к этим задачам. и так как у меня было очень мало проблем.
The_Doc_Man
Неумеренный модератор
Вы говорите, что используете систему с ограниченными привилегиями, поэтому это может быть невозможно. Однако иногда проблема не в физической памяти, а в виртуальной памяти. Проверьте соответствующий диск, чтобы убедиться, что он заполнен. Если это так, выполните некоторую очистку диска.
Если нет, попросите администратора проверить, сколько места подкачки выделено, так как у вас также может не хватить пространства подкачки (это влияет на самое большое виртуальное пространство, которое вы можете определить).
Гизер
Зарегистрированный пользователь.
Похожая проблема
Только что возникла похожая проблема после попытки изменить код в мастер-форме.
Посмотрев на размер поврежденной БД, он сократился с ~74 МБ до 456 КБ
К счастью, у меня есть резервные копии БД.
Пэт Хартман
Супер модератор
Я сталкиваюсь с этим с удивительной частотой. В моем случае проблема обычно возникает из-за добавления элемента управления и последующего удаления прикрепленной к нему метки.Если вам нужно сделать это, добавьте элемент управления, ЗАКРЫТЬ форму, затем снова открыть форму и удалить метку, снова ЗАКРЫТЬ форму и снова открыть, чтобы продолжить работу. Просто сохранить форму недостаточно. На самом деле вам нужно закрыть форму.
Гайка с воздушным_охлаждением
Зарегистрированный пользователь.
Я открыл свой .mdb с плохой формой, зашел в редактор Visual Basic в Access (Alt + F11), открыл окно Immediate (Ctrl + G для Access 2007) и набрал следующее:
Application.SaveAsText acForm, "ContractCloseout", "C:\zzRevive"
где "ContractCloseout" — это имя моей формы, которую я потерял, а "C:\zzRevive" — это путь к файлу для сохранения формы как текст. Затем я открыл новую базу данных, зашел в редактор VB, окно Immediate и набрал:
Application.LoadFromText acForm, "ContractCloseout", "C:\zzRevive"
и свою форму во всей ее полноте. слава, вернулся и со своим кодом VB!!
Итак, вы можете экспортировать форму в виде текстового файла (Application.SaveAsText), удалить вызывающую ошибку форму (я щелкнул ее правой кнопкой мыши и выбрал "Удалить"), зайти в VBE, открыть окно Immediate, и импортируйте только что сохраненный текстовый файл (Application.LoadFromText). Готово!
Я всего лишь пользователь Access среднего уровня и редко бываю здесь, так что это вся помощь, которую я могу предложить, но эта тема всплывала во многих поисках без решения, поэтому я предлагаю это проверенное решение. Удачи!
DCrake
Вспомнил
Чтобы продолжить с последнего потока, синтаксис немного нарушен. Чтобы сохранить форму в виде текстового файла, вам нужно
Затем для получения формы используйте
Не забудьте удалить неправильное название формы перед загрузкой нового из текста. Также стоит выполнить сжатие и восстановление, а затем выйти из Access. Повторно откройте mdb и загрузите форму из текстового файла.
Если вам необходимо предоставить документацию для вашего приложения, вы можете использовать эту технику для создания текстовых файлов, содержащих всю информацию о ваших формах. Затем, если кто-то изменит вашу форму в любой момент или она станет поврежденной, вы сможете восстановить ее из текстового файла. Вы можете проявить большую изобретательность и создать базу данных поддержки, похожую на таблицу MSysObjects, содержащую список всех ваших объектов и сохраняющую содержимое текстовых файлов в поле memo.
Читайте также: