Для начала, давайте принимать заверенную:Как обрабатывать ошибки инициализации компонентов без проектирования?
Вы создать новый проект приложения VCL в Delphi и поставить TIBDataBase
и введите путь и имя файла базы данных с расширением .IB
ок?
Теперь, если вы просто поместить example.ib
и оставить путь позади, при выполнении приложения без Delphi, он будет открыть базу данных, как правило, если .EXE
находится в том же пути, что и .IB
, но если вы запустите приложение из Delphi, это вызовет ошибку, потому что не может найти файл базы данных, потому что Delphi изменяет рабочий каталог.
Иногда вы хотите оставить Active
свойства этого компонента, установленного в True
во время разработки, и их набор для False
и изменить его во время запуска приложения, когда вы доставить к вашему клиенту. Все это, потому что он может захотеть установить другой путь, и ваше приложение должно найти подходящее место в базе данных, прежде чем открыть его.
Проблема возникает, когда вы уже доставили клиенту и по-прежнему вносили изменения в код. Затем вам нужно развертывать не реже одного раза в день, и когда-нибудь вы просто забудете вернуть это свойство в False
, и когда клиент получает обновление и пытается его запустить, он/она получает ошибку не найденной базы данных.
Вопрос в том, как я могу справиться с этой ошибкой, если это открытие происходит автоматически, когда компонент загружен в память, а активация базы данных не происходит в моем собственном коде?
* Соответствующий * ответ заключается в том, чтобы перед установкой установить значение «Актив» на false. Если этого недостаточно, то, возможно, создайте события, которые вызывают сообщение, напоминающее вам об отключении его? –
Я имею в виду, это как просить, как распознать вашу программу, когда вы допустили ошибку, и исправить ее для вас. Я ошибаюсь? Совет. Не упоминайте ничего в своем вопросе о вашем конкретном сценарии базы данных. Держите его простым и точным, об улавливании исключений из элементов управления во время создания формы. –
Такие вещи, как 'function IsDebuggerPresent: boolean; stdcall external 'kernel32.dll'; 'являются инструментами для нас, разработчиков, для работы с этим сценарием, который я только что объяснил. Проекты, которые мы делаем или исправляем, пока пользователь все еще работает, очень распространены.Забыть выключить некоторые из наших инструментов не редко (и это не грех) и может нанести ущерб пользователю, например, он/она получает заказы клиентов в McDonalds. Считаете ли вы это, прежде чем судить о моем вопросе? – PSyLoCKe