不是这个问题啊,即便我再加上一条语句:
IBSupplyQuery.Close;
IBSupplyQuery.Open;
数据还是老样子,没有更新啊,其实也就是,读的记录一直都是本地的Cache。

解决方案 »

  1.   

    将TSupplyForm.FormClose去掉;
    在TSupplyForm.FormShow中写:
      IBSupplyQuery.Close; 
      IBSupplyQuery.Open; 
    —————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    —————————————————————————————————
           
      

  2.   

    在你提交时,用一个刷新语句对数据库进行刷新(Refresh),每次提交更新时都执行(Refresh),这样就可以得到即使跟新了,只不过在运行是速度慢了些.
      

  3.   

    我这么写的时候,他给我一个错误啊~
    说什么updatesql为空。
    你是指在第一实例Commit的时候加这句,还是在另外一个实例打开窗口的时候加?
      

  4.   

    不行啊,我在Commit之后执行Refresh,就报错:
    Can not perform operation on a closed dataset
    语句如下:
       if ShowModal=mrOK then
        begin
         with IBUpdateQuery do
          begin
           ParamByName('iGHDWSX').AsInteger:=SX;
           ParamByName('iGHDWBH').AsString:=eGHDWBH.Text;
           ParamByName('iGHDWMC').AsString:=eGHDWMC.Text;
           ParamByName('iSZD').AsString:=eSZD.Text;
           ParamByName('iBZ').AsString:=eBZ.Text;
           //Prepare;
           ExecSQL;
           //UnPrepare;
           Transaction.Commit();
           Refresh;
          end;
        end;
      

  5.   

    在IBUpdateQuery.SQL 中你是用的什么SQL语句(SQL)
      

  6.   

    你在  Refresh;  之前加IBUpdateQuery.open;
      

  7.   

    照你的方法,不行的说~~~555555
    现在的问题,不是第一个程序(暂且称之为AppA)的更新动作没有起作用,这句语句执行之后,数据库中已经被更新了。
    问题在于,第二个程序(称之为AppB)的IBQuery读到的记录集,仍然是AppB启动时,从数据库那边得到的缓存,并没有真正到服务器端去读,如果,他去读了,那么结果肯定是正确的啦~~~
    语句如下:
    UPDATE SUPPLY SET 
    GHDWBH=:IGHDWBH,GHDWMC=:IGHDWMC,SZD=:ISZD,BZ=:IBZ
    WHERE GHDWSX=:IGHDWSX;
      

  8.   

    你别有refresh
    将Query.autofrech:= false;//close open后就应该可以了;
    给它一定的绶存;
    再者,你也可以用
    insert语句,这样的话,它每一执行就提交了;
      

  9.   

    好像TIBQuery没有autofrech这个属性啊?其他类似也没有嘛~~
      

  10.   

    ForceRefresh我已经设置为True啦!
    那个属性?CacheUpdates?还是BufferChunk?
    CacheUpdates设置为False啦,
    BufferChunk,这个值好像有关,他不能被设置为0,我设置其为1(默认1000)
      

  11.   

    with IBUpdateQuery do
          begin
           ParamByName('iGHDWSX').AsInteger:=SX;
           ParamByName('iGHDWBH').AsString:=eGHDWBH.Text;
           ParamByName('iGHDWMC').AsString:=eGHDWMC.Text;
           ParamByName('iSZD').AsString:=eSZD.Text;
           ParamByName('iBZ').AsString:=eBZ.Text;
           //Prepare;
           ExecSQL;
    -》
    sql-insert ..values(...)//不用你去fresh
      

  12.   

    刚刚在BCB版,那边的高手告诉我一个方法,极其土,我都不好意思这么做。呵呵~~~,但是,土办法有土办法的用处,他们说:
    在IBQuery打开记录集的时候,先把数据库给Close;Open一下~~~
    我一试,确实可以,但是,这样子,实在恐怖啊,变得很慢~~~
      

  13.   

    这儿我又发现一个稍微好的方法,就是先把DATABASE.CloseDatasets一下。
    不过,程序还是显得很慢~~~楼上的老兄,你的方法好像比较烦啊~~