用 delphi 7 + winxp 写一个每隔 10秒 向access数据库插入一条记录的服务程序,用Tadoconnettion,Tadoquery,Timer三个控件unit hr;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls, DB, ADODB;type
TTVHR = class(TService)
adoCn: TADOConnection;
adoQy: TADOQuery;
Tmr: TTimer;
procedure TmrTimer(Sender: TObject);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;var
TVHR: TTVHR;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
begin
TVHR.Controller(CtrlCode);
end;function TTVHR.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;procedure TTVHR.TmrTimer(Sender: TObject);
begin
try
adoQy.SQL.Clear;
adoQy.SQL.Add('Insert into timecheck(Check_Time) values(#'+FormatDateTime('yyyy-MM-dd hh:mm:ss',Now())+'#)');
adoQy.ExecSQL;
except
showmessage('Can not connect db!');
end;
end;procedure TTVHR.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := true;
Tmr.Enabled := true;
end;procedure TTVHR.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
stopped := true;
Tmr.Enabled := false;
end;end.不能成功插入,程序会抛出异常 在 try 那块出错,弹出showmesage那个对话框。但是如果把改成select语句就可以顺利执行
try
adoQy.SQL.Clear;
adoQy.SQL.Add('select * from timecheck');
adoQy.Open;
adoQy.First;
showmessage(adoQy.FieldByName('OID').AsString);
except
showmessage('Can not connect db!');
end;
如果把这个服务程序改为应用程序,也可以顺利插入数据,是不是系统服务程序不能写文件只能读?
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls, DB, ADODB;type
TTVHR = class(TService)
adoCn: TADOConnection;
adoQy: TADOQuery;
Tmr: TTimer;
procedure TmrTimer(Sender: TObject);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;var
TVHR: TTVHR;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
begin
TVHR.Controller(CtrlCode);
end;function TTVHR.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;procedure TTVHR.TmrTimer(Sender: TObject);
begin
try
adoQy.SQL.Clear;
adoQy.SQL.Add('Insert into timecheck(Check_Time) values(#'+FormatDateTime('yyyy-MM-dd hh:mm:ss',Now())+'#)');
adoQy.ExecSQL;
except
showmessage('Can not connect db!');
end;
end;procedure TTVHR.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := true;
Tmr.Enabled := true;
end;procedure TTVHR.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
stopped := true;
Tmr.Enabled := false;
end;end.不能成功插入,程序会抛出异常 在 try 那块出错,弹出showmesage那个对话框。但是如果把改成select语句就可以顺利执行
try
adoQy.SQL.Clear;
adoQy.SQL.Add('select * from timecheck');
adoQy.Open;
adoQy.First;
showmessage(adoQy.FieldByName('OID').AsString);
except
showmessage('Can not connect db!');
end;
如果把这个服务程序改为应用程序,也可以顺利插入数据,是不是系统服务程序不能写文件只能读?
ADO插时间值时要把这个设为false,否则它会认为:后的为参数