Access недостаточно памяти для выполнения операции
Проверка диспетчера задач показывает, что свободной памяти достаточно. Закрытие других открытых программ не имеет значения.
Это происходит время от времени и при других обстоятельствах: иногда при сохранении изменений в дизайне форм или кода VBA, иногда при открытии и использовании нескольких форм.
Если при попытке сохранить изменения проекта и возникает эта ошибка, объекты Access повреждены и не могут быть восстановлены.
Любые предложения о том, что может быть причиной этого, будут очень приветствоваться.
Поскольку я знаю, что это либо формы, либо отчеты, которые, скорее всего, будут повреждены, я создал новую базу данных mdb и только импортированные таблицы (прилагается), запросы, скрипты (только один), модули и меню. Затем я использовал LoadFromText для импорта форм и отчетов через функцию, а затем выполнил обычную декомпиляцию / компиляцию и сжатие / восстановление и т. Д.
Пока что, дотроньтесь до дерева, у меня не было еще одного сбоя через несколько дней, поэтому я, вероятно, буду придерживаться этого метода восстановления.
Большое спасибо всем за ваши предложения.
Проект VBA в вашем интерфейсе, скорее всего, поврежден. Вам нужно восстановить его с нуля, а затем использовать правильные методы кодирования Access:
в опциях VBE отключите COMPILE ON DEMAND (подробнее о причине см . статью Майкла Каплана о DECOMPILE).
в опциях VBE включите ПЕРЕМЕННАЯ ПЕРЕМЕННАЯ ДЕКЛАРАЦИЯ.
в VBE настройте панель инструментов так, чтобы кнопка COMPILE была легко доступна (она находится в меню отладки). Я также рекомендую добавить кнопку CALL STACK (из меню VIEW), так как она удобна для устранения ошибок в режиме прерывания. Суть в том, чтобы сделать отладку и компиляцию как можно проще.
с этого момента, при программировании, часто компилируйте после каждых двух или трех строк кода. Я, вероятно, собираю свой проект 100 или более раз в день при кодировании.
периодически декомпилируйте ваш проект, сожмите и перекомпилируйте его. Это очистит любую грязь, которая накапливается во время регулярного развития.
Эти методы гарантируют, что код в не поврежденном проекте остается в максимально чистом состоянии. Это не поможет восстановить поврежденный проект.
Что касается того, как перестроить проект, я думаю, что я бы пошел радикальным путем экспорта всех объектов с помощью Application.SaveAsText и импорта их в новую пустую базу данных с помощью Application.LoadFromText. Это лучше, чем простой импорт из существующего поврежденного интерфейса, поскольку импорт может импортировать поврежденные структуры, которые не выдержат цикл SaveAsText/LoadFromText.
Я ежедневно программирую в Access, работая с нетривиальными приложениями, которые используют много кода, в том числе множество автономных модулей класса. Я не потерял объект для повреждения кода более 5 лет, и это было в тот день, когда я все еще использовал A97.
проверить Диспетчер задач показывает, что есть много свободной памяти. Закрытие других открытых программ не имеет значения.
это происходит спорадически и при разных обстоятельствах: иногда при сохранении дизайна формы или изменения кода VBA, иногда, когда несколько форм открыты и используются.
при попытке сохранить изменения дизайна, и эта ошибка возникает, объекты доступа повреждены и не могут быть восстановлены.
любые предложения о том, что может быть причиной этого, будут очень приветствоваться.
проект VBA в вашем интерфейсе, вероятно, поврежден. Вам нужно перестроить его с нуля, а затем использовать правильные методы кодирования доступа:
в параметрах VBE отключите компиляцию по требованию (см. статья Майкла Каплана о декомпиляции подробности почему).
в параметрах VBE включите требование объявления переменной.
в VBE настройте панель инструментов так, чтобы кнопка компиляции была легко доступный (он находится в меню Debug). Я также рекомендую добавить кнопку стека вызовов (из меню Вид), так как это удобно для отладки ошибок в режиме перерыва. Дело в том, чтобы сделать отладку и компиляцию как можно проще.
отныне при программировании компилируйте часто, через каждые две-три строки кода. Я, вероятно, компилирую свой проект 100 или более раз в день при кодировании.
периодически декомпилируйте свой проект и компактируйте и перекомпилируйте его. Это очистит любой crud, который накапливается во время регулярного развития.
эти методы гарантируют, что код в неповрежденном проекте остается в чистом состоянии по возможности. Он ничего не сделает для восстановления уже поврежденного проекта.
Что касается того, как перестроить проект, я думаю, что я бы пошел по радикальному пути экспорта всех объектов с приложением.SaveAsText и импорт их в новую пустую базу данных с приложением.LoadFromText. Это превосходит простой импорт из существующего поврежденного интерфейса, поскольку импорт может импортировать поврежденные структуры, которые не переживут цикл SaveAsText/LoadFromText.
I программа ежедневно в доступе, работает с нетривиальными приложениями, которые используют много кода, включая множество автономных модулей класса. Я не потерял объект для коррупции кода более 5 лет, и это было еще в тот день, когда я все еще использовал A97.
наткнувшись на этот мой старый пост, и видя, что у него был изрядный интерес, я подумал, что, может быть, обновление будет в порядке?
Итак, 2 года вниз по дорожке, делая много работы приложения 2007 года, а также более старые приложения 2003 (и даже '97), я нахожу, что 2007 менее подвержен действительно неприятным сбоям, чем 2003 - где определения объектов доступа (формы и отчеты esp.) будет легко поврежден.
Я по-прежнему следую предложениям 1-6 (выше) Дэвида-W-Fenton религиозно, хотя, плюс использование приложения.SaveAsText (см. предложение Тони Toews и ссылку выше).
в эти дни, будь то 97, 2003 или 2007 я работаю, если доступ дает любой намек на "странный | авария | бросая непонятные ошибки" etc, я делаю следующее:
- сразу закрыть приложение Access
- резервное копирование файла mdb / accdb
- откройте приложение удерживая [Shift] , так что ничего не работает
- экспорт всех объектов в виде текста с помощью приложения.SaveAsText (как еще одна резервная копия)
- закройте и снова откройте приложение с помощью переключателя / decompile
- перекомпилировать код VBA
- сделайте компакт / ремонт.
Это не решает все, но это значительно уменьшает количество искажений объектов доступа от того, что я могу наблюдать.
Я работала в магазине много лет, что б доступ к их платформе. Приложение в конечном итоге стало настолько большим, что оно начало поражать внутреннее ограничение памяти Access 2003. Они начали испытывать ту же самую проблему, что и вы. Как вы заметили, нет никаких внешних признаков проблем с памятью, когда это произойдет.
компания долго говорила с Microsoft о проблеме, и я считаю, что Microsoft в конце концов снабдил их заплаткой. Таким образом, вы можете поговорить с Microsoft об этом, если это звучит как аналогичная ситуация с тем, что вы испытываете, поскольку они могут предоставить вам тот же патч.
в конечном счете долгосрочное решение состоит в том, чтобы разбить приложение на более мелкие части. Переход на Access 2007 не помог; на самом деле, это ухудшило ситуацию, потому что Access 2007 имеет больше движущихся частей.
быстрое решение; гарантированный для работы:
открыть VBA ( Alt-F11 ) В окне непосредственно введите следующее:
вот и все :) надеюсь, это поможет другим!
вы работаете над этим MDB по сети? Это единственное, что я могу придумать, что может вызвать эту проблему.
поскольку я знаю, что это либо формы, либо отчеты, которые, скорее всего, будут повреждены, я создал новый mdb, и только импортированные таблицы (прикрепленные), запросы, скрипты (только один), модули и меню. Затем я использовал LoadFromText для импорта форм и отчетов через функцию, а затем сделал обычную декомпиляцию/компиляцию и компакт/ремонт и т. д.
до сих пор, прикоснитесь к дереву, у меня не было другой аварии в течение нескольких дней, поэтому я, вероятно, буду придерживаться этого метода восстановления.
большое спасибо всем за свои предложения.
Я сталкивался с этой проблемой много раз и, наконец, нашел решение, которое сработало. Я не знаю, что вызывает проблему, но я знаю, как ее решить.
обычно эта ошибка возникает при открытии формы. Что вам нужно сделать, это полностью воссоздать эту форму. Самый простой способ сделать это-сначала экспортировать форму в текстовый файл с помощью приложения недокументированной функции.SaveAsText. Затем вы удаляете форму из своей базы данных и повторно загружаете ее Приложение.LoadFromText.
Проверка диспетчера задач показывает, что имеется достаточно свободной памяти. Закрытие других открытых программ не имеет значения.
Это происходит время от времени и при других обстоятельствах: иногда при сохранении изменений в дизайне формы или кода VBA, иногда при открытии и использовании нескольких форм.
Если при попытке сохранить изменения проекта и возникает эта ошибка, объекты Access повреждены и не могут быть восстановлены.
Любые предложения о том, что может быть причиной этого, будут очень приветствоваться.
Поскольку я знаю, что это либо формы, либо отчеты, которые, скорее всего, будут повреждены, я создал новый mdb и только импортировал таблицы (прилагается), запросы, сценарии (только один), модули и меню. Затем я использовал LoadFromText для импорта форм и отчетов через функцию, а затем выполнил обычную декомпиляцию/компиляцию и сжатие/восстановление и т.д.
Пока что, дотроньтесь до дерева, у меня не было еще одного сбоя через несколько дней, поэтому я, вероятно, буду придерживаться этого метода восстановления.
Большое спасибо всем за ваши предложения.
Проект VBA в вашем интерфейсе, скорее всего, поврежден. Вам нужно восстановить его с нуля, а затем использовать правильные методы кодирования Access:
в опциях VBE отключите COMPILE ON DEMAND (см. статья Майкла Каплана о DECOMPILE , чтобы узнать, почему).
в опциях VBE включите ПЕРЕМЕННАЯ ПЕРЕМЕННАЯ ДЕКЛАРАЦИЯ.
в VBE настройте панель инструментов так, чтобы кнопка COMPILE была легко доступна (она находится в меню отладки). Я также рекомендую добавить кнопку CALL STACK (из меню VIEW), так как она удобна для устранения ошибок в режиме прерывания. Суть в том, чтобы сделать отладку и компиляцию как можно проще.
отныне, при программировании, часто компилируйте после каждых двух или трех строк кода. Я, вероятно, собираю свой проект 100 или более раз в день при кодировании.
периодически декомпилируйте ваш проект, сожмите и перекомпилируйте его. Это очистит любую грязь, которая накапливается во время регулярного развития.
Эти методы гарантируют, что код в не поврежденном проекте остается в максимально чистом состоянии. Это не поможет восстановить поврежденный проект.
Что касается того, как перестроить проект, я думаю, что я бы пошел радикальным путем экспорта всех объектов с помощью Application.SaveAsText и импорта их в новую пустую базу данных с помощью Application.LoadFromText. Это лучше, чем простой импорт из существующего поврежденного интерфейса, поскольку импорт может импортировать поврежденные структуры, которые не выдержат цикл SaveAsText/LoadFromText.
Я ежедневно программирую в Access, работая с нетривиальными приложениями, которые используют много кода, в том числе множество автономных модулей класса. Я не потерял объект для повреждения кода более 5 лет, и это было в тот день, когда я все еще использовал A97.
Перепрыгнув этот старый пост и увидев интерес к нему, я подумала, что обновление будет в порядке?
Таким образом, спустя 2 года, выполняя большую часть приложений 2007 года, а также более старых приложений 2003 года (и даже 97-го года), я обнаружил, что 2007 год менее подвержен действительно неприятным сбоям, чем 2003 год - когда определения объектов доступа (формы и отчеты особенно) будет легко испорчен.
Я все еще следую предложениям 1-6 (выше) Дэвида-В-Фентона неукоснительно, а также использую Application.SaveAsText (см. Предложение Тони Тоуэса и ссылку выше).
В наши дни, будь то 97, 2003 или 2007, над которыми я работаю, если Access дает любой намек на " странность | сбой | выбрасывание необъяснимых ошибок "и т. д., я делаю следующее:
- Немедленно закройте приложение Access
- Сделайте резервную копию файла mdb/accdb
- Повторно откройте приложение, удерживая нажатой клавишу [Shift], чтобы ничего не запускалось
- Экспортируйте все объекты как текст, используя Application.SaveAsText (в качестве другой резервной копии)
- Закройте и снова откройте приложение с помощью параметра/decompile
- Перекомпилируйте код VBA
- Сделайте компакт/ремонт.
Это не решает все проблемы, но значительно уменьшает количество повреждений объектов Access по сравнению с тем, что я могу наблюдать.
Проверка диспетчера задач показывает, что достаточно свободной памяти. Закрытие других открытых программ не имеет значения.
Это происходит спорадически и при разных обстоятельствах: иногда при сохранении дизайна формы или изменения кода VBA, иногда, когда несколько форм открыты и используются.
Если при попытке сохранить изменения дизайна возникает эта ошибка, объекты Access повреждены и не могут быть восстановлены.
Любые предложения о том, что может быть причиной этого, будут очень приветствоваться.
Поскольку я знаю, что это либо формы, либо отчеты, которые, скорее всего, будут повреждены, я создал новый mdb и только импортировал таблицы (прилагаются), запросы, сценарии (только один), модули и меню. Затем я использовал LoadFromText для импорта форм и отчетов через функцию, а затем выполнил обычную декомпиляцию / компиляцию, сжатие / восстановление и т. Д.
Пока трогаем дерево, у меня не было ни одного сбоя в несколько дней, поэтому я, вероятно, буду придерживаться этого метода восстановления.
Большое спасибо всем за ваши предложения.
Вероятно, поврежден проект VBA в вашем интерфейсе. Вам нужно перестроить его с нуля, а затем использовать правильные методы кодирования Access:
в параметрах VBE отключите КОМПИЛЯЦИЯ ПО ЗАПРОСУ (см. статью Майкла Каплана о DECOMPILE, чтобы узнать подробнее о Зачем).
в параметрах VBE включите REQUIRE VARIABLE DECLARATION.
в VBE настройте панель инструментов так, чтобы кнопка COMPILE была легко доступна (она находится в меню Debug). Я также рекомендую добавить кнопку CALL STACK (из меню VIEW), так как она удобна для отладки ошибок в режиме прерывания. Дело здесь в том, чтобы максимально упростить отладку и компиляцию.
отныне при программировании часто компилируйте после каждых двух или трех строк кода. Я, вероятно, компилирую свой проект 100 или более раз в день при кодировании.
периодически декомпилируйте свой проект, сжимайте и перекомпилируйте его. Это очистит от грязи, которая накапливается во время регулярного развития.
Эти методы гарантируют, что код в некоррумпированном проекте остается в максимально чистом состоянии. Он ничего не сделает для восстановления уже поврежденного проекта.
Что касается того, как перестроить проект, я бы пошел радикальным путем: экспортировал все объекты с помощью Application.SaveAsText и импортировал их в новую пустую базу данных с помощью Application.LoadFromText. Это превосходит простой импорт из существующего поврежденного внешнего интерфейса, поскольку импорт может импортировать поврежденные структуры, которые не выдержат цикла SaveAsText / LoadFromText.
Я ежедневно программирую в Access, работая с нетривиальными приложениями, использующими много кода, включая множество автономных модулей классов. Я не терял ни одного объекта повреждения кода более 5 лет, и это было в те времена, когда я все еще использовал A97.
Наткнувшись на этот мой старый пост и увидев, что он довольно интересен, я подумал, может быть, обновление будет в порядке?
Итак, через 2 года, выполняя много работы с приложениями 2007 года, а также со старыми приложениями 2003 года (и даже 1997 года), я обнаружил, что 2007 год менее подвержен действительно неприятным сбоям, чем 2003 год, когда определения объектов Access (формы и отчеты особенно) могут быть легко повреждены.
Я все еще неукоснительно следую предложениям 1-6 (выше) Дэвида-У-Фентона, а также использую Application.SaveAsText (см. Предложение Тони Тэйвса и ссылку выше).
Сейчас, будь то 97, 2003 или 2007, я работаю, если Access дает хоть какой намек на " странный | сбой | выдача необъяснимых ошибок "и т. д., я делаю следующее:
- Немедленно закройте приложение Access
- Сделайте резервную копию файла mdb / accdb
- Снова откройте приложение, удерживая [Shift], чтобы ничего не запускалось.
- Экспортируйте все объекты как текст с помощью Application.SaveAsText (в качестве еще одной резервной копии)
- Закройте и снова откройте приложение с помощью переключателя / декомпилировать.
- Перекомпилируйте код VBA
- Сделайте Компакт / Ремонт.
Это не решает всего, но значительно снижает количество повреждений объектов Access, которые я могу наблюдать.
Я много лет проработал в магазине, который выбрал Access в качестве платформы. В конечном итоге приложение стало настолько большим, что начало сталкиваться с ограничением внутренней памяти Access 2003. У них возникла та же проблема, что и у вас. Как вы заметили, когда это происходит, нет никаких внешних признаков проблем с памятью.
Компания долго говорила с Microsoft о проблеме, и я считаю, что Microsoft в конечном итоге предоставила им патч. Поэтому вы можете поговорить об этом с Microsoft, если это похоже на ситуацию, аналогичную той, с которой вы столкнулись, поскольку они могут предоставить вам тот же патч.
В конечном итоге долгосрочное решение - разбить приложение на более мелкие части. Переход на Access 2007 не помог; Фактически, это только усугубило ситуацию, потому что в Access 2007 больше движущихся частей.
Быстрое решение; гарантированно работают:
Открыть VBA ( Alt-F11 ) В ближайшем окне введите следующее:
Вот и все :) Надеюсь, это поможет другим!
Вы работаете над этим MDB по сети? Это единственное, о чем я могу думать, что могло бы вызвать эту проблему.
Я сталкивался с этой проблемой много раз и, наконец, нашел решение, которое сработало. Я не знаю, что вызывает проблему, но знаю, как ее решить.
Читайте также: