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

Вниз

Сервис и ADO   Найти похожие ветки 

 
DarekS   (2007-06-18 15:40) [0]

Сервис (Service Application) использует для доступа к БД Access компоненты ADO. Во время разработки компоненты корректно подключаются к базе. По сле запуска службы не возможно подключится путем установки Active:=true. Свойство всегда остается false. Сообщений об ошибке не поступает.
BDS 2006. Есть предположения?
П.С. Опыт не большой, не пинайте больно..


 
sniknik ©   (2007-06-18 15:52) [1]

> Сообщений об ошибке не поступает.
да ну? может ты их просто не видиш? т.к. службе запрещено взаимодействие с рабочим столом. пиши в лог.

скорее всего (частый глюк) забыл у коннекта поставить не запрашивать логин/пароль вот он и запрашивает... там где не видно. "до победного".

> П.С. Опыт не большой, не пинайте больно..
тогда почему сдесь, а не в начинающих?


 
DarekS   (2007-06-18 17:20) [2]

пароль-логин не запрашивает.
Во время разработки приложения проверяю соединение с базой. Вывожу содержимое таблицы гридом (для зрительной проверки). Все пучком. При пуске службы и последующей попытке активации свойство остается неактивным. При попытке пуска службы с активным соединением компоненты (ADOQuery, ADODataSet, ADOTable.Active:=true) ругается на отсутствие источника данных и драйвера по умолчанию. Хотя минутой раньше прекрасно отображал базу в гриде.. То же самое в обычном приложении работает без проблем.
Вопрос в этой ветке, т.к. у новичков врядли смогли бы мне помочь, а вопрос сугубо "базовый" , с другими компонентами сервис работает отлично..


 
sniknik ©   (2007-06-18 20:11) [3]

> пароль-логин не запрашивает.
было бы надежнее привести параметры показывающие что не запрашивает, чем словестные уверения. (в которые хоть "мамой клянусь все правильно сделал, а оно не работает" не поверю)

> При попытке пуска службы с активным соединением
этого нельзя делать не только в сервисах но и в простом приложении, во избежание различных "непонятных" эксцессов.

> а вопрос сугубо "базовый"
вот это врядли... судя по приведенному ADOTable, вопрос сугубо в "базовом профанстве".


 
Anatoly Podgoretsky ©   (2007-06-18 20:33) [4]

Ошибка сугубо в 17 строке.


 
Германн ©   (2007-06-19 00:28) [5]


> Вопрос в этой ветке, т.к. у новичков врядли смогли бы мне
> помочь,

В корне неверное представление о направленности коференции "Начинающие". Отвечают во всех конференциях одни и те же люди.


 
DarekS   (2007-06-19 11:09) [6]

Все такие вууумные.. :-))
Какой код приводить, если там всего 3 строчки?

ADODataSet1.ConnectionString:="Provider=MSDASQL.1;Password="";Persist Security Info=True;Data Source=SendMail_SQL";

ADODataSet1.CommandText:="select ID,data,flag from TB1";

    ShowMessage("Active- "+BoolToStr(ADODataSet1.Active));
ADODataSet1.Active:=true;
   ShowMessage("Active- "+BoolToStr(ADODataSet1.Active));

Для невнимательых:
ТОЧНО ТОТ САМЫЙ КОД в обычном приложении работает безупречно!

Глубокоуважаемый sniknik , если я ошибся в строке подключения (пароль или еще чего), то почему обычное приложение с такой же строкой подключения работает без проблем? Можете мне, скудоумному, объяснить этот феномен. У меня загвоздка не в подключении через ADO к базе Access, а в том ,что способ применяемый в обычном приложении не сработал в сервисе! Возможно вина самого BDS2006, проверю еще на Delphi6...
  Пасибо всем за активное участье :-))
П.С. Надеялся на опыт тех кто работал с ADO из-под сервиса BDS2006...


 
DarekS   (2007-06-19 11:11) [7]

После попытки
ADODataSet1.Active:=true;
сервис замирает..


 
Плохиш ©   (2007-06-19 11:21) [8]


> Data Source=SendMail_SQL

А это создано на закладке "User-DNS"... Чего ж ты хочешь, нету у пользователя, под которым запускается сервер, этого источника данных.


 
Сергей М. ©   (2007-06-19 11:26) [9]


> DarekS   (19.06.07 11:11) [7]


Явную инициализацию COM-подсистемы за тебя кто будет делать - Пушкин ?


 
sniknik ©   (2007-06-19 11:35) [10]

> Все такие вууумные.. :-))
> Какой код приводить, если там всего 3 строчки?
двух не хватает... инициализация COM, +разинициализвция. т.к. сервис это всеже не основной поток приложения.

+ конечно, нехватает еще обработки ошибок, которых как говоришь у тебя нет...
и вот это ShowMessage... лишнее т.к. ... см обьяснение [3].

> ТОЧНО ТОТ САМЫЙ КОД в обычном приложении работает безупречно!
вот я и думаю почему катер по городу не едет? ведь он ТОЧНО В ПОРЯДКЕ т.к. по морю идет в легкую...

