`
touchmm
  • 浏览: 1055778 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

D7中编写NT服务操作数据库的简单方法

阅读更多

标题:D7中编写NT服务操作数据库的简单方法

作者:JRQ

链接:http://blog.csdn.net/jrq/archive/2006/04/27/679510.aspx

1.File--New--Other--Service Application

2.File--New--Other--Thread Object

3.Thread Unit(TPostMessage)

uses ADODB, IniFiles, ActiveX;

procedure TPostMessage.WriteLog(const LogStr:String);
var F:TextFile;
begin
if LogStr<>'' then //写日志文件
begin
//AssignFile(F,ExtractFilePath(paramstr(0))+'PostMessage.log');
AssignFile(F,ExtractFilePath(ParamStr(0))+'PostMessage.log');

if not FileExists(ExtractFilePath(ParamStr(0))+'PostMessage.log') then
begin
ReWrite(F); //为写创建一个新文件;
Writeln(F,'['+FormatDateTime('yyyy-mm-dd hh:mm:ss',now)+']: '+ LogStr);
CloseFile(F);
end
else
begin
Append(F);
Writeln(F,'['+FormatDateTime('yyyy-mm-dd hh:mm:ss',now)+']: '+ LogStr);
CloseFile(F);
end;
end;
end;

procedure TPostMessage.CreatDBCon;
var aConfigFile:TInifile;
begin
//if not FileExists(ExtractFilePath(Application.ExeName)+'Config.ini') then
if not FileExists(ExtractFilePath(ParamStr(0))+'Config.ini') then
begin
WriteLog('配置文件不存在,请检查。');
Exit;
end;

try
aConfigFile:=TInifile.Create(ExtractFilePath(ParamStr(0))+'Config.ini');
ADOConn:=TADOConnection.Create(nil);
ADOConn.ConnectionString:='Provider=OraOLEDB.Oracle.1;'+
'Password='+aConfigFile.ReadString('Config','DBPASS','DBPASS')+';'+
'Persist Security Info=True;'+
'User ID='+aConfigFile.ReadString('Config','DBUSER','DBUSER')+';'+
'Data Source='+aConfigFile.ReadString('Config','DB','ORCL')+';'+
'PLSQLRSet=1';

ADOConn.LoginPrompt:=False;
try
ADOConn.Connected:=true;
ADOQry:=TADOQuery.Create(nil);
ADOQry.Connection:=ADOConn;
except
WriteLog('连接数据库失败。');
Exit;
end;
finally
FreeAndNil(aConfigFile);
end;
end;


procedure TPostMessage.FreeDBCon;
begin
FreeAndNil(ADOQry);
FreeAndNil(ADOConn);
end;


procedure TPostMessage.Execute;
var MessageStr:String;
begin
Sleep(1000*60*10);//等10分钟先 ^_^ 。原因:如果服务是自启动,而DB此时可能还未启动,会造成访问异常。

CoInitialize(nil); //初试化COM

CreatDBCon; //连接数据库

while True do
begin
try
ADOQry.Close;
ADOQry.SQL.Clear;
ADOQry.SQL.Add('Select * From Table Where 1=1 Order by FieldName');
ADOQry.Open;

while Not ADOQry.Eof do
begin
MessageStr:='LogString';
//Other Code......
ADOQry.Next;

if MessageStr<>'' then //写日志文件
WriteLog(MessageStr);
end; //while Not ADOQry.Eof do
except
WriteLog('出现异常。');
end;
Sleep(10000);
end; //while True do
FreeDBCon; //释放
CoUninitialize;
end;

4.Service Application(TMain)

var PostMsg:TPostMessage;

//启动
procedure TMain.ServiceStart(Sender: TService; var Started: Boolean);
begin
PostMsg:= TPostMessage.Create(False);
Started := True;
end;

//停止
procedure TMain.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
PostMsg.FreeDBCon;
PostMsg.Terminate;
Stopped := True;
end;


procedure TMain.ServiceContinue(Sender: TService; var Continued: Boolean);
begin
PostMsg.Resume;
Continued := True;
end;

//暂停
procedure TMain.ServicePause(Sender: TService; var Paused: Boolean);
begin
PostMsg.Suspend;
Paused := True;
end;


//安装前,初试化服务
procedure TMain.ServiceBeforeInstall(Sender: TService);
var aConfigFile:TInifile;
begin
if not FileExists(ExtractFilePath(ParamStr(0))+'Config.ini') then
Exit;

try
aConfigFile:=TInifile.Create(ExtractFilePath(ParamStr(0))+'Config.ini');
ServiceStartName:=aConfigFile.ReadString('Config','SYSUSER','SYSUSER'); //OS用户
Password:=aConfigFile.ReadString('Config','SYSPASS','SYSPASS'); //OS密码
finally
FreeAndNil(aConfigFile);
end;
end;


5.服务安装

Service Application中设置

DisplayName:显示的服务名称
ServiceStartName:系统用户
Password:用户密码

安装方法:在服务程序的快捷方式图标上右击,选择“属性--快捷方式”,在“目标”中加上参数" /install"。

然后双击快捷方式运行即可安装。 参数"/uninstall"为卸载,使用方法同样。

服务可安装成自动启动的方式,当系统启动时,会自启动运行。

如果用户权限有问题则可能安装不成功。

安装成功,如果在“服务”中启动失败,则需在控制面板的“服务”中右击选择“属性--登录”,勾选“本地账户系

统”,然后重新启动服务。

6.Config.ini

[Config]
DB=ORDB
DBUSER=system
DBPASS=manager
SYSUSER=THUNIS\JRQ
SYSPASS=JRQ


7.IDE Debug

可在服务的Execute中首行加上长时间sleep(),然后加入断点。

控制面板中启动服务后,选择IDE菜单"run--Attach to Process...",勾选Show System Processes,选择服务名称,

单击“Attach”进入Debug状态。

8.备注

使用COM 的基本原则之一,就是每个使用 COM 的线程都应该先调用 CoInitialize 或 CoInitializeEx 来初始化 COM。

在线程中操作ADO控件,需要显示执行CoInitialize()函数(uses ActiveX),如:

procedure THread.Execute;
begin
CoInitialize(nil); //调用任何com 或ole api函数之前,必须显示调用CoInitialize进行初始化COM库
MainFrm.ADOQry.Open;
MainFrm.ADOQry.Close;
CoUnInitialize();
end;


[-完-]

by jrq

2006/04/27 于穗

分享到:
评论

相关推荐

    D7数据库开发指南

    TTable组件代表数据库表,可以直接在内存中操作,如添加记录、修改记录和删除记录。通过设置TableName属性,我们可以指定要连接的数据库表。TTable组件还提供了Fields集合,用于访问和修改表中的字段数据。 TQuery...

    《Delphi7高效率数据库编程》范例数据库

    开发者可以通过打开并研究这些数据库来学习如何在Delphi7中操作数据库,包括表的设计、字段定义、索引设置以及关系的建立。 4. **源代码**:虽然压缩包中未明确包含源代码,但通常书籍配套的示例数据库会与相应的...

    DBISAM V3.25 For D7 (小型数据库引擎)

    编译后的程序可以独立运行,不需要BDE、ODBC或者是ADO的支持,其引擎已包含在编译后的EXE文件中,支持标准的SQL查询,支持多用户并发访问,支持事务处理,支持文件加密,特别适合制作小型的数据库管理程序。...

    UniDAC Professional 8.0.1 D7专用

    综上所述,UniDAC Professional 8.0.1 D7 专业版是Delphi 7开发者连接各种数据库的理想选择,无论是在小型项目还是大型企业级应用中,都能提供稳定、高效的数据库访问能力。利用它的特性,开发者可以更专注于业务...

    Delphi数据库开发范例程序

    6. **SQL命令的使用**:在Delphi中,你可以直接编写SQL语句进行数据查询、插入、更新和删除操作,例如使用TADOQuery或TDataset的SQL属性。 7. **事件驱动编程**:Delphi的事件驱动模型使得在数据库操作时能轻松响应...

    全唐诗维护用Delphi操作SQLite数据库正则表达式提取诗句

    Delphi操作数据库,调用SQLite3.dll动态库,代码有点老是D7编写的,可以参考一下。

    SQLite3 Delphi Components for D7-XE.FullSource.zip

    SQLite3 Delphi Components就是这样的组件,它们允许开发者通过简单的界面操作将SQLite3数据库功能整合到Delphi应用中。 这个压缩包中的sivak3可能是组件的主要实现部分,可能包含了以下内容: 1. **源代码**:...

    D7 单表增删改查

    本主题聚焦于“D7单表增删改查”,即如何使用Delphi 7进行基于Access数据库的单表操作,包括添加数据(Insert)、删除数据(Delete)、更新数据(Update)以及查询数据(Select)。 1. **Delphi 7简介** Delphi 7...

    国内飞机航班数据库

    而【压缩包子文件的文件名称列表】中的"b328728732244c748391970d7df4e1b9"看似是一个哈希值或随机字符串,这通常代表数据库文件的唯一标识,用于区分不同的数据集或版本。不过,没有具体的文件格式信息,我们无法...

    DISQLite Pro 5.15 D7-RX10.1.rar

    1. **接口集成**:DISQLite Pro提供了完善的Delphi组件库,包括TSQLiteDatabase、TSQLQuery等,这些组件使得在Delphi中操作SQLite数据库如同操作本地数据库一样简单,支持标准的ADO和BDE接口,让开发者能够快速上手...

    FastReport4 D7可用

    1. **报表设计器**:提供一个可视化的报表设计界面,用户可以通过拖放操作添加、排列和格式化字段、图像、图表等各种元素,如同使用Word一样简单。 2. **预览功能**:在设计过程中,用户可以实时预览报表的最终效果...

    dbgrideh for D7

    总结来说,dbgrideh for D7 是一个针对Delphi 7开发的高效数据库网格组件,通过扩展标准TDBGrid的功能,为开发者提供了更强大的数据操作和可视化工具,有助于构建更专业、功能更完善的数据库应用程序。

    数据库网上购物系统设计-cb45ff4b227916888486d7ea.doc

    在"数据库网上购物系统设计"中,系统的主要功能是处理网上购物过程中产生的各种信息,包括用户信息、商品信息、订单信息等。以下是系统功能的详细概述: 1.1 系统功能背景资料: 随着互联网的普及,网上购物已经...

    Aata 3.081_d7

    在IT行业中,数据库的安全性和可操作性是至关重要的,而Asta 3.081_d7 正是为解决这些问题而生。 首先,Asta 3.081_d7 的一大亮点在于其独立连接数据库的功能。这意味着它能够直接与数据库进行交互,而无需用户直接...

    ExpressQuantumTreeList Suite v4.0.2 for D7

    总的来说,ExpressQuantumTreeList Suite v4.0.2 for D7 是一个用于Delphi 7的高级数据可视化控件,提供了丰富的功能,如树状数据管理,支持数据库操作,并提供了源代码以供定制。安装包包含了必要的文件和资源,...

    FastReport5_for_D7

    6. **安装步骤**:根据提供的描述,FastReport5_for_D7的安装非常简单。只需找到解压后的.exe文件,双击运行,按照安装向导的提示进行操作。在安装过程中,确保你有D7的开发环境已安装并运行。在安装过程中输入提供...

    TurboDB Components V4.17 For Delphi BCB for D7

    2. 表组件:如TdbTable,用于直接操作数据库表,提供了浏览、添加、修改和删除记录的能力。开发者可以通过属性和方法控制字段选择、排序、过滤等操作。 3. 查询组件:如TdbQuery,支持SQL查询,可以执行复杂的...

    Venus7.0 For D7

    在Delphi环境中,组件通常表现为可视化对象,可以在设计时直接在Form上拖放,简化了代码编写过程。Venus7.0提供的组件涵盖了用户界面、数据处理、网络通信等多个领域,使得开发者能够快速构建高效、美观的应用程序。...

    SqliteClient for D7

    1. **SQLite API封装**:SqliteClient对SQLite的C语言API进行了封装,转换为Delphi对象模型,使得Delphi程序员可以使用面向对象的方式来操作数据库,提高了代码的可读性和可维护性。 2. **连接管理**:通过Sqlite...

    《Delphi7数据库开发技术与工程实践》配书光盘

    书中内容由浅入深,从Delphi 7的基础操作开始,逐步引导读者了解数据库编程的核心概念和方法。为了加深理解和技能掌握,作者在书中提供了大量的实例代码和项目案例,这些内容均包含在随书提供的光盘中。 光盘中的源...

Global site tag (gtag.js) - Google Analytics