救急救急,数据更新不能及时显示的问题~~~在线等待送分!!!

keikai 2002-05-19 02:36:42
//虽然这个问题是Delphi的,但是,C++Builder也一样,所以,俺也把他贴过来,请各位BCB高手相助。

我有一个应用程序,同时开两个实例,访问数据库,数据的更新不能及时反映:
如下,
//主窗体 TMainForm
//菜单点击事件
procedure TMainForm.mSupplyClick(Sender: TObject);
var FrmSupply:TSupplyForm;
begin
FrmSupply:=TSupplyForm.Create(Self);
FrmSupply.ShowModal;
FrmSupply.Free;
end;

//数据显示、编辑窗体 TSupplyForm
//特别注明:TSupplyForm中有一个IBSupplyQuery,被界面上的
DBGrid使用;还有一个IBUpdateQuery,用来更新数据。
IBSupplyQuery的CacheUpdates被设置为false

//在窗体被创建的时候打开Query,并通过DBGrid显示出来
procedure TSupplyForm.FormShow(Sender: TObject);
begin
// IBSupplyQuery.Active:=True;
IBSupplyQuery.Open;
//IBSupplyQuery.Refresh;
end;
//关闭Query
procedure TSupplyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IBSupplyQuery.Active:=False;
end
;
procedure TSupplyForm.btnExitClick(Sender: TObject);
begin
Close;
end;

procedure TSupplyForm.btnRefreshClick(Sender: TObject);
begin
// IBSupplyQuery.Transaction.
IBSupplyQuery.Close;
IBSupplyQuery.Open;
end;
procedure TSupplyForm.btnEditClick(Sender: TObject);
begin
if (IBSupplyQuery.RecordCount>0) and (DBGrid1.SelectedRows.Count>0) then

begin
//...根据DBGrid中记录的值,构造IBSupplyUpdate的参数
//IBSupplyUpdate.ParamByName('NAME').AsString := 'abc';
IBSupplyUpdate.ExecSQL;
IBSupplyUpdate.Transaction.Commit;//提交事务,数据库中数据立刻更新
end;
end;

我总结为,这个TIBQuery控件读的数据就是一开始从数据库中读过来,并保存在缓存中的。
--

放几千爆竹,将穷鬼轰开,几年来被这小畜生弄得偶空手一双,
点数炷清香,把财神引进,从此后愿您老人家保佑俺腰缠万贯.
...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
keikai 2002-05-19
  • 打赏
  • 举报
回复
我就是有一个db链接到数据库,对应也有一个TIBTrasaction啊。
这儿我又发现一个稍微好的方法,就是先把DATABASE.CloseDatasets一下。
不过,程序还是显得很慢~~~
Libran 2002-05-19
  • 打赏
  • 举报
回复
按说不该存放在本地,不用重连的啊
你怎么干的?
keikai 2002-05-19
  • 打赏
  • 举报
回复
除了将DB重新开启、关闭之外,还有无别的好办法?
IBSupplyQuery.Close;
IBSupplyQuery.Database.Close;
IBSupplyQuery.Database.Open;
IBSupplyQuery.Open;
magicsnake 2002-05-19
  • 打赏
  • 举报
回复
需要进行重新查询进行更新
landylau 2002-05-19
  • 打赏
  • 举报
回复
IBSupplyQuery.Close;
IBSupplyQuery.Database.Close;
IBSupplyQuery.Database.Open;
IBSupplyQuery.Open;


keikai 2002-05-19
  • 打赏
  • 举报
回复
呵呵,老兄啊,我也是这么想的,不过,这样子之后,数据集仍然是老样子,并没有更新,Sigh~
现在的问题是,IBSupplyQuery.Open; 得到的数据集,来自本地,不是从服务器上读过来的啊~~~
landylau 2002-05-19
  • 打赏
  • 举报
回复
是说点btnEdit后不能及时反映吗?
在btnEditClick最后再执行一次

IBSupplyQuery.Close;
IBSupplyQuery.Open;

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