Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Вниз

активный ADO connection при запуске аппликации   Найти похожие ветки 

 
a_smith   (2002-09-17 14:36) [0]

Коллеги! Имеет место следующая ситуация:
1. Аппликация использует ADO-компоненты для доступа к СУБД
2. Компоненту TADOConnection в дизайнере задана ConnectionString с параметрами, используемыми при разработке
3. Иногда, например после модификации структуры таблиц, TADOConnection остается в активном состоянии и аппликация по недосмотру может в таком виде уйти заказчику. Результат - при запуске сообщение о невозможности соединиться с сервером (TADOConnection.Connected:=True и присоздании модуля данных сразу выполняется коннект), затем штатный LogonDialog, вводятся правильные параметры соединения и успешный запуск.
4. При использовании BDE достаточно было в конструкторе модуля данных сразу после ввхода в него убить коннект, задать правильные параметры и все было ОК, поскольку инсталлятор аппликации сразу прописывал в BDE-алиас правильное имя сервера
5. С ADO выход пока не найден; прверялись варианты с использованием событий BeforeConnect, WillConnect, с перекрытием метода AfterConstruction модуля данных.
На мой взгляд, единственный выход - вмешиваться к вычитывание ресурса модуля данных при его создании и сбрасывать значение считанного свойства TADOConnection.Connected.
Может ли кто-нибудь предложить более простое и изящное решение этой проблемы.


 
3JIA9I CyKA   (2002-09-17 15:25) [1]

1) ПРИЛОЖЕНИЕ!
2) Пишите в реестр при установке.
3) Читайте при запуске.
4) Удачи.


 
sniknik   (2002-09-17 15:42) [2]

сделай *.udl файл и всегда используй его в ConnectionString, храни его рядом с exe - шником, легко перенастроить на правильные значения.


 
a_smith   (2002-09-17 16:11) [3]

Вы оба невнимательно прочли описание проблемы. Все это уже есть! Но проблема не втом, где хранить и откуда брать параметры запуска, а в том что коннекция осталась активной в момент компилляции и при запуске в другой среде такая аппликация СРАЗУ же попытается соединиться с сервером, которого скорее всего просто нет. А держать строку соединения при разработке очень удобно - часто нужно перечитать метаданные и прочие вещи.


 
sniknik   (2002-09-17 16:19) [4]

а ты не внимателен к ответам.
если она СРАЗУ же пытается соеденится то перестрой параметры в udl файле и нехай соеденяется ведь параметр уже будет правильный.


 
Андрей Прокофьев   (2002-09-17 16:25) [5]

Вариант с UDL файлом - хорошее решение.
В design
Connection.ConnectonString := "FILE NAME=D:\XXX\Default.udl";

"Коннекция" хоть и будет активной но соединяться будет с параметрами из UDL файла


 
Андрей Прокофьев   (2002-09-17 16:29) [6]

Хотя нет!
Стоит только поставить в design Active := true, как в ConnectionString записываются данные из UDL!


 
sniknik   (2002-09-17 16:40) [7]

А если опять в фалсе поставить?


 
Андрей Прокофьев   (2002-09-17 16:43) [8]

Тогда опять хорошо, но они как раз и забывают это сделать :)


 
sniknik   (2002-09-17 16:48) [9]

да это не важно поверь. забудут будет брать из UDL ,он тебе при активном соеденении просто строку показывает для удобства а на самом деле как поставил UDL так оно и будет.


 
Андрей Прокофьев   (2002-09-17 16:57) [10]

>> sniknik ©
Да!!! в DFM файле все OK!
Мы же этим пользуемся, но что-то товарищ иеня смутил.


 
wicked   (2002-09-17 19:30) [11]

ужас.....
а нельзя ли всё таки потрудиться и проконтролировать, чтоб к заказчику программа шла в нужном виде?....


 
Balu   (2002-09-17 19:53) [12]

Описываем метод TADOConnection.BeforeConnect.
procedure TDataModule1.ADOConnection1BeforeConnect(Sender: TObject);
begin
ADOConnection1.ConnectionString :=
"Provider=SQLOLEDB.1;Persist Security Info=False;"+
"Initial Catalog="+ BaseName +
";Data Source="+ ServerName +";Locale Identifier=1049;"+
"Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;"+
"PASSWORD="+ Password +
";User ID="+ UserName ;
end;


