以时间如每月为时间段用SQL查询

解决方案 »

  1.   

    那我说的清楚点
    比如在数据库中的某个表中新加了一条记录,我现在在写的delphi程序中如何得知?我要的是实时的哦。因为做的是报警。
      

  2.   

     或者这样,哪位高手能告诉我在SQL SERVER中如何写触发器来向DELPHI的应用程序传数据??
      

  3.   

    在程序中使用TIMER控件,检测前一次的数据库记录数(a),和后一次数据库记录数(b),的大小比较
      

  4.   

    返回每次受影响(增,删,改)的行,可以吗?
     select @@ROWCOUNT form checkTablename 
     
      

  5.   

    用TIMER好象不好吧,如果修改呢??
    那也是更新呀,哦 想起了,
    李维 在多层的书里,写了
    这个操作,用的是 clientdataset.changcount;
    好想是,你看看可以不可以用这个方法??
      

  6.   

    tianwater(tianwater)的意见是可行的。如果不想直接对目标表操作,可以在用户进行新增操作并post之后写入结果到一个临时表中,然后定时检索该表
      

  7.   

    to tianwater(tianwater) :用TIMER系统开销太大了。
    TO hellion(恶人),cobi(小新国际) :我需要实时的啊。
      

  8.   

    用TIMER好象不好吧,如果修改呢??
    那也是更新呀,哦 想起了,
    李维 在多层的书里,写了
    这个操作,用的是 clientdataset.changcount;
    好想是,你看看可以不可以用这个方法?? 
      

  9.   

    有人知道在SQL SERVER的触发器里能调用API函数吗?
      

  10.   

    痛苦啊?看来只能网络编程???我想SQL SERVER不应该这么弱吧。???
      

  11.   

    oracel可以我公司我人这么干,
    TRIGGER中调DLL
      

  12.   

    SQL Server可以嵌入用户自己编写的Dll作为Stored procedure(要用C写,帮助里有例子可以参考),可以用来处理一些与操作系统有关事情
    我的建议是
    自己写一个dll, 负责通知客户端程序
    写一个trigger,有新增纪录的时候就去执行那个dll
      

  13.   

    TO:benzz(大勇) MSSQL can also call DLL
    TO: wby
      in Trigger write
      xp_cmdshell "any command like dir *.* or myprg.exe", no_outout
    wrtie myprg.exe in VB, VC or other language to send a message to any other PG
      

  14.   

    I think the upper answer will total solve your Question.
      

  15.   

    做一个日志库,内容包括表名,关键字,操作(如I(nsert),U(pdate),D(elete)),在需要检测的表中增加触发器,在触发器中将表名、键字、操作等内容写入日志表,然后用DELPHI做一个SERVICE,在SERVICE中循环/定时查询日志表,根据日志内容进行相应的操作并把处理过的记录删除掉。
      

  16.   

    在SQL SERVER中是可以使用扩展存储过程的,而且好象有一个扩展存储过程可以调用系统COM组件,你查查相关资料。
    ================================
    SQL server 的 T-Sql 语言的功能是 非常的强大,但是有个时候 也确实是有些限制和不方便,一天,豆腐想为什么不象 asp 一样 大量的借用组件呢?说干就干,我这就 开始在 Sql online book 中查找,呵呵终于找到了 一个 Sql 的 系统存储过程 sp_OACreate,下面大家就和 豆腐 一起去 看看这个 存储过程的神气之处吧s首先我们先用VB 作一个最简单的组件 ,因为是介绍性的文章,所以这个组件是非常的的简单,在具体的工作中,可以写个 比这个 业务复杂的多的 组件
    Project Name: testSQLCOM
    Class Name: TestMath
    Public Function AddMe(a As Long, b As Long) As Long
    AddMe = a + b
    End Function
    编译生成后,我们就可以在 Sql Server 中对这个 Com 组件进行调用了
    declare @i int
    declare @intRet int
    declare @intRetCode int
    DECLARE @strErr varchar (255)
    DECLARE @strErr1 varchar (255)
    /* 首先创建Com 实例 */
    exec @ret_code = sp_OACreate "testSQLCOM.TestMath", @i out
    IF @intRetCode <> 0
    BEGIN
    /* 创建实例 失败 */
    EXEC sp_OAGetErrorInfo @i, @strErr OUT, @strErr1 OUT
    PRINT "创建实例失败,失败的原因是:: " + @strErr + " " + @strErr1
    RETURN
    END/* 创建成功,开始调用 */
    EXEC @intRetCode = sp_OAMethod @i,'AddMe',@ret OUT,100,200
    IF @intRetCode <> 0
    BEGIN
    /* 调用方法出错 */
    EXEC sp_OAGetErrorInfo @i, @strErr OUT, @strErr1 OUT
    PRINT "调用方法失败,失败的原因是:: " + @strErr + " " + @strErr1
    EXEC sp_OADestroy @i
    RETURN
    END
    PRINT "返回的结果是" + Str(@intRet)
    exec sp_OADestroy @i以前是存储过程的输出Step 4:
    返回的结果是 300我们在这篇文章中介绍了在 Sql server 中使用 组件的方法,具体的 帮助 大家 请查看 SQL Onlone Book
      

  17.   

    我同意solomon的做法。
    至于怎么做BOL里有一个xp_hell的例子。
      

  18.   

    最简单的方法就是在表中加一个标志字段 譬如:IngFlag (bit) 当插入新记录时将其标志为False 然后可在客户端用timer控件来查询表中IngFlag为false的记录,数据处理后再将IngFlag设为true;
      

  19.   

    to solomon() ,你说的我也知道,XP_cmdshell只能执行比如DIR,PING等,要是比如REGEDIT。EXE或任何有窗口弹出的程序都不行,SQL SERVER马上就象死了一样哦。一直执行不止。
    TO gaojhua(gaojhua),JonHua(玉龙) :你们说的方法系统开销太大了。TO haichuang(不戒和尚) :你介绍的方法应该是放在扩展存储过程吧,SQL SERVER好象只有扩展存储过程能够调用DLL的。不知道这样调用的DLL能否作为WINDOWS的单独进程运行希望不要象XP_cmdshell那样谢谢大家实在不行我只有做个SOCKET了。
      

  20.   

    如果使用MS SQL SERVER SDK ,你可以写一个用触发器调用c编译的过程,该过程可以使用API函数,你可以查找你的窗口,并向你的窗口发送消息,通知有新数据插入.可能会行.
      

  21.   

    另外:触发器是不能进行进程间通讯的.要不就这样,在库中设置一个状态表,使用触发器改写状态,而应用程序,周期性检查该状态表中的标志,可以确定库中的任何改变.在我的记忆里好象数据库,delphi还没有提供这种数据库主动通知的功能