在多用户操作数据库的时候,我想实现如下的功能:
记住每个用户在什么时间对表进行操作,用户姓名,Ip地址,对哪些表进行了那些操作:
如:“增加”、“删除”、“修改”
例如:有一个表table1字段有:pz,pm,jz
再建一个日志表tab_Log专门存放:用户操作时间(czsj),用户姓名(yhname),Ip,被操作的表名(tabname),操作类型(czlx)字段,其中操作类型是指对table1的操作是插入还是删除。
在table1在插入或删除时能将用户的信息存入tab_Log中
我用的是Delphi6+SQL Server2000
我如果用存储过程写对日志表的插入语句,并在程序中调用此存储过程,可能可以,但我程序中的Grid连的是一个adoQuery,那么取被操作的表名怎么取呢(表名指数据库中的表的名称,如上面的那个table1)?还有如何取用户的Ip地址?
想请问各位高手???

解决方案 »

  1.   

    創建一個ini文件..........
    每次操作時保存到這個文件里
      

  2.   

    数据库都有审计(audit)功能你把他打开就可以!
    不过有点耗资源!declare @hostname char(100)
    set @hostname='server'
    declare @cmdStr varchar(100)
    select @cmdStr='ping -a -n 1 -l 1 '+@hostName
    exec master..xp_cmdshell @cmdstr
    得到访问机的IP**********************************************
    *     ***************           *
    *            *CSDN浇水专用 *                 *
    *            *  拉登授权   *                 *
    *            ***************                 *
    *等我有钱了,我就站在天安门广场挨个给大家发钱*
    **********************************************
      

  3.   

    直接用sql建一个trace,可以存储数据库的交互
    sp_trace_create
    创建跟踪定义。新的跟踪将处于停止状态。
      

  4.   

    有没有什么API函数可以调用??????
      

  5.   

    没有。你可以写一个函数大家以后直接调用就可以了。
             **************
             *CSDN浇水专用*
             *  拉登授权  *
             **************
      

  6.   

    hammer_shi(@农业专家@(*暂时是菜鸟*)) :我想取IP地址或主机名
      

  7.   

    declare @hostname char(100)
    set @hostname='server'
    declare @cmdStr varchar(100)
    select @cmdStr='ping -a -n 1 -l 1 '+@hostName
    exec master..xp_cmdshell @cmdstr
    也可以试试sp_who
      

  8.   

    **************
             *CSDN浇水专用*
             *  拉登授权  *
             **************
    呵呵
      

  9.   

    hammer_shi(@农业专家@(*暂时是菜鸟*)) :主机名不知道set @hostname='server'???
      

  10.   

    sp_who 不行么?
    要是不行就上sql_server数据库去搜搜。忘了那玩意。O的到知道!  :(
      

  11.   

    sp_who 不行.有没有什么控件或是函数
      

  12.   

    试试这个:
    create table #table(spid int ,ecid int,status varchar(1000)....)
    insert into #table(spid,ecid,status.....) exec sp_who 
    select count(*) from #table可以得到hostName
    declare @cmdStr varchar(100)
    drop table #table
    create table #table(id int identity,txt varchar(1000))
    select @cmdStr='ping '+@@hostName
    insert into #table(txt) exec master..xp_cmdshell @cmdStrselect substring(txt,charindex('[',txt)+1,charindex(']',txt)-charindex('[',txt)-1) from #table where id=2
    --得到IP地址,也可以不直接用hostName
    declare @sendstr varchar(100)
    select @sendstr='net send '+@HostName+'Messages!'
    exec master..xp @sendstr
      

  13.   

    谢谢大家,这个问题解决了,我先调用sql里的host_name()取得主机名,再在程序中调用函数取得ip。