Помощь - Поиск - Пользователи - Календарь
Полная версия: Ошибка: Insufficient memory for this operation
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
ninja
Добрый день! Столкнулся с такой проблемой: пишу базу данных, появилась такая ошибка: Insufficient memory for this operation. Alias: <название бд>, причем когда компилирую проект все нормально ошибок нет, а когда запускаю из среды (F9) появляется эта ошибка, при нажатии на break открывается модуль DBTables и выделяется процедура:

procedure DbiError(ErrorCode: DBIResult);
begin
raise EDBEngineError.Create(ErrorCode);
end;


Такой вопрос, при закрытии проекта (возыв события OnClose()) память очищается? или нужно самому ее чистить?
Если не очищается, то каким образом ее чистить? вызовом деструктора приложения? или методом Free(), как выделять память под приложение и сколько? Если можно на примере. Заранее благодарен за помощь.
Client
Если ты создаешь что-то, то и удаляй сам.
Цитата
как выделять память под приложение и сколько
???
Лучше сделай пошаговое выполнение и отыскивай источник ошибки. Мне кажется, что тут дело совсем не в памяти...
volvo
В BDEAdmin какие значения стоят у SHAREDMEMSIZE и SHAREDMEMLOCATION?

Вот выдержка из хелпа к BDE:
Цитата
"Insufficient memory for this operation" ($2501)
Problem: Your application (or another BDE application) has exhausted the memory available to the BDE.
Solution:
1) Close all BDE applications.
2) Find the program BDEADMIN.EXE. This is usually in a directory somewhere under "\Program Files\Borland...".
3) Run BDEADMIN.EXE and click on the Configuration tab.
4) There should be an item in the treeview on the left side called "Configuration". If it's not expanded, expand it.
5) Next, expand the System entry below it. Under System, select INIT.
6) In the right-side window, find the entry called "SHAREDMEMSIZE". Change this value to 4096.
7) Next, click on the word "Object" in the main window's menu bar, and select Apply.
8) Answer "OK" to the confirmation to "Save all edits...".

You can now try to start your application again. If you still have trouble running the application and you are running Windows NT or Windows 2000, follow the same instructions above, but this time leave the SHAREDMEMSIZE property at 4096, and change the SHAREDMEMLOCATION property to "0x5BDE". Then apply the changes as before, and retry your application. If you still receive the same error, try changing SHAREDMEMSIZE to 8192. If the error continues to persist, you can also try "0x6BDE" for SHAREDMEMLOCATION. If the error still continues to persist, you can also try other values for SHAREDMEMLOCATION. (See solution for error $210D below.)

"Shared memory conflict ($210D)
Problem: The BDE is trying to use a location in memory that is already in use by the operating system or another application.
Solution:
1) Close all BDE applications.
2) Find the program BDEADMIN.EXE. This is usually in a directory somewhere under "\Program Files\Borland...".
3) Run BDEADMIN.EXE and click on the Configuration tab.
4) There should be an item in the treeview on the left side called "Configuration". If it's not expanded, expand it.
5) Next, expand the System entry below it. Under System, select INIT.
6) In the right-side window, find the entry called "SHAREDMEMLOCATION". Change this value to 5BDE.
7) Next, click on the word "Object" in the main window's menu bar, and select Apply.
8) Answer "OK" to the confirmation to "Save all edits...".

Other values that may also help solve this issue on NT or Windows 2000 are: 1000, 7000, and 7F00. If none of these values resolve the issue, you may try 2000, 3000, 4000, etc. or any values in between the specified ranges below for each operating system:
Windows 95/98: SHAREDMEMLOCATION = 9000 to FFFF
Windows NT/2000: SHAREDMEMLOCATION = 1000 to 7F00
It has also been reported by some users that removing or disabling the driver for a sound card on Windows NT can resolve the issue as well, but normally just "relocating" the BDE's memory pool using the SHAREDMEMLOCATION setting will suffice.
Попробуй сделать то, что написано в первом случае, то есть увеличить SHAREDMEMSIZE.
ninja
Владимир спасибо! Вроде все работает. Не стал создавать новую тему, написал тут... Подскажите из-за чего может возникнуть такая шибка: record locked by another user? Возникает когда запускаю приложение, добавляю записи в 2 таблицы, закрываю приложание и когда во вновь открытом приложении обращаюсь ко 2й таблице, появляется эта ошибка, в интернете нашел только то, что это из-за файла С:\PDOXUSRS.NET, решение проблемы перезапуск среды программирования и закрытие всех программ которые используют таблицы, когда перезапускаю приложение все равно появляется ошибка.
volvo
Цитата
решение проблемы перезапуск среды программирования и закрытие всех программ которые используют таблицы
Не только.

Во-первых, PDOXUSRS.NET может быть причастен к данной ошибке только если программа завершилась некорректно, если завершение программы было нормальным - PDOXUSRS.NET ни при чем, он не должен сохранять блокировку.

Во-вторых, если все-таки произошло некорректное завершение программы - только закрытия всех программ, использующих данную таблицу будет недостаточно. Для решения проблемы может понадобиться удалить файл PDOXUSRS.NET, что может потребовать дополнительные действия, вплоть до перезагрузки компьютера (сам этот файл может быть залочен).

Но мне кажется, что не надо пока ходить так далеко. Лучше покажи, как именно ты добавляешь записи в таблицу, и что происходит с момента добавления записи до момента закрытия программы. Начни с создания тестового проекта. Только добавление записей, ничего лишнего. Попробуй добавить что-то в таблицу, закрыть программу, открыть снова и попробовать обратиться к добавленной на предыдущем шаге записи.

P.S. Но я сразу говорю, во всем, что касается Парадокса - я могу помочь только теоретически, правтически проверять теперь негде. Когда-о давно, еще на Д6, я использовал BDE, но прошло очень много времени, и я перебрался на ADO (базы с доступом BDE уже не развивается, чего о базах, использующих ADO не скажешь smile.gif ). Я понимаю, что есть учебная программа, но... Помочь практически ничем не смогу. Только то, с чем сталкивался когда-то сам.
ninja
Владимир, не знаю чтобы я без Вас делал smile.gif у меня проект состоит из 2х форм, 1я форма авторизации (главная), а 2я отображение самой БД, чтобы постоянно не вводить логин с паролем, я 1ю форму временно отключил, но т.к. она главная корректно приложение не закрывалось, точнее я просто его некорректно завершал, поэтому и возникала ошибка, подключив обратно форму все отлично работает

Большое Вам спасибо !

P.S. В задании по написанию БД впринцыпе не сказано какими средствами пользоваться, просто уже начал делать на BDE. А если переходить на ADO, принцып обращения/подключения таблиц такой же, многое в программе нужно менять?
volvo
Не знаю, я никогда не переносил программы с одного метода доступа на другой. Просто следующий проект начни с использованием ADO, и посмотри, проще это будет или сложнее. smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.