Как я могу убедиться, что BDE * .MB файлы удаляются, когда я заканчиваю sh мое Delphi приложение? - PullRequest
1 голос
/ 06 марта 2020

Я работаю над приложением Delphi 4 (не спрашивайте меня, почему, я уже знаю, что оно настолько старое, но мне пришлось, это сложнее объяснить, просто требования босса).

Это Delphi приложение создает много * .MB файлов при выполнении (все хорошо на данный момент), оно использует много TQueries, TUpdates SQL, TDataSource, так что я думаю, что это нормально. Но когда я закрываю это приложение, эти файлы должны быть удалены (но нет), затем, когда я открываю это приложение во второй раз (третий, четвертый и т. Д. c.), Оно создает все больше и больше файлов * .MB, в конце концов заканчивая с ошибкой: «Слишком много открытых файлов. Возможно, вам потребуется увеличить предел MAXFILEHANDLE в конфигурации IDAPI»

Я только что обнаружил в inte rnet, что вам нужно увеличить MaxFileHandles (I имеют значение 48) при:

 BDE Administrator:
 Configuration->System->INIT->MAXFILHANDLES

Это единственное решение? или есть еще один? Может кто-нибудь подсказать или удалить советы по удалению этих файлов, когда приложение закрыто?

1 Ответ

1 голос
/ 07 марта 2020

Правильно написанная и правильно используемая программа D4 не должна оставлять после себя файлы .MB, как вы описываете.

Я настоятельно призываю вас следовать описанной ниже процедуре, чтобы вы могли удовлетворить себя в этом заблуждении. Файлы MB не должны оставаться в обычном режиме; надеюсь, что как только вы это сделаете, будет достаточно просто выяснить, почему они остались позади в вашем деле.

  1. Создайте новую папку проекта, назовите ее D: \ Test on диск разработки и скопируйте в него файлы существующей базы данных Paradox. Я использовал базу данных Venues, которая в D7 (более ранней версии у меня нет) находится в папке Delphi Shared \ Data. Он состоит из файла данных Venues.DB, индекса Venues.PX и файла заметок Venues.MB. Если D4 не поставляется с базой данных Venues, используйте другую. Между прочим, смысл копирования файлов базы данных в новую папку проекта заключается в том, что база данных, скорее всего, будет повреждена в ходе следующих действий.

  2. Используя программу конфигурации BDE, создайте новый Стандарт, псевдоним Paradox указывает на папку проекта.

  3. Запустите D4 и создайте новый проект, который включает TDataBase, TQuery, TDataSource и TDBGrid для отображения базы данных TQuery. Установите для свойства TQuery SQL значение

    select * from venues

  4. Важное замечание: при сохранении проекта убедитесь, что свойство Connected в TDataBase имеет значение False и Свойство TQuery Active также имеет значение False. Вставьте код в событие FormCreate, чтобы открыть Query1

  5. Открыть окно CMD в каталоге вашего проекта.

  6. Скомпилировать и запустить программу.

  7. Пока программа открыта, выполните

    dir * .mb

    в приглашении CMD.

    Вы должны увидеть

Venues.MB

и файл с именем, например

_QSQ1.MB

, который является временным .MB файлом, который BDE открыл для Query1.

Закройте программу и повторите шаг 7.

Теперь вы должны видеть только

Venues.MB

, перечисленных в списке, потому что BDE Код закрыл и удалил временный файл .MB. Вот что должно произойти .

Запустите программу еще раз. и на этот раз, после того, как откроется форма, нажмите Ctrl-F2, чтобы сбросить ее (принудительно закрыть, не выполняя свой обычный код завершения работы.

Повторите шаг 7, и вы должны найти там два файла .MB

Venues.MB

и временный файл с именем, например

_QSQ1 .MB

, поскольку у кода BDE не было возможности удалить временный файл .MB

Если вы продолжите повторять шаги 9 и 10, вы обнаружите, что лишний файл .MB остался позади (с увеличивающимся числом в конце его имени), поэтому BDE в конечном итоге жалуется, что вы у меня закончились файловые дескрипторы.

Боюсь ваша задача состоит в том, чтобы выяснить, почему это происходит:

  • Возможно, вы просто нажали Ctrl-F2 для завершения программы, и в этом случае решение очевидно, не надо!

  • Иначе что-то должно быть не так, как программа закрывается. Это может быть любая из множества вещей, но только вы можете видеть свой код. Я хотел бы найти что-то вроде обработчика исключений, который был настроен в событии FormClose для подавления нежелательного исключения во время завершения работы. Такого рода «быстрое исправление», которое было предназначено, чтобы скрыть проблему, не находя и не устраняя проблему, вызывая ее довольно часто в эпоху D4.

Во всяком случае, удачи! С некоторой систематизацией c отладки, надеюсь, она вам не понадобится /

...