我查了些资料,也写了一些程序,但效果都不理想,特来向各位兄弟求救。以下是我的一些方法:
1、建立一个线程,在里面轮循查看该表的内容:
  while not terminated do
  begin
   //查询
  end;
  优点:能比较快速的知道数据的更新。
  缺点:线程打开后,不管表有没有更新,cpu基本在100%,太不经济2、在主程序中用TIMER轮循,我觉得还不如上面的好。3、在触发器中使用 xp_cmdshell 存储过程,执行命令行,通知程序。
   这个我不会,还请那位老大详细指点一下啊4、我想不出别的方法了,兄弟们有什么经验,多赐教啊!

解决方案 »

  1.   

    我也想知道用什么方式最好!!!!
    现在我用的就是楼主所说的第一种方式
    但感觉这样的方式不是最好的
    如果表中没有要的记录,也会不停地去查询是否有数据
    第3种方式我也想过,但好像要C写的Dll才能用上,也是比较麻烦!
    希望有更好的建议!
      

  2.   

    对于第三种方式,我说的数据库是SQL SERVER,执行外部DLL对DLL有特定的要求!
      

  3.   

    最好能在设计的时候顾及到这一点,比如trigger啊,notify啊什么的,或者多层的由中间层监视也可以
      

  4.   

    不考虑服务器端、客户端什么的,就说数据库的更新让应用程序尽快的知道。我觉得由数据库这边主动通知的方法是最好的,一是省得应用程序在那里做无谓的查询,节省了很大的资源,二是主动通知,速度也是最快的,也就是说的第三中方法。trigger或notify什么的,楼上的能不能说的详细些啊,这样的存储过程该怎么写?应用程序那边怎么接到这样的“通知”
      

  5.   

    1.
    begin
      ...
      Sleep(n);
    end;
      

  6.   

    xp_cmdshell 'dir *.exe'
    xp_cmdshell
    以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。授予非管理用户执行 xp_cmdshell 的权限。说明  在 Microsoft® Windows® 95 或 Microsoft Windows 98 操作系统中执行 xp_cmdshell 时,将不把 xp_cmdshell 的返回代码设置为唤醒调用的可执行文件的进程退出代码。返回代码始终为 0。
    语法
    xp_cmdshell {'command_string'} [, no_output]参数
    'command_string'是在操作系统命令行解释器上执行的命令字符串。command_string 的数据类型为 varchar(255) 或 nvarchar(4000),没有默认值。command_string 不能包含一对以上的双引号。如果由 command_string 引用的文件路径或程序名称中有空格,则需要使用一对引号。如果使用嵌入空格不方便,可考虑使用 FAT 8.3 文件名作为解决办法。no_output是可选参数,表示执行给定的 command_string,但不向客户端返回任何输出。返回代码值
    0(成功)或 1(失败)
      

  7.   

    第一种方法,中间要sleep,把一定的时间片交给cpu处理别的进程可考虑在有数据更新的时候,由更新方向服务器发送消息,然后由服务器向各个客户端发送更新通知
      

  8.   

    sorry, sql server的东西基本都忘光了,刚才说的那个notify是针对别的数据库的,
    sql server里弄个触发器调用xp_cmdshell比较简单,但是性能很差,最好是自己做xp dll,以前弄过,如果过程了需要访问数据库或者过程有参数的话,要一个头文件,好像是dblib,然后像普通dll那样做,做好了以后,sqlserver这边好像要调用一个过程来安装这个扩展过程,像你的情况,可能不需要参数,也就可能不需要那个头文件,你在函数里可以给预先约定的命名事件发信号,然后在触发器里调用这个扩展过程,另一边你的监视程序等待事件的信号就可以了,说来容易,做起来总有点麻烦,喀喀
      

  9.   

    1.我的想法是将表(将表转换为流)的原始大小(不是指的数据条数)记录到一个INI文件里。
    每次读取当前表的大小,和INI中的大小比较,发生变化,就可以确定是否被修改过了。以前我写过这种东西,回去找找。写的简单,找到代码后,一定补上!!
      

  10.   

    如果在adoquery或者adotable上做文章呢?
    我看adoquery有些如afterinsert,onRecordChangeComplete等事件,不知道怎么用。
    我把一个DBgrid连接到adoquery(或adotable)上,actives
      

  11.   

    接上面:
    active设为true,在查询分析器里insert,但dbgrid根本没什么反映,afterinsert,onRecordChangeComplete写的代码也不执行
      

  12.   

    我现在想这样做:
    在应用程序中定义一个事件,由特定消息触发,在事件里查询数据库,读出新记录。
    在数据库表中写一个触发器for insert,里面实现发送特定消息给应用程序。
    现在关键是这个触发器怎么写,应该是调用xp_cmdshell,我看了些资料要写个dll,在dll里实现。不过这个没做过啊,希望那位老大能费点时间,研究一下,彻底解决这个问题呀,我可以再加100分。
      

  13.   

    我以前是用过 在触发器中使用 xp_cmdshell , 感觉还可以,但效率不高,只能在低数据量的操作中使用
      

  14.   

    希望 aiirii老大把你的经验和代码奉献出来
      

  15.   

    他们也给了一些好方法,比如afterinsert,一切要随心所欲,不拘泥于形式
      

  16.   

    此问题的解决思路应该是:
    1:一定要服务器方即server主动通知client,这样才可以减少无谓的搜索时间,节约资源。
    你可以研究一下socket通讯,我认为socket通讯的实现方式应该就是这种模式
      

  17.   

    网页中 实现这个功能应该很简单?网页不支持push操作啊,请楼上老兄发表高见!
      

  18.   

    前几天在搞ASP,搞聊天室,可以在网页上可以设置自动刷新页面,
    不过现在想想,实现方法应该和楼主的第二种观点差不多
      

  19.   

    现在只有等着看看 Erice(白雪公猪) 的代码了
      

  20.   

    xp_cmdshell  方法不太好,因为我曾试过,为防止ERP用户乱改基本资料,我是用触发器,然后调用存储过程,在里面用 xp_cmdshell调用一个消息发送程序,结果,服务器忙得要死,但xp_cmdshell调用如dir之类的东西又不会使服务器累。我都不知道是为什么了
      

  21.   

    还是让程序定时查询好,比如csdn就是3分钟查一次。
    不过正如你说的,这样一来,数据的实时性又不好/
      

  22.   

    http://www.wyx2008.com/mxj/system/netmove/schemedesign.doc
    http://www.wyx2008.com/mxj/system/netmove/netmove.rar
    http://www.wyx2008.com/mxj
    我这里有个程序 实现的是 在两个sql 数据库间实时同步数据的,
    用的方法跟楼主的第一种方法差不多,不过CPU不高的
    楼主可以参考下
      

  23.   

    现在想到一种思路,请楼主参考一下:
    1.首先设置一个表,结构为CheckEdit(用户名, 更新标志)
    2.设置一个触发器,当查询的表有更新时,就更新上面建的表
    3.采用楼主的第二种方法,循环查询这个表(因为这张表只有几条数据,查询速度应该很快)实现方法:
    1.当用户登陆时,设置CheckEdit表中的更新标志为False
    2.如果表有修改,在SQL触发器中,设置CheckEdit表中的更新标志为True
    3.用Timer检测这只是我当当一时想到的思路,请楼主参考!
      

  24.   

    >>希望 aiirii老大把你的经验和代码奉献出来
    没什么技术含量,所以,当时作完也没备份其实,到了 SQL server 2005 就可以比较完美的解决,据说有何Oracle一样的数据库触发器
    我当时,有两种解决方法,一种就是在触发器中用 xp_cmdshell 调用自己编写的程序,通知发生改变;一种就是如楼上所说,有变化,触发器 就 更改一个指定表对应的数据表名的那个栏目到当前时间,客户端再定时查询,这个,其实反而效率好点,虽然不及时
      

  25.   

    关于xp_cmdshell ,都是说调用自己编写的程序,我不知道这个程序是怎么写的,难道要每次都打开这个程序一次?而这个程序就是一起动就给应用程序发一条消息?如果这样,我觉得,如果插入的频率不是很高,用xp_cmdshell 挺好的,如果频率搞,比如循环插入很多条,xp_cmdshell 会不会反应不过来?
      

  26.   

    其实,到了 SQL server 2005 就可以比较完美的解决,据说有何Oracle一样的数据库触发器
    看来还是SQL server 2005 好