![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TService и СУБД. [D5, D6, NT4, Win2k]
MaxIII © (2002-08-10 12:19:00)Нужно мне, чтобы сервис, кидал в БД данные.
Если создать просто сервис - то все ок.
Если добавить:
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 и т.п. ситуации не изменяет :(
Не поможите?
doomin (2002-08-20 14:25:00) [1]Если нужно просто, то зачем все так сложно делать? Создаешь New->Other->Service Application. Либо прямо на образовавшийся модуль либо на отдельный кидаешь TADOConnection. Садишься на нужные тебе события. Не забудь только строчку
OleCheck(CoInitialize(nil));
перед коннектом к серверу БД.
Дальше TADOCommand и там запросы на то что хочешь кинуть. Вроде работает - никаких проблем не было
MaxIII (2002-08-10 12:20:00) [2]Нужно мне, чтобы сервис, кидал в БД данные.
Если создать просто сервис - то все ок.
Если добавить:
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 и т.п. ситуации не изменяет :(
Не поможите?