Служба, подключение к SQL Server

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Служба, подключение к SQL Server

Сообщение jsa » 25.09.2019 09:52:56

Всем здравствовать.
Lazarus 1.8.0
Разбираюсь с созданием службы для windows
по статье http://www.freepascal.ru/article/lazaru ... 403120204/

В целом работает, создал и запустил службу которая открывает при старте файл на диске и пишет туда ДатуВремя раз в 10 секунд по таймеру.
Сложности начались при попытке подключиться к MS SQL Server
Закомментил весь код почти и определил в чем проблема, опишу только финальную точку на которой видно проблему.

1. у daemonunit есть дата модуль назвал его DM и накидал туда компонент
т.е. получается так
type TDM = class(TDaemon)
MSSQLServ: TMSSQLConnection;
Select: TSQLQuery;
SQLTrans: TSQLTransaction;
Timer1: TTimer;
var DM: TDM;

2. Если в daemon_unit я пишу MSSQLServ.HostName:='127.0.0.1'; то скомпилированная служба запускается и работает
3. Если я выношу MSSQLServ.HostName:='127.0.0.1'; в другой модуль sql_unit где пишу daemon_unit.DM.MSSQLServ.HostName:='127.0.0.1'; или DM.MSSQLServ.HostName:='127.0.0.1';
то служба при попытке запуска долго думает и вылетает с ошибкой, о том что во время не ответила.
в uses оба модуля друг другу прописаны.

При этом, когда я тестировал запись в файл то пользовался процедурами из другого модуля writelog_unit и это работало, но в случае с компонентой расположенной в ДатаМодуле "демона" это приводит к ошибке.

Получается что к компонентам из разных модулей в случае служб нельзя обращаться?
jsa
постоялец
 
Сообщения: 106
Зарегистрирован: 28.11.2017 13:46:04

Re: Служба, подключение к SQL Server

Сообщение Ichthyander » 25.09.2019 11:48:53

Думаю дело не службе/MSSQL и т.д. Вопрос в очередности вызова модулей. Просто подключение где-то происходит до того, как серверу прописывается HostName
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 505
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Служба, подключение к SQL Server

Сообщение jsa » 25.09.2019 12:16:19

Ichthyander писал(а):Думаю дело не службе/MSSQL и т.д. Вопрос в очередности вызова модулей. Просто подключение где-то происходит до того, как серверу прописывается HostName

Нет никакого подключения. Проверил, в компонентах адреса пустые и не стоит галка connected

P.S. Да и не понятно как может сработать ваше предположение.
jsa
постоялец
 
Сообщения: 106
Зарегистрирован: 28.11.2017 13:46:04

Re: Служба, подключение к SQL Server

Сообщение Ichthyander » 25.09.2019 14:49:41

Я делал службы (но без DataModule), так вот служба запускается в отдельном потоке, отличном от потока самой программы. Возможно в этом деле. Все переменные, которые могут меняться заключаю в критические секции, либо читаются в событии OnStart, onStop, либо переменные, которые не могут менятся другими потоками в этот момент. Может это поможет в локализации Вашей проблемы
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 505
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Служба, подключение к SQL Server

Сообщение jsa » 26.09.2019 13:25:57

Сделал создание компоненты динамически, в том же модуле откуда обращался к DM, работает.
jsa
постоялец
 
Сообщения: 106
Зарегистрирован: 28.11.2017 13:46:04

Re: Служба, подключение к SQL Server

Сообщение olegy123 » 26.09.2019 13:32:21

jsa писал(а):Получается что к компонентам из разных модулей в случае служб нельзя обращаться?

Все ваши проблемы из-за Application.

Добавлено спустя 3 минуты 40 секунд:
в этом модуле устанавливается и запускается главный поток.
Вне его - сами пишите потоко-безопасный код, с вызовами WinAPI Базовая служба Windows в C++
olegy123
энтузиаст
 
Сообщения: 1488
Зарегистрирован: 25.02.2016 12:10:20


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru