CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

如何将对数据库中操作写入自己设定的日志中?

楼主micalo(micalo)2002-10-03 12:21:37 在 Delphi / 数据库相关 提问

自己编写了一个医院的管理系统!其中一个操作是将凡是对数据库进行了操作的步奏写入自己定义的.TXT文档中!请大家帮忙!!请详细说明!! 问题点数:50、回复次数:6Top

1 楼wanderung(※--※)回复于 2002-10-18 15:00:55 得分 1

将操作的地方,按自己的格式写文件,这就是日志。  
   
  说到底记录执行操作的文件就是日志。就跟老婆和妻子是同一个人一样~!Top

2 楼cg1120II(代码最优化第二版-§.NET专家§)回复于 2002-10-18 15:09:47 得分 49

看看这个:  
  如何编写个人Internet上网计费软件    
  ----   随着Internet的日益普及,到Internet网上冲浪的人是越来越多了,对于手头并不是很宽裕的网民特别是在家里上网的网民来说,如果能及时知道自己上网已经花了多少钱,那么,每次到ISP那缴纳费用时,至少可以做到心中有数。下面介绍一种非常方便的方法,根据这个方法的原理,用VB、Delphi之类的软件很容易很快编写出一个不错的个人Internet上网计费软件。    
   
  ----   工作原理    
   
  ----   现在一般个人上网,都是运行Windows   95/98平台,采用Modem拨号上网方式,在Windows   95/98中,配置“拨号服务器”时,拨号服务器有一个属性,就是是否记录日志文件,其默认值是“否”。对于它,平常我们可能都没太注意。我们把它改成“是”,这样,在每次上网后,Windows   95就会在其安装目录下(通常就是C盘的Windows目录),把上网连通的时间以及上网过程中发生的事件记录在ppplog.txt日志文件中。    
   
  ----   ppplog.txt是一个标准的文本文件,在此文件中,上网发生的每个事件记录占有一行,格式为:    
   
    日期       时间 发生的事件  
  |---------|-----------|-|---------------------|  
  12-19-1998   21:54:31.25    
  -   Microsoft   拨号网络适配器日志已打开。  
  12-19-1998   21:54:31.25  
    -   服务器类型是   PPP   (点到点协议)。  
  .  
  .  
  .  
  12-19-1998   22:44:49.08  
    -   Microsoft   拨号网络适配器日志已关闭。  
   
  ----   上述内容是简体中文Windows   98的ppplog.txt文件格式,对于Windows   95,基本格式是一样的,只是事件部分是英文的。    
   
  日期       时间 发生的事件  
  |---------|-----------|-|---------------------|  
  12-15-1998   16:34:27.71    
  -   Remote   access   driver   log   opened.  
  12-15-1998   16:34:27.71    
  -   Installable   CP   VxD   SPAP   is   loaded  
  12-15-1998   16:34:27.71  
    -   Server   type   is     PPP   (Point   to   Point   Protocol).  
  .  
  .  
  .  
  12-15-1998   16:58:30.05    
  -   Remote   access   driver   log   closed.  
   
  ----   对应于一次正常的上网过程,Windows   95/98必定会在ppplog.txt文件中记录下包括什么时候日志文件已打开以及什么时候日志文件已关闭的完整过程,这样,我们每次上网后读取ppplog.txt文件,把含有“日志已打开”字符串的事件记录的时间作为我们计时的起点,读取日期、时间,把含有“日志已关闭”字符串的事件记录的时间作为我们计时的结束(对于Windows   95,字符串分别取”log   opened”和”log   closed”),读取日期、时间,算出其时间差,以该时间差作为时长,按照市话费每三分钟算一次,每次0.24元,Internet费,每一分钟算一次,每次0.10元(我们这的收费标准),便可以算出每次的花费费用了。我们可以把每次计算的结果保存在一个数据库中,那么就可以随时查询自己的花费情况了。    
   
  ----   具体实现    
   
  ----   下面是我的具体实现过程,程序用Delphi编程实现。    
   
  ----   1、配置拨号服务器以便记录日志文件    
   
  ----   1.1、从任务栏上选取“开始”-〉“设置”-〉“控制面板”。    
   
  ----   1.2、点击“网络”图标,出现网络配置对话框。    
   
  ----   1.3、在网络组件中选择“拨号服务器”,按“属性”按钮,出现“拨号服务器”属性对话框。    
   
  ----   1.   4、选择其“高级”选项,然后选择“记录日志文件”项,在其右边的设置值中选择   “是”。按“确定”按钮,接着系统提示需要重新启动机器,重新启动后,设置就起作用了,以后每次上网,都会把上网时间记录在日志文件ppplog.txt文件中。    
   
  ----   2、   建立一数据库internet.db    
   
  ----   数据库用来保存每次的计费数据,方便查询。    
   
  ----   利用Delphi软件包中的DataBase   DeskTop程序建立    
   
  ----   数据库中包含有下列字段:    
   
  字段名 类型 说明  
  Begindate Date 起始日期  
  Begintime Time 起始时间  
  Enddate Date 结束日期  
  Endtime Time 结束时间  
  Timelen Number 时长  
  TelCost Currency 电话费用  
  Ispcost Currency Internet费用  
   
  ----   3、从日志文件ppplog.txt文件中读取数据    
   
  ----   为了避免重复读取数据,可以每次从ppplog.txt文件中读完数据后,把ppplog.txt中的内容复制到ppplog.bak文件中,以便想查看日志文件时可以查看,然后,把ppplog.txt文件置空。读取的数据存放到数据库中。具体程序如下:    
   
    procedure   TForm1.readlogExecute(Sender:   TObject);  
    var  
        logfile:   TextFile;  
        logbak:   TextFile;  
        Str1:   string;  
        datestr,timestr:string;  
    begin  
        AssignFile(logbak,'c:\windows\ppplog.bak');  
        if   not   FileExists('c:\windows\ppplog.bak')   then  
              Rewrite(logbak)  
        else  
              Append(logbak);  
        if   not   FileExists('c:\windows\ppplog.txt')   then  
                MessageDlg('日志文件不存在',  
                mtInformation,[mbOk],0)  
        else  
            begin  
            AssignFile(logfile,   'c:\windows\ppplog.txt');  
            Reset(logfile);  
            if   Eof(logfile)   then  
            begin  
                  ShowMessage('日志文件已为空');  
                  Exit;  
            end;  
            Table1.Open;  
            while   not   Eof(logfile)   do  
            begin  
              Readln(logfile,   Str1);  
    {‘log   opened’作为计时的起点}  
              if   Pos('log   opened',Str1)<   >0   then  
              begin  
                  datestr:=copy(str1,1,10);  
                  timestr:=copy(str1,12,8);  
                  Table1.Append;  
                  Table1.FieldValues['begindate']  
                  :=   StrToDate(datestr);  
                  Table1.FieldValues['begintime']  
                  :=   StrToTime(timestr);  
                  Table1.Post;  
              end;  
    {‘log   closed’作为计时的结束}  
              if   Pos('log   closed',str1)<   >0   then  
              begin  
                  datestr:=copy(str1,1,10);  
                  timestr:=copy(str1,12,8);  
                  table1.Last;  
                  table1.Edit;  
                  Table1.FieldValues['enddate']    
                  :=   StrToDate(datestr);  
                  Table1.FieldValues['endtime']  
                  :=   StrToTime(timestr);  
                  Table1.Post;  
              end;  
              Writeln(logbak,str1);  
            end;  
            Table1.close;  
            Rewrite(logfile);  
            CloseFile(logfile);  
            CloseFile(logbak);  
          end;  
        end;  
   
  ----   4、计算费用的过程    
   
  ----   在该过程中,对于Internet计费的半价问题(市话没有半价),只考虑到了晚上九点以后早上七点以前,对于节假日、星期六、星期天没有考虑,有兴趣的朋友可自我完善此程序。    
   
  procedure   TForm1.calcostExecute(Sender:   TObject);  
  var  
      Year,   Month,   Day,   Hour,  
      Min,   Sec,   MSec:   Word;  
      Year1,   Month1,   Day1,   Hour1,  
        Min1,   Sec1,   MSec1:   Word;  
      tlen   :     integer;  
      tcost   :   Real;  
  begin  
      Table1.open;  
      while   not   Table1.Eof   do  
      begin  
          {计算时长,以分钟为单位}  
          if   Table1Enddate.IsNull   then  
                tlen:=1  
          else  
            begin  
                DecodeDate(Table1.FieldValues  
                ['begindate'],year,month,day);  
                DecodeDate(Table1.FieldValues  
                ['enddate'],year1,month1,day1);  
                DecodeTime(Table1.FieldValues  
                ['begintime'],hour,min,sec,msec);  
                DecodeTime(Table1.FieldValues  
                ['endtime'],hour1,min1,sec1,msec1);  
                tlen:=((((((day1-day)*24+hour1)  
                  -hour)*60+min1)-min)*60+sec1)-sec;  
            end;  
          if   (tlen   mod   60)   >   0   then  
                tlen:=tlen   div   60   +1  
          else  
                tlen   :=   tlen   div   60;  
          Table1.edit;  
          Table1.FieldValues['timelen']   :=   tlen;  
          {市话三分钟算一次}  
          if   (tlen   mod   3)   >   0   then  
                tcost   :=   (tlen   div   3   +   1)*0.24  
          else  
                tcost   :=   (tlen   div   3)*0.24;  
          Table1.FieldValues['telcost']   :=   tcost;  
          if   (hour   >=21)   or   (hour<   =7)   then  
                Table1.FieldValues['ispcost']   :=   tlen*0.05  
          else  
                Table1.FieldValues['ispcost']   :=   tlen*0.1;  
          Table1.Next   ;  
      end;  
      DbGrid1.Visible   :=   True;  
  end;  
   
  ----   结束语    
   
  ----   通过上述过程,每次上网的费用都计算保存在数据库internet.db中,我们可以再编一段查询程序,这样便可以清楚地随时知道自己的上网花费了。  
  Top

