想实现监控sql server中某个表的insert,update,delete操作
然后程序做出不同的反应。
  想来想去没有效率太高的办法,不知能不能利用上sql server 自己带的triger?  有做过类似东西的近来讨论一下?

解决方案 »

  1.   

    但是在delphi 中如何利用上sql server 中的触发器?
      

  2.   

    1.在表的触发器insert,update,delete操作时候向一个表(mytalbe)插入新的字段
    mytable的内容如下:
    更改时间、更改类别(insert/update/delete)、更改内容、是否已经处理等列
    2.系统不断查询mytable表中记录的变化情况
      

  3.   

    用触发器啊。
    create tritter ti_TableName ....
      

  4.   

    用触发器啊。
    create trigger ti_TableName ....
      

  5.   

    看来各位没有理解我的意思
    用触发器我也知道,但那只是sql server本身知道了有数据变化
    关键在delphi 中怎么样怎么捕捉这个触发信息?
    to hhytsoft(雨中独行) :
      你说“系统不断查询mytable表中记录的变化情况”,这样子消耗的资源也太大了吧
      而且无法实时
     
      最好的方法是数据变化的时候能主动触发程序动作
      

  6.   

    哪就在触发器中发消息给外部程序,具体去看看sp_OACreate、sp_OAMethod等几个方法
      

  7.   

    to : anke(killer):  就用触发器,你前台一触发,后台就自动会发现,你出发后向前台输出触发结果来显示出来就
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    你这个“前台”“后台”分别指的是什么?
      

  8.   

    to : larruping(未济) :   谢谢,这个方法应该可以,在sql server 的triger中使用sp_OACreate、sp_OAMethod
      调用外部ole对象中的method
      
       我试一下先,
       不过还有没有别的办法呢?
      

  9.   

    因为执行这个程序的用户可能没有权限在sql server 上创建触发器
      

  10.   

    这个给你参考一下:declare @i int
    declare @intRet int
    declare @intRetCode int
    declare @intRetCode1 int
    DECLARE @strErr varchar (255)
    DECLARE @strErr1 varchar (255)

    declare @strTemp char(100)
    /* 首先创建Com 实例 */
    exec @intRetCode = sp_OACreate 'Funclass.cls_string', @i out
    IF @intRetCode <> 0
    BEGIN
      /* 创建实例 失败 */
      EXEC sp_OAGetErrorInfo @i, @strErr OUT, @strErr1 OUT
      PRINT '创建实例失败,失败的原因是:' + @strErr + ' ' + @strErr1
      RETURN
    END

    /* 创建成功,开始调用 */
    EXEC @intRetCode1 = sp_OAMethod @i,'f_str_EncryptStr',@strTemp OUT,@source,@key

    IF @intRetCode1 <> 0
    BEGIN
      /* 调用方法出错 */
      EXEC sp_OAGetErrorInfo @i, @strErr OUT, @strErr1 OUT
      PRINT '调用方法失败,失败的原因是:' + @strErr + ' ' + @strErr1
      EXEC sp_OADestroy @i
      RETURN
    END

    --PRINT '返回的结果是' + @strTemp
                 select @strout = @strtemp
    exec sp_OADestroy @i
      

  11.   

    to hhytsoft(雨中独行) :
      你说“系统不断查询mytable表中记录的变化情况”,这样子消耗的资源也太大了吧
      而且无法实时
     
      最好的方法是数据变化的时候能主动触发程序动作如果只是简单的对数据库进行操作,那你直接可以在触发器中操作。