Главная страница
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.019 c
14-21217
asafr
2002-09-11 16:17
2002.10.07
Первый день на новой работе...


14-21212
Down
2002-09-10 12:37
2002.10.07
Настройка Оdigо


7-21282
987
2002-07-25 22:36
2002.10.07
Просто кошмар!!! Ln(X), где X < 0 вешает Win98


14-21225
Val
2002-09-11 14:16
2002.10.07
Win98: проблемы :(


1-21096
XED
2002-09-25 12:20
2002.10.07
Работа с Microsoft Word!!!