> проверю еще на Delphi6...
не стоит не в дельфе ошибка, будет тоже самое.

> П.С. Надеялся на опыт тех кто работал с ADO из-под сервиса BDS2006...
а по вопросу и остальному (до [6] где есть хоть чтото) кажется что хочеш поговорить... иначе к чему "описательные" обьяснения вместо пары строк кода, что и описывает лучше и место кривотолкам не оставляет...


 
DarekS   (2007-06-19 11:55) [11]

Плохиш
Под одним и тем же пользователем создаю источник данных, запускаю обычные приложения и сервисы. Приложения через ADO работают c БД Access - а сервисы с той же строкой подключения, нет! Никакой закладки "User-DNS" не встречал, база вяляется на том же компе.. Проверяю подключение ,все ок! Или сервись надо пускать не "просто", а от какого то имени? Тогда, каким образом?

При чем COM-подсистема ? Я об этом впервые слышу :-)


 
DarekS   (2007-06-19 11:57) [12]

И кто мне расскажет про COM - подсистему..?
sniknik
я стал лаконичен, правда?


 
sniknik ©   (2007-06-19 12:06) [13]

> Никакой закладки "User-DNS" не встречал, база вяляется на том же компе..
подключение (строка) через ODBC, и хочеш сказать не видел где DSN создавал? юзеровский или системный.

> При чем COM-подсистема ? Я об этом впервые слышу :-)
самое время просветится.
а еще, раз спрашиваешь, перестань считать что знаеш что нужно для ответа. не "выкобенивался" бы, давно бы ктонибудь подсказал. нормально, кодом, а не "описательно" в ответ на "описательный" вопрос.

> я стал лаконичен, правда?
от тебя как раз требуется совсем другое. раз нужно тебе, то ты должен предоставлять ВСЮ необходимую инфу о том что там у тебя происходит/сделано, а если не знаеш что необходимо то просто ВСЮ.


 
Сергей М. ©   (2007-06-19 12:13) [14]


> При чем COM-подсистема ? Я об этом впервые слышу


Притом что ADO со стороны системы представляет собой СОМ-сервер астоматизации.

Почитай про CoInitialize/CoUninitialize.


 
Сергей М. ©   (2007-06-19 12:17) [15]


> DarekS


Самое печальное в твоей истории не незнание всяких там "инициализаций" (никто не может и не обязан знать все - на то есть справочники), а неумение и/или нежелание пользоваться встроенным отладчиком для локализации проблем в работе своего софта.


 
DarekS   (2007-06-19 12:29) [16]

Я опечалился :-(


 
Anatoly Podgoretsky ©   (2007-06-19 12:40) [17]

> DarekS  (19.06.2007 12:29:16)  [16]

Ты еще не так опечалишься


 
DarekS   (2007-06-19 12:58) [18]

И Вам того же :-))
"Пасибо, я Вас тоже очень люблю.."    (с) Масяня


 
DarekS   (2007-06-19 16:13) [19]

CoInitialize(NIL);
ADODataSet1:=TADODataSet.Create(nil);
ADODataSet1.Active:=false;
ADODataSet1.ConnectionString:="Provider=MSDASQL.1;Password="";Persist Security Info=True;Data Source=SendMail_SQL";
ADODataSet1.CommandText:="select ID,data,flag from TB1";
ShowMessage("Active- "+BoolToStr(ADODataSet1.Active));
try
ADODataSet1.Active:=true;
except
on E: EOleSysError do  ShowMessage(E.Message);
end;
ShowMessage("Active- "+BoolToStr(ADODataSet1.Active));
код приведен только для примера, сообщение об ошибке:

[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
это виноват CoInitialize не в том месте? Не похоже..


 
DVM ©   (2007-06-19 16:30) [20]

Пропиши попробуй в строке подключения явный путь к файлу бд.

AdoConnection.ConnectionString :=
  "Provider=Microsoft.Jet.OLEDB.4.0;"+
  "Data Source=" + ExtractFilePath(ParamStr(0)) + "db.mdb" + ";" +
  "Jet OLEDB:Database Password=;";


 
Плохиш ©   (2007-06-19 16:46) [21]


> DarekS   (19.06.07 11:55) [11]
> Плохиш
> Под одним и тем же пользователем создаю источник данных,
>  запускаю обычные приложения и сервисы.

Ну, ну, наивный чукотский мальчик...


 
sniknik ©   (2007-06-19 16:55) [22]

> это виноват CoInitialize не в том месте? Не похоже..
конечно не похоже, это проблему уже DSN-а одбсишного, либо не правильный либо не того юзера.

как это решишь, следующая проблема с логином/паролем, вводом. сколько про то не говорили, а в [19] нет нужной установки (и не может быть т.к. нет даже коннекта)

> код приведен только для примера
это радует.


 
DarekS   (2007-06-19 18:05) [23]

sniknik
  База без пароля. Обычные приложения работают с ней без логина\пароля.
Если дело в ODBC - DSN, то каким образом тот же код работает в приложении, а в сервисе выдает ошибку?
DVM
 Пасибо, проверим завтра, рабочий день закончился.. :-)
