有一张表格的数据是由A程序不断更新的;B程序是显示这张表格数据的程序,里面主要有
TDBGrid和TDBChart。程序B刚启动时是正常的,但表格的数据被A修改后,程序B并没有跟着刷新(我试过了TDBChart的Refresh方法,但没用)请问如何及时在程序B中看到被修改过的数据?
还有,A程序发的数据是用insert写入表格的,我要检查表格中某一个字段当insert写入的值大于临界值时就要报警,我现在是用一个定时器每秒钟检查这个字段的值,但我感觉这样效率太低了,还有什么办法吗?是不是这个字段的值一变就会引发什么事件?

解决方案 »

  1.   

    我要检查表格中某一个字段当insert写入的值大于临界值时就要报警
    //为何不在insert前检查这个字段的值?另:A程序与B 程序同数据源时可以同步。
      

  2.   

    回复 :要检查表格中某一个字段当insert写入的值大于临界值时就要报警
    //为何不在insert前检查这个字段的值?
    就是因为不知道A什么时候insert,要insert什么值,怎么在insert前检查这个字段的值?
     回复 :A程序与B 程序同数据源时可以同步。
    能讲清楚点吗?比如我现在手动改了.mdb的值保存了,B程序没变化呀?
      

  3.   

    to chenjiong(准程序员:升级中....) 
    关于这个你可以用触发器..很容易就搞定..
    TO 楼主..
    你可以把相对应的数据库联接组件CLOSE再OPEN一次..就可以了...
      

  4.   

    回复hansion3406(阿木) : "你可以把相对应的数据库联接组件CLOSE再OPEN一次..就可以了..."
    B程序是一直在不间断运行的,比如我现在手动改了.mdb的值保存了,B程序怎么自动刷新?我难道在B程序中每秒钟把数据库联接组件CLOSE再OPEN一次?
    "关于这个你可以用触发器..很容易就搞定.."你是指DBMS的触发器吗,我用access不支持触发器吧,delphi里怎么实现触发器
      

  5.   

    第一个问题,cursor type设置为dynamic cursor
      

  6.   

    第二个问题用SQL的规则做,超过一定范围就插不进去,如同你向int中插入Varchar一样
      

  7.   

    1 你可以在数据库中建一个标保存一个字段用来说明该表更新时间,在B程序里做一个timer监测,如果发现更新时间变了,就重新open一次
    2 你可以定义数据规则
      

  8.   

    说的具体点吧,我也遇到过这种情况,我不晓得你的具体情况,很难说,你有没有更新后用AdoQuery1.Post;
      

  9.   

    AdoQuery1.Post怎么用,A程序不是Delphi编的也不能改,可以理解为手动改了access数据库,B程序如何能及时的变化的问题?
    cursor type设置为dynamic cursor?能讲具体点吗?不懂.
    "第二个问题用SQL的规则做,超过一定范围就插不进去"这个方法不行,我要让数据插入,但是要有联动控制,比如超过临界值就报警,怎么做?
    急啊,今天一天又没有成果。
      

  10.   

    我不是说了吗,更新程序不是Delphi编的也不能改,可以理解为手动改了access数据库,B程序如何能及时的变化的问题?
    "第二个问题用SQL的规则做,超过一定范围就插不进去"这个方法不行,我要让数据插入,但是要有联动控制,比如超过临界值就报警,怎么做?
      

  11.   

    B程序里面加一个Timer每秒(可根据实际情况设置)检测一下数据源,timer事件里是数据控件先close,再open,如果数据源发生变化,那么B程序也同步更新,我能想到的也只能这样了
      

  12.   

    第一个问题和第二个问题其实是一样的,加一个Timer的方法都可以解决,但效率太差了,更新的数据不多但是间隔的时间是不定的,所以我希望可以某单元格的数据一变化就能有个event,就可以通过响应event来解决,我就是不知道会产生什么事件
      

  13.   

    cursor type设置为dynamic cursor意思是指
    你程序中A修改了表的内容,你Post后结果放映到数据库中去了。
    但是你B程序中看到的仍然是你从数据库服务器上下载下来的数据表。
    把你B程序中的数据集的cursor type设置为dynamic cursor可以保证你刷新数据集时可以看到修改后的数据,但你必须刷新才行。
    一般你可以用计时器刷新,也可以通过消息来实现。用消息比较好
    a程序修改一次就发个消息给b。让它刷新数据集。
      

  14.   

    注:
    post一般也只是反应在你下载下来的cachesize笔记录上,并未放映到数据库中去
    ADOTable1.UpdateBatch可以强迫将数据集更新到数据库中。
    用UpdateBatch代替post
      

  15.   

    建议你去看看ADO程序员参考。
    绝对会让你对数据库软件有另一个新的认识。
      

  16.   

    多谢各位的指点,但是问题还没解决,peiweiwei(一指残)的意思我明白了,但是现在惨就惨在修改数据的程序是不能改的,只有改读数据的程序才行,所以别指望A程序改了数据后通知B,也不希望B定时检查数据库的办法。
    难道数据被修改了后,系统就不会给什么消息吗?A程序不能改还能指望它发消息吗?另外问一下 peiweiwei(一指残) :ADO程序员参考是本书吗,全称是什么?