Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.07;
Скачать: CL | DM;

Вниз

TService и СУБД.   Найти похожие ветки 

 
MaxIII   (2002-08-10 12:19) [0]

Нужно мне, чтобы сервис, кидал в БД данные.
Если создать просто сервис - то все ок.

Если добавить:

procedure Tsrv.ServiceExecute(Sender: TService);
var ass: TStringList;
begin
FWndHandle := AllocateHWnd(WndProc);
with verreq do begin hi := 1; lo := 1; end;
nn := WSAStartUP(Word(verreq), wsaDATA);
soc := socket(AF_INET, SOCK_DGRAM, 0);

addr.sin_family := AF_INET;
addr.sin_port := htons(UDP_PORT);
addr.sin_addr.s_addr := htonl(INADDR_ANY);
j1 := bind(soc, addr, sizeof(addr));
flag := 1;
j := WSAAsyncSelect(soc, FWndHandle, WM_ASYNCSELECT, FD_READ);

[b]dbMain := TDatabase.Create(nil);
dbMain.DataBaseName := "dbSMStat";
dbMain.LoginPrompt := False;
dbMain.AliasName := "SMStat";
quMain := TQuery.Create(nil);
quMain.DatabaseName := "dbSMStat";[/b]
if not (dbMain.Connected) then dbMain.Open;
while not Terminated do begin
ServiceThread.ProcessRequests(True);
end;
if FWndHandle <> 0 then DeallocateHWnd(FWndHandle);
closesocket(soc);
WSAcleanup;
flag := 0;
[b]quMain.Close;
quMain.Free;
dbMain.Close;
dbMain.Free;[/b]
end;
То валится с сообщением о невозможности запуска сервиса, если код засунуть не в OnExecute а куда нить внутрь, то он просто не исполняется. Замена на TADODB и т.п. ситуации не изменяет :(
Не поможите?


 
MaxIII   (2002-08-10 12:20) [1]

Нужно мне, чтобы сервис, кидал в БД данные.
Если создать просто сервис - то все ок.

Если добавить:

procedure Tsrv.ServiceExecute(Sender: TService);
var ass: TStringList;
begin
FWndHandle := AllocateHWnd(WndProc);
with verreq do begin hi := 1; lo := 1; end;
nn := WSAStartUP(Word(verreq), wsaDATA);
soc := socket(AF_INET, SOCK_DGRAM, 0);

addr.sin_family := AF_INET;
addr.sin_port := htons(UDP_PORT);
addr.sin_addr.s_addr := htonl(INADDR_ANY);
j1 := bind(soc, addr, sizeof(addr));
flag := 1;
j := WSAAsyncSelect(soc, FWndHandle, WM_ASYNCSELECT, FD_READ);

dbMain := TDatabase.Create(nil);
dbMain.DataBaseName := "dbSMStat";
dbMain.LoginPrompt := False;
dbMain.AliasName := "SMStat";
quMain := TQuery.Create(nil);
quMain.DatabaseName := "dbSMStat";

if not (dbMain.Connected) then dbMain.Open;
while not Terminated do begin
ServiceThread.ProcessRequests(True);
end;
if FWndHandle <> 0 then DeallocateHWnd(FWndHandle);
closesocket(soc);
WSAcleanup;
flag := 0;
quMain.Close;
quMain.Free;
dbMain.Close;
dbMain.Free;

end;
То валится с сообщением о невозможности запуска сервиса, если код засунуть не в OnExecute а куда нить внутрь, то он просто не исполняется. Замена на TADODB и т.п. ситуации не изменяет :(
Не поможите?



 
doomin   (2002-08-20 14:25) [2]

Если нужно просто, то зачем все так сложно делать? Создаешь New->Other->Service Application. Либо прямо на образовавшийся модуль либо на отдельный кидаешь TADOConnection. Садишься на нужные тебе события. Не забудь только строчку
OleCheck(CoInitialize(nil));
перед коннектом к серверу БД.
Дальше TADOCommand и там запросы на то что хочешь кинуть. Вроде работает - никаких проблем не было



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

Текущий архив: 2002.10.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
7-21279
maxim2
2002-07-28 18:08
2002.10.07
Как узнать координаты всех иконок на раб.столе


14-21233
Елена
2002-09-11 08:16
2002.10.07
Список последних документов в Windows


1-20994
Осирис
2002-09-26 12:28
2002.10.07
Наследование форм


4-21310
cherepovets
2002-08-12 12:23
2002.10.07
Выключение компа


6-21171
BorisMor
2002-08-03 12:05
2002.10.07
Рабочий URL