Кста, на сколько мне известно, ExtractFilePath(ParamStr(0))  с сервисом не прокатит.. (тоже надо проверить)


 
sniknik ©   (2007-06-19 22:00) [24]

> Если дело в ODBC - DSN, то каким образом тот же код работает в приложении, а в сервисе выдает ошибку?
разный юзер - разные права/настройки.

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


 
DVM ©   (2007-06-20 10:57) [25]


> DarekS   (19.06.07 18:05) [23]


> Кста, на сколько мне известно, ExtractFilePath(ParamStr(0))
>  с сервисом не прокатит..

Не прокатит само собой. Это я для примера просто написал. Свой путь вставь туда.


 
sniknik ©   (2007-06-20 11:03) [26]

> Не прокатит само собой. Это я для примера просто написал. Свой путь вставь туда.
по моему это вы путаете с dll. с чего бы это ему "не прокатывать"?


 
DVM ©   (2007-06-20 11:26) [27]


> sniknik ©   (20.06.07 11:03) [26]


> по моему это вы путаете с dll. с чего бы это ему "не прокатывать"?

Может быть и путаю. Вот автор сейчас придет и проверит.


 
DarekS   (2007-06-20 13:53) [28]

Запустил, работает. Могу спокойно ответить:
sniknik
1."т.к. службе запрещено взаимодействие с рабочим столом. пиши в лог"

не запрещено, прекрасно вывожу сообщения об ошибке ShowMessage(), главное чтоб свойство Interactive=true

2."> При попытке пуска службы с активным соединением..
этого нельзя делать не только в сервисах но и в простом приложении, во избежание различных "непонятных" эксцессов."

На этапе разработки и отладки пользуюсь этим постоянно и успешно :-)

3. "не хватает... инициализация COM, +разинициализвция. т.к. сервис это всеже не основной поток приложения."

Инициализация оказалась тут ни при чем.. :-)) Лишняя.

Сергей М.
"Почитай про CoInitialize/CoUninitialize."
Почитал, в даном случае не пригодилась.

Плохиш
Псба, не сразу догнал. С меня пиво!


 
DarekS   (2007-06-20 13:55) [29]

DVM
прокатило, псба :-)


 
DarekS   (2007-06-20 13:58) [30]

Следовало вместо пользовательского, создать системный источник данных.
Всего лишь :-)


 
sniknik ©   (2007-06-20 14:52) [31]

> не запрещено, прекрасно вывожу сообщения об ошибке ShowMessage(), главное чтоб свойство Interactive=true
т.к. этого нет в вопросе, но сказано что ошибки тоже нет, хотя она должна быть. почему не прокомментировано сразу? что стоило в ответ на "службе запрещено взаимодействие с рабочим столом" сказать, что разрешение стоит (???), что толку говорить об этом после того как проблема решена? "Могу спокойно ответить", это типа после драки кулаками махать, никому не интересно...

> На этапе разработки и отладки пользуюсь этим постоянно и успешно :-)
оно и видно насколько успешно.

> Инициализация оказалась тут ни при чем.. :-)) Лишняя.
причем, даже если ты этого не понимаешь. без инициализации COM попросту не работает.

> Следовало вместо пользовательского, создать системный источник данных.
> Всего лишь :-)
вообще следовало бы не создавать DSN, а отказаться от устаревшего ODBC, но да ладно. варианты давали, решение за тобой.


 
Однокамушкин   (2007-06-20 15:55) [32]


> sniknik ©   (20.06.07 14:52) [31]
> > Инициализация оказалась тут ни при чем.. :-)) Лишняя.
> причем, даже если ты этого не понимаешь. без инициализации
> COM попросту не работает.

Так ведь Application из сервиса никуда не девается, а именно он инициализирует COM, если в этом есть необходимость: SvcMgr.Application.Initialize вызывает Forms.Application.Initialize, а оттуда вызывается InitProc, которая в initialization модуля ComObj переопределяется так, что там будет вызов CoInitiualize... Так что вручную потом и в самом деле ничего инициализировать не надо...


 
sniknik ©   (2007-06-20 20:14) [33]

> Так ведь Application из сервиса никуда не девается ...
так вроде execute сервиса это отдельный поток от основного, а в отдельных нужно отдельную инициализацию. т.к. не дай гейтс будет другой, или вызов com модели из основного... одному "ядру" придется обслуживать два потока... вот тебе и непонятные эксессы.



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

Форум: "Начинающим";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.043 c
3-1176717144
NOD
2007-04-16 13:52
2007.07.15
Не могу разобраться с адо


6-1166441975
integerr
2006-12-18 14:39
2007.07.15
дание в POST запросе IdHTTP


2-1181996130
WhiteCat
2007-06-16 16:15
2007.07.15
Добавление записи в DBGrid


3-1176787182
Xmen
2007-04-17 09:19
2007.07.15
FastReport и данные из базы


1-1178897121
Dmitry_177
2007-05-11 19:25
2007.07.15
Можно ли в стандартном MessageBox-е добавить кнопку





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский