我在vc中要访问数据库,详细举个例子来说:表中有一列值,是时间类型,
如:2005-5-1 12:12:20,在vc中程序中要取出这个值,并与当前时间相对比,如果一样那么就执行一个另外的操作。这样的话,那不是要每时每刻都要访问数据库哦,如果有很多线程同时这样搞,那资源占用不就很大很大了吗?有什么办法,不用采取这种轮回的方法哦?谢谢大家的帮忙!

解决方案 »

  1.   

    这个列值是由其他什么程序更新的话,可以考虑用基于网络同步方式来完成(命名管道,MSMQ等)
      

  2.   

    1.你是什么数据库?2.sql server 和oracle里有计划的功能,你可以设定某一计划,定时检查你的那一列时间值,判断在做你要做的事情,当然在sql server里这样的机制叫“作业”,oracle里叫“job”,个人认为如果你的时间精度要求不高可以用这样的方法,如果要精确到秒,那么在数据库里跑这样的机制,会大大降低数据库性能。3.从外部程序来访问的话,我建议你可以每隔一段时间(比如30分钟)将数据库中的那一列(可能为多条记录)取出,放入到外部程序中的一个链表之中,然后只需要在外部程序中检查链表中的时间值就可以了,无需每时每刻检查数据库了,当然这样的办法是基于你的数据库中的那一列的值不变的情况下,或者说具体一点,我在取完那一列的值进入我的链表后假设它就不会再发生改变。4.如果上面两种办法还不能解决你的问题,我们可以在探讨一下有没有别的办法。
      

  3.   

    提供一种思路:
    程序开始时先访问一次数据库,把数据库里列的所有时间和当前时间比较,得到与当前时间最接近的一个时间间隔,比如现在2005-5-1 12:12:20,而数据库里最接近的为2005-5-1 15:42:16,那么这两个时间的时间差记录下来nSecond,在程序里设置一个类似Timer的东西,当时间过了nSecond(或更小一些)时再读一次数据库。
    反复这个过程,每次读数据库都返回一个时间间隔,再根据这个时间间隔来决定下一次访问数据库的时间。
    还有就是每次数据库更新的时候需要访问一次数据库。
    希望对你有帮助:-)
      

  4.   

    但是情况有点特殊啊,举个详细点的例子;比如说数据库为sql2000表名t_time(code ,thetime),其中code是varchar,thetime是datetime,第一行值:3665523 ,2005-5-1 12:23:45 ,依次3665523 ,2005-5-12 1:23:45 ,3685523 ,2005-5-8 4:23:45 …………很多哦,然后要取出来一个,然后判断当前时间和它是否一样,如果一样,那么就对这个字符串进行一定的操作哦,原来我就是一个一个取比较,但是那个时候表里的行数少,所以没什么问题,现在发现cpu占有率总是100,以后数据会更多哦,那可怎么办哦?