现在一个FROM里面有一个DBGIRD,去查询数据库,现在我用一个timer来自动更新数据,有没有其他方法,当表中的数据发生变化后,会自动去执行SQL,如果在表里做个触发器,那在DELPHI里会触发到吗?

解决方案 »

  1.   

    好像没办法,我之前都是用的线程,隔一段时间就检查下数据是否有更新,应该和Timer差不多,有更好的方法我也希望知道啊,坐等
      

  2.   

    思考过。
    但是没有实际做过。
    可以考虑单独做一个服务程序,
    专门用来检查是否有更新的数据。
    有的话,做上记号。
    或者,socket传给 Client,或者等待 Client 来提取更新过的数据。
    总感觉很复杂,不如加一个“刷新”按钮,让用户自己去点。
      

  3.   

    好像FireBird数据库可以实现这样的功能。
      

  4.   

    思路
    触发器执行xp_cmdshell,调用 socket客户端程序 发送消息到 socket服务端程序
      

  5.   

    是的。我的建议就是这样。
    1. 用 Timer (或线程) 检查,势必多次访问数据库。这样,如果客户端多了,网络资源有一半浪费在“Check”上了
    2. 如果用触发器。我有点反感触发器,这个东西时间长了以后,容易造成混乱。特别是新接手的程序员。常常会不知道发生了什么。
    3. 相对好的方法,是在服务器端,用一个小程序,不断的检查你留意的那几张表。当发现变更以后,通过自己定义的协议,通知各个客户端。客户端收到信号后,在需要的时候,在空闲的时候,自己去数据库里搜。
    4. 以上方法,或多或少的有些不妥。最好的方案,我还没有想通过。
       不过,直接用刷新按钮,通常客户也是可以接受的。
       大部分数据库操作程序,又不是股票软件之类的,比较适合这种方法。
      

  6.   

    数据是从哪个端插入的?然后用socket 通知查询端可以了。这样就没有必要不停的扫数据库。
      

  7.   

    Timer确实不是一个很好的办法,但是我们可以另辟蹊径。SQL SERVER有触发器,我们可以这样设想,制作一个触发器,当触发器触发时,SQL SERVER向某个文件夹写一个特定文件名的文件。然后DELPHI中创建一个线程来监视这个文件夹(系统回调即可),每当文件发生变化,都可以触发一个事件或者消息。这样就变相的实现了数据库监督而且无需扫描数据库。引子这位大神的测试,看样子很稳定。
    http://blog.csdn.net/sliphades/article/details/8124630
      

  8.   

    数据库里我写了一个PROC,我用timer每3秒刷新一次,每次刷新GRID都会闪一下,我想做成的效果就是股票那样子,当数据里那条记录更新,界里的GRID里也相对刷新那一条数据
      

  9.   

    高版本的SQLServer提供了主动通知机制。
      

  10.   

    很遗憾,ADO并不支持,ADO.Net支持。
      

  11.   

    好像ADO不支持单条刷新。有些连接方式支持单条刷新。