procedure Tfrm_jsqr.Button1Click(Sender: TObject);
var
b:integer;
c:string;
e:tdatetime;
begin
b:=data1.ADOqr.fieldbyname('书籍总数').Value;
e:= incday(now,30);
if b=0 then
application.MessageBox('此书全部外借中','提示',64)
  else
  begin
     with data1.ADOdzxx do
     begin
         close;
         sql.clear;
         sql.Add('select * from 读者信息表 where 姓名=:c');
         parameters.ParamByName('c').Value:=edit1.Text;
         open;
     end;
     data1.ADOdzxx.Active:=true;
     with data1.ADOjyxx do
     begin
        close;
        sql.Clear;
        sql.Add('select * from 借阅信息表 where 1=2');
        open;
        append;
        fieldbyname('ISBN').AsString:=edit2.Text;
        fieldbyname('姓名').AsString:=edit1.Text;
        fieldbyname('借书日期').AsDateTime:=date();
        fieldbyname('应还日期').AsDateTime:=e;
        post
     end;
   with data1.ADOqr do
   begin
     close;
     sql.Clear;
     sql.Add('update 书籍信息表 set 书籍总数=:d where ISBN=:c');
     parameters.ParamByName('c').Value:=edit2.Text;
     parameters.ParamByName('d').Value:=b-1;
     execsql;
   end;
   application.MessageBox('保存成功','提示',64);
   end;
   close;
end;程序如上,现在我能实现 功能上 书籍总数-1 数据库同时-1  
但是我需要关掉整个程序后 然后重启程序 dbgrid 里的数据才-1
我不知道怎么及时更新 DBgrid 里的程序 求教大虾们。。 

解决方案 »

  1.   

    你的DBgrid的datasource是与那个dataset连接的?也是与data1.ADOdzxx还是直接连接表的?
    我建议datasource与data1.ADOdzxx相连接
    在你执行修改表的SQL时:
    else
    begin
    with data1.ADOdzxx do
    begin
    DisableControls;  //加入这条,使DBgrid不滚动
    ...
    application.MessageBox('保存成功','提示',64);
    end;
    close;
    open;           //刷新DBgrid
    DisableControls;   //显示数据
    end;
      

  2.   

    与DBgrid关联的adoquery在窗口close前adoquery执行close再open就行了.或refresh
      

  3.   

    上面错了:
    DisableControls; //显示数据
    改为
    EnableControls; //显示数据如果是直接与表相连接的:
    with AdoTable1 { 你的表 } do
    begin
    DisableControls; //加入这条,使DBgrid不滚动
    Close;
    Open; //刷新DBgrid
    EnableControls; //显示数据
    end;