Что то храню в ini файлах, что то спрашиваю у клиента (тут же можно вызвать окно запроса юзвера и пароля) и подставляю.

Может быть я не прав (или делаю не эфективно), но работает.


 
a_smith   (2002-09-17 20:39) [13]

К сожалению мне вариант c UDL-файлами как раз и не подходит - система при старте читает из реестра список доступных серверов и их заранее заданные характеристики соединения, далее форматируется строка соединения и делается коннект. При этом оператор при старте имеет возможность выбрать нужный в данный момент сервер.
Что же касается ужаса, то да, согласен, это ужас. Но в ситуации, когда версии вылетают мылом через час-два, избежать этого просто невозможно.


 
wicked   (2002-09-17 20:58) [14]

2 a_smith
:)
кстати, для того, чтоб хоть немного уменьшить этот ужас, я поступал так: в обработчике OnCreate модуля данных формировал ConnectionString... без всяких закрытий коннекта - программа то запускается и он должен быть закрыт априорно.... тогда, если свойство Connected было установлено в true, программа просто вылетала с exception...
и чтоб этот способ сработал, надо хоть раз запустить программу перед тем, как отдавать её заказчику...


 
sniknik   (2002-09-17 21:51) [15]

ладно не подходит так не подходит как тебе такая идея.
Все ADO компоненты в модуле данных а не расбросаны по формам? тогда перенеси создание модуля (и подключение в случае оплошности) из заголовка программы

Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TDMod, DMod);
Application.CreateForm(TLogForm, LogForm);
Application.Run;

в событие от главной формы onShow например

procedure TMainForm.FormShow(Sender: TObject);
const once: boolean= true;
begin
if once then begin
LoadParameters(PAR_ALL);
Application.CreateForm(TDMod, DMod); //сюда к примеру
RunActive:= false;
ButtonsEnable(StartServer(true));
once:= false;
end;
end;

тогда у тебя будет время и на чтение строки и на запрос значений в случае чего и на формирование правильной с твоей точки зрения.

хотя хоть убей не понимаю почему UDL не подходит. Самый удобный вариант, пользователь сам может (по вашей подсказке) настраивать соеденение, вы можете менять программу а UDL будет старая лежать и ни каких дополнительных настроек. может ты не понимаеш возможностей? сделай пустой файл назови к примеру test.udl а после сделай двойной клик мышой на нем в проводнике.



 
a_smith   (2002-09-18 16:38) [16]

Естественно, модуль данных не создается в заголовке программы, а неком классе-стартере до создания всякого другого класса. И дело здесь не в том, что нужно "время и на чтение строки и на запрос значений" (это можно делать первой строкой в DPR-файле), а в том, что при создании модуля данных вычитывается его бинарный ресурс и когда завершается создание экземпляра TADOConnection, его свойство Active := true заставляет выполнять соединение с сервером. И это, заметим, еще ДО создания модуля данных, т. е. передать какие-либо параметры ему еще нельзя.
Вариант с UDL, повторюсь, не подходит. Наши пользователи просто не станут (трудно потребовать от чиновника, например, нотариальной конторы, навыков настройки даталинки) это делать, тем более по нашей подсказке. Тем более, что между нами 7 часовых поясов и нет примого контакта. Так что единственный выход - сканировать сеть на наличие доступных серверов, давать возможность выбора оного, выводить список доступных баз на нем, выбирать требуемую и все это запоминать при завершении, дабы не делать этого при следующем запуске.


 
sniknik   (2002-09-18 17:23) [17]

см
Balu © (17.09.02 19:53)
есть также у конекта также событие OnWillConnect то есть даже не до соеденения а только какое будет.
то есть масса способов подсунуть правильную строку или разорвать соеденение до попытки соеденения, токо это надо предусмотреть в програме а не кивать на BDE.

а вы батенька извиняюсь просто вые;%;:есь или сами не знаете чего хотите. ищете сложные способы чтобы оправдать собственную безалаберность.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
1-31752
Anar
2002-09-30 22:57
2002.10.10
Для тех кто играет в NFS


7-32020
VEG
2002-07-20 19:15
2002.10.10
Работа с LPT портом.


14-31950
Солнышко
2002-09-13 10:57
2002.10.10
Здесь есть неженатые?


8-31905
Groove
2002-06-09 15:27
2002.10.10
AVI


14-31998
Profi
2002-09-17 08:16
2002.10.10
Посоветуйте хороший форум по администрированию W2k





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский