delphi+sql 数据库更新 但dbgrid 中的数据没有及时的更新 急急急
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 里的程序 求教大虾们。。
[解决办法]
你的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;
[解决办法]
与DBgrid关联的adoquery在窗口close前adoquery执行close再open就行了.或refresh
[解决办法]
上面错了:
DisableControls; //显示数据
改为
EnableControls; //显示数据
如果是直接与表相连接的:
with AdoTable1 { 你的表 } do
begin
DisableControls; //加入这条,使DBgrid不滚动
Close;
Open; //刷新DBgrid
EnableControls; //显示数据
end;
[解决办法]
重新打开就可以