有两个不同的程序,分别用ADO对同一个数据库进行操作。
首先程序一给数据库中某记录重新更新了一次内容,然后程序2再对数据库进行查询,但此时查询到的内容还是程序1把数据更新前的内容。除非程序2的那个查询动作是在程序1更新数据库后几秒钟后再查询,才能得到刷新后的结果,这显然是不适用的。
    此问题困扰我已久,一直未能解决。在网上也有很多各式各样类似的问题。解决办法比如先CLOSE,再OPEN,或REFRESH,或反复定时刷新等等,我都试过但都不能从根本解决,请教哪位高人有解决办法?(最好你也做一个小的例子来试试再说,当然也可做成同一程序的两个不同窗体上的ADO控件对同一数据库进行操作的,结果也一样。)

解决方案 »

  1.   

    我有两个问题,到现在还没有揭贴,期待来者,10。1强制揭贴,这两铁居然没人看,所以就当我放分吧!信誉呀!
    http://expert.csdn.net/Expert/topic/2080/2080420.xml?temp=.1962549http://expert.csdn.net/Expert/topic/1882/1882200.xml?temp=.6502954楼主的问题是因为使用ADO对数据库的操作其结构还是在本机缓冲区里,有办法的,现在我一时想不起来!
      

  2.   

    我用的是ADO过程控件,语法是这样的:
    update tablename。whereX
    select * from tablename。whereX
    可以看到修改后的结果。
    把它换成两个函数,每一函数有一功能,我也能看到修改后的结果,不知楼主怎么用,能说详细点?
      

  3.   

    我是用这样一个例子来试验的:
    建立一个工程,有两个窗体FORM1与FORM2,
    FORM1上有一个ADOCONNECTION1,一个ADOQUERY1,一个BUTTON1,一个LABEL1,按BUTTON1时有
       with adoquery1 do
        begin
          close;
          sql.clear;
          sql.add('select * from 表1');
          open;
          first;
          edit;
          if fieldbyname('text').asstring='aaa' then
            fieldbyname('text').asstring:='bbb'
          else
            fieldbyname('text').asstring:='aaa';
          label1.Caption:=fieldbyname('text').asstring;
          post;
        end;FORM2上有一个ADOCONNECTION2,一个ADOQUERY2,一个BUTTON2,一个LABEL2,按BUTTON2时有
    with adoquery2 do
        begin
          close;
          sql.clear;
          sql.add('select * from 表1');
          open;      first;
          label2.Caption:=fieldbyname('text').asstring;
          
        end;在FORM1上按BUTTON1后,表1中字段TEXT的值若原来为'aaa'的,就变为'bbb',若原来为'bbb'的就变为'aaa',且在LABEL1上显示出来。     按理说,之后在FORM2上按BUTTON2后,LABEL2会显示已修改后的数据,但事实并非如此。除了第一次进行前述操作(先按BUTTON1,再按BUTTON2)能马上从LABEL2上看到刷新后的数据外,往后的操作都是这样,按完BUTTON1后两三秒种内(有时会更长,且时间不定),无论你怎么按BUTTON2,从LABEL2上看到的都是按BUTTON1前数据库中的数据,只有到足够长的时间后,按BUTTON2,才能从LABEL2上看到刷新后的结果。
      相信这个问题很多人都会碰到。期待问题解决。
      

  4.   

    其实我也用过事务处理机制(adoconnection1.begintrans ....写入数据  ....adoconnection1.committrans),但未能解决。