3 楼micalo(micalo)回复于 2002-10-22 18:54:29 得分 0

大狭!真是非常感谢啊!  
  以后有问题我要多多向你请教哦   !!!Top

4 楼My_first(小@_@小)回复于 2002-10-22 19:04:40 得分 0

其它你也可以设一个日志表,    
   
  字段名  
  操作             时间                                 状态             提示  
  增加             2002-02-02   05:30:30   正常              
  删除             2002-02-02   03:30:30   正常              
  修改             2002-02-03   02:30:30   异常               主键不能为空.  
   
  Top

5 楼My_first(小@_@小)回复于 2002-10-22 19:04:53 得分 0

其它你也可以设一个日志表,    
   
  字段名  
  操作             时间                                 状态             提示  
  增加             2002-02-02   05:30:30   正常              
  删除             2002-02-02   03:30:30   正常              
  修改             2002-02-03   02:30:30   异常               主键不能为空.  
   
  Top

6 楼My_first(小@_@小)回复于 2002-10-22 19:04:58 得分 0

其它你也可以设一个日志表,    
   
  字段名  
  操作             时间                                 状态             提示  
  增加             2002-02-02   05:30:30   正常              
  删除             2002-02-02   03:30:30   正常              
  修改             2002-02-03   02:30:30   异常               主键不能为空.  
   
  Top

相关问题

  • 如何把错误日志写入数据库?方便查看.
  • 写入数据库!
  • 做站点统计,怎样把IIS日志文件写入到数据库啊,谢谢!
  • 数据库日志问题?
  • 数据库日志问题
  • 数据库日志问题
  • 数据库日志问题
  • vc下写入数据库
  • 如何写入数据库?
  • 数据写入数据库

关键词

  • 文件
  • 数据库
  • 服务器
  • sec
  • 数据
  • 属性
  • ppplog
  • 日志
  • tlen
  • fieldvalues

得分解答快速导航

  • 帖主:micalo
  • wanderung
  • cg1120II

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo