删除一条记录:Form1上有dbgrid1、query1、datasorce1、button1、edit1五个控件。
query1的SQL为select * from t_user
query1的active为truebutton1上click事件代码如下:
with query1 do
begin
  close;
  sql.clear;
  sql.add('delete * from t_user where username=:name');
  execsql;
end;当然只要在Edit1中输入正确的用户名(即username),就可以删除掉这条记录,可是dbgrid1中就没有数据显示了,但此时查后台数据库数据却更新了。
我提的问题就是:在执行了相关的insert、delete、update之后,dbgrid如何实时的保持与后台数据库的数据一致!这段程序应该怎么改啊?(千万不要告诉我就在后面加一条dbgrid1.refresh)

解决方案 »

  1.   

    再刷新一次不就出来了?:
    query1的SQL为select * from t_user
    query1的active为true
      

  2.   

    delete和select不要用同一个query
      

  3.   

    经验之谈:如果楼用在程序中有过程之间调用,在使用Query的时候最好是动态创建,不然可能会引起不必要麻烦
      

  4.   

    你要用一个query也可以。你可以这样
    Query1.DisableControls;
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Text:='Delete ...';
    Query1.ExeSQL;
    if Query1.Active then
       Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Text:='Select ....';
    Query1.Open;
    Query1.EnableControls;
      

  5.   

    但在这点上不是很赞同 jinjazz(近身剪(N-P攻略))  的观点在程序里不要放置太多的Query,你可以指定某一个Query为全局操作的Query,比如起名叫:OperationQuery,那就可以对所有表作操,但同时要记得我上面提到
      

  6.   

    一个query专门显示 其他的更改、删除 ,操作完了后 刷新一次
    就Close;Open。。
      

  7.   

    BigAngell(风雨英雄)经验之谈:如果楼用在程序中有过程之间调用,在使用Query的时候最好是动态创建,不然可能会引起不必要麻烦。
    是在是太感谢了!坚持动态创建。我现在正在慢慢的调试之中,感谢各位大侠指点!由于要下班了,给分就明天了!
      

  8.   

    当然也可以加一个timer控件
    双击加入代码:
       query1.close;
       query1.open;此时你的数据库时时刷新,
      

  9.   

    >>程序里不要放置太多的Query
    没所谓吧,现在在可维护性和系统资源的平衡上已经不比以前了,没有必要为了几个控件去写很多动态的代码,我的程序一直有很多query的,而且要用永久字段和计算字段的话就最好不要动态了