-
Есть программа, работающая с бд MS SQL. Все компоненты для работы с базой собраны в DataModule. Соединение с помощью TADOConnection. При старте все соединения закрыты. ConnectionString создается динамически в процедуре DataModuleCreate, потом открывается соединение. Ошибки соединения обрабатываются в try...except. Когда сервер доступен, все работает. Но если при старте программы сервер недоступен, вылетает ошибка "сервер недоступен или отказано в доступе". Причем вылетает она после начала создания DataModule, но до начала выполнения процедуры DataModuleCreate. Как эту ошибку отловить?
-
> Причем вылетает она после начала создания DataModule, но до начала выполнения процедуры DataModuleCreate. вот тут оно вылетает, procedure TDataModule.AfterConstruction; begin if not OldCreateOrder then DoCreate; end; и зависит от параметра на форме OldCreateOrder, поставь тру будет вылетать в Create...
но вообще, ИМХО, не хорошо открывать конект к базе в создании форм... форма то (/двтамодуль) сама нужна, если конект не открыт? похоже да, раз ждешь продолжения работы. выдели соединение в отдельную процедуры, типа инициализации, и вызывай после создания.
-
Спасибо, попробую. Программа может коннектиться к серверу по умолчанию или к другому, указанному в настройках. Сначала она пытается коннектиться к этому другому, а если его нет -тогда по умолчанию. Поэтому и решил открывать коннект при создании датамодуля. Если не найден и сервер по умолчанию, программа закрывается вообще, послав сообщение об ошибке. Но получается, что она начинает искать сервер до того, как ей сказали , где искать...
-
Перед компиляцией программы надо установить свойство Connected в false. Тогда программа будет вести себя так как хотелось кодеру.
-
поставил OldCreateOrder true, ничего не изменилось.
-
Плохиш, ну не совсем же я дятел. Конечно, connected стоит в false, там и connectionstring не прописаны, они динамически создаются после чтения настроек.
-
Нашел корень зла. В свойствах компонентов ADOConnection, хотя и не были прописаны connectionstring, но в свойстве provider осталось sqloledb. Поменял его на Microsoft.Jet.OLEDB.4.0 и проблема решилась, программа перестала на старте искать sql сервер. Всем спасибо за внимание.
|