急急急!!!采用DbGrid+Datasource+Query+UPdateSQL连数据库时,Query只对一个表进行查询,Query的CachedUpdate属性为false,RequestLive属性为true,UpdateObject为UPdateSQL,在前端DBGrid中对表数据进行新增或修改后,数据显示不正常,如新增一条记录,那么原来的记录可能会消失几条,必须刷新此Query数据集前端数据才会显示正常。如果不刷新数据集,请问那位有解决的办法?多谢了,还可加分。

解决方案 »

  1.   

    用close,open刷新
    再用book回到刚才的记录,很笨的办法
      

  2.   

    据我所知,如果不刷新数据集,那么DBgrid就不会显示刚刚插入的新的数据!! 所以每次插入,删除,update...操作,都要刷新一次!! query.close; query.open.就可以了
      

  3.   

    用ADOQuery吧﹗把LookType改為ltBatchOptimistic試試。
      

  4.   

    建议:加入TSession,设置属性autosessin为true,
          加入TDatabase,设置AliasName为数据库别名
          再连TQuery,
         使用缓存更新,CacheUpdate为true。
    刷新建议用close再open,refresh有bug。   
      

  5.   

    同意楼上各位的观点,用close,open刷新。
      

  6.   

    我也是一直用close,open来刷新!
      

  7.   

    Query的CachedUpdate属性为true,RequestLive属性为false;就可以了!
      

  8.   

    千万不要改用ado!你会得不偿失的!
      

  9.   

    数据刷新,防止闪动。
    DataSource1.DataSet.DisableControls;
    query1.Active:=false;
    query1.Active:=true;
    DataSource1.DataSet.EnableControls;
      

  10.   

    query.edit;
    query1.refresh;
    query1.delete;
      

  11.   

    Y应该用query.close; query.open;
      

  12.   

    用close,open刷新
    再用book回到刚才的记录,很笨的办法
    这个方法挺好!!
      

  13.   

    不赞成用close再open,页面一下子空白,一下子闪烁出数据,太不专业,如果数据很多的时候还以为有问题呢。不过好像没有太好的办法,还是用
    DataSource1.DataSet.DisableControls;
    query1.Active:=false;
    query1.Active:=true;
    DataSource1.DataSet.EnableControls;
      

  14.   

    本人对此研究过,如果用上面的说法,都有不好的地方。
    我有一方法,可以解决。
    加用一组件UpdateSQL;
    我是用BCB的,下面是参考:
    Query->CatchedUpdate=true;
    Query-UpdateObject=UpdateSQL
    先用Query的Edit,Append,Insert,Post Cancel
    再用UpdateSQL在Query的AfterPost事件更新Server上的数据。
    不过你不要用TNavigator,你要新编写Edit ,Post,Append,Cancel,Delete
    等按鈕
      

  15.   

    我碰到过这个问题。如果你用sql语句'insert tablename values(...)..'的话,
    会出现你所说的现象。解决方法:
    with Query1 do
    begin
     Append;
    ....
     FieldByname('fieldname').Value:=YourValue;
    ...
     Post;
    end;