有一个系统 C/S 架构
A 输入了东西或修改了东西
B 自动刷新
我用了一个timer ,每5秒钟刷新一次
用了好几个方法都没解决刷新的问题,代码如下:book:=Adoquery1.GetBook; //记录当前数据集指针
book1:=ADOQuery_ypjy.GetBook; //记录当前数据集指针
book2:=ADOQuery_jgyj.GetBook; //记录当前数据集指针
try
beginADOQuery1.Refresh;
ADOQuery_ypjy.Refresh;
ADOQuery_jgyj.Refresh;end
exceptexit;
end;Adoquery1.GotoBook(book);
ADOQuery_ypjy.GotoBook(book1);
ADOQuery_jgyj.GotoBook(book2);这样的方法,A 新增了一个数据,B没有更新。A修改了一个数据,B有更新
*****************************************************************
book:=Adoquery1.GetBook; //记录当前数据集指针
book1:=ADOQuery_ypjy.GetBook; //记录当前数据集指针
book2:=ADOQuery_jgyj.GetBook; //记录当前数据集指针
try
beginADOQuery1.Close;
ADOQuery1.open;
ADOQuery_ypjy.Close;
ADOQuery_ypjy.open;
ADOQuery_jgyj.Close;
ADOQuery_jgyj.Open;end
exceptexit;
end;Adoquery1.GotoBook(book);
ADOQuery_ypjy.GotoBook(book1);
ADOQuery_jgyj.GotoBook(book2);
这样的方法,数据可以刷新,但是,Dbgrideh 的行标(选中那行)老是在跳,虽然我用了book,表现为,我在Dbgrideh 选中了最后一行数据,刷新后,这行数据会自动跳到中间。********************************************************************
book:=Adoquery1.GetBook; //记录当前数据集指针
book1:=ADOQuery_ypjy.GetBook; //记录当前数据集指针
book2:=ADOQuery_jgyj.GetBook; //记录当前数据集指针
try
beginADOQuery1.Requery();
ADOQuery_ypjy.Requery();
ADOQuery_jgyj.Requery();end
exceptexit;
end;Adoquery1.GotoBook(book);
ADOQuery_ypjy.GotoBook(book1);
ADOQuery_jgyj.GotoBook(book2);问题是,B既没有刷新,而且行标会跳。**********************************************************我想实现的效果是,A新增或者修改的数据,行标不要跳,在B那能够看到新的数据。
A 输入了东西或修改了东西
B 自动刷新
我用了一个timer ,每5秒钟刷新一次
用了好几个方法都没解决刷新的问题,代码如下:book:=Adoquery1.GetBook; //记录当前数据集指针
book1:=ADOQuery_ypjy.GetBook; //记录当前数据集指针
book2:=ADOQuery_jgyj.GetBook; //记录当前数据集指针
try
beginADOQuery1.Refresh;
ADOQuery_ypjy.Refresh;
ADOQuery_jgyj.Refresh;end
exceptexit;
end;Adoquery1.GotoBook(book);
ADOQuery_ypjy.GotoBook(book1);
ADOQuery_jgyj.GotoBook(book2);这样的方法,A 新增了一个数据,B没有更新。A修改了一个数据,B有更新
*****************************************************************
book:=Adoquery1.GetBook; //记录当前数据集指针
book1:=ADOQuery_ypjy.GetBook; //记录当前数据集指针
book2:=ADOQuery_jgyj.GetBook; //记录当前数据集指针
try
beginADOQuery1.Close;
ADOQuery1.open;
ADOQuery_ypjy.Close;
ADOQuery_ypjy.open;
ADOQuery_jgyj.Close;
ADOQuery_jgyj.Open;end
exceptexit;
end;Adoquery1.GotoBook(book);
ADOQuery_ypjy.GotoBook(book1);
ADOQuery_jgyj.GotoBook(book2);
这样的方法,数据可以刷新,但是,Dbgrideh 的行标(选中那行)老是在跳,虽然我用了book,表现为,我在Dbgrideh 选中了最后一行数据,刷新后,这行数据会自动跳到中间。********************************************************************
book:=Adoquery1.GetBook; //记录当前数据集指针
book1:=ADOQuery_ypjy.GetBook; //记录当前数据集指针
book2:=ADOQuery_jgyj.GetBook; //记录当前数据集指针
try
beginADOQuery1.Requery();
ADOQuery_ypjy.Requery();
ADOQuery_jgyj.Requery();end
exceptexit;
end;Adoquery1.GotoBook(book);
ADOQuery_ypjy.GotoBook(book1);
ADOQuery_jgyj.GotoBook(book2);问题是,B既没有刷新,而且行标会跳。**********************************************************我想实现的效果是,A新增或者修改的数据,行标不要跳,在B那能够看到新的数据。
在GotoBook后加Adoquery1.EnableControls;
应该能决你的问题.
但定时刷新的办法只能用于数据量少的情况,这个问题多年前就讨论过,有些数据库带事件触发功能(如interbase 的TIBEvents),如果没有,最好自己用socket来传递更新消息.否则一是效率低二是容易将表锁死.
http://topic.csdn.net/u/20080821/09/349B39EC-54DC-401C-AE37-677DCC194D76.html
http://topic.csdn.net/u/20080912/14/5E948E3F-D9D2-4109-906A-2EE0701788D1.html
http://topic.csdn.net/t/20030110/21/1347854.html
在open之前加Adoquery1.DisableControls;
在GotoBook后加Adoquery1.EnableControls;
应该能决你的问题.这个还不能解决,表现为,如果焦点选的那个浮标(行标?) 在底部,刷新后,会自动跳到中间的,虽然选中的还是那一行,但是这样让客户感觉到了 那个数据在跳了。
adoquery1.Locate('mdid',id,[]);mdid为字段名,id刷新之前记录的mdid的值。