用 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;
 
如果把这个服务程序改为应用程序,也可以顺利插入数据,是不是系统服务程序不能写文件只能读?

解决方案 »

  1.   

    把tadoconnettion的Connected在设计期设为true ,然后再编译试试
      

  2.   

    你这个showmessage('Can not connect db!');代替了很多异常?设计期间不应该这样写 应该把真正的异常写出来
      

  3.   

    tadoconnettion的Connected在设计期设已经为true,insert语句试过没有问题把try去掉也可以运行,但是数据不会插入到数据库中,也没有报错。头大啦!!
      

  4.   

    我 用query也是不能对oracle 进行操作..
      

  5.   

    adoQy.ParamCheck := false;
    ADO插时间值时要把这个设为false,否则它会认为:后的为参数