PDA

Просмотр полной версии : Работа сервиса и MySql



demon416
06.02.2009, 15:39
Есть база на MySql есть порга которая добавляет записи в таблицу, требуется написать сервис делающий тоже что и прога. Ворос: Сервис ну ни в какую не хочет писать ничего в базу (исходный код сервиса взят из проги)? как добиться этого от него ? какие настройки необходимы или возможно нужны другие компоненты? я использую ADOTable или ADOQuery.. Фактически сервис точно вылетает после строки типа ADOQuery.ExecSQL или ADOTable.Active:=true;
строка подключения взята из рабочей проги ...

Naeel Maqsudov
06.02.2009, 16:07
А по какому сигналу сервис должен это делать?
В программе, например, можно добавить кнопку и в обработчике события Click добавить запись. А от сервиса Вы что хотели бы получить?

demon416
06.02.2009, 16:26
Сервис в бесконечном цикле опрашивает прибор на ком порту и должен полученные данные заносить в базу данных

Naeel Maqsudov
06.02.2009, 16:31
Таких сервисов не бывает :)
Основной поток сервиса не сможет так работать.
В крайнем случае он просто повесит процесс service.exe.
Копайте в сторону TThread, либо средствами WinAPI создайте поток.
В этом потоке выполняйте опрос.

demon416
06.02.2009, 16:36
так и делается))
тем не менее не работает

Naeel Maqsudov
06.02.2009, 16:39
Я все-таки склонен считать, что не во взаимодействии с MySQL дело.
Вместо записи в базу поставьте запись в лог-файл, или хоть просто beep.
Если эта часть кода не выполняется, то надо разбираться почему.

demon416
06.02.2009, 16:48
работает с логом, не работает с mysql

Naeel Maqsudov
06.02.2009, 22:10
Ну, одно из двух: либо ошибка при переносе кода из приложения в сервис, либо некорректная работа с MySQL. В любом случае без исходного кода обсуждение бессмысденно.

BBB
09.02.2009, 09:58
(Возможно, сейчас скажу совсем не в тему, но вдруг поможет)
Может, дело в том, что в какой-то момент сервису нужен доступ к какому-то сетевому ресурсу? А сервисы, запущеные от учетной записи LocalSystem такого доступа не имеют. Сам с этой проблемой сталкивался, когда сервис должен был обращаться к сетевому диску. Проблема решалась только тем, что сервис запускался от какой-то другой учетной записи, имеющей соответсвующие права доступа.