关于在2个界面上操作数据库中同一个表的问题,

关于在2个界面上操作数据库中同一个表的问题, Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061215093921295.html
表名:   table    
  字段:   姓名(文本)、电话(文本)、公司(文本)、目前所在地(布尔型,本地和外地)  
   
  现在有2个界面,界面1   和   界面2      
  两个界面都放有DBGird   和3个按钮(添加、修改、刷新)  
   
  我现在在界面1里添加一条数据为   (张三     0451     新浪     外地)到数据库里  
  但是界面2刷新后不显示此数据,只有当在界面1里把该数据修改为   (张三   0451   新浪   本地)后  
   
  ,再在界面2里刷新才能看到,  
  相反在界面2里添加数据也同样效果。  
   
  这2个界面的代码怎么写。    
  ------------------------------  
   
 

用2个ADO分别连接这2个dbgrid吧,刷新时候同时刷新2个就可以

我是用2个ADO分别连的,我在界面1里面添加的数据修改和不修改,界面1里都能看到,  
  但是对于界面2,只有界面1修改了才能看到,否则看不到. 反过来也一样.

菜鸟的方法:设定你的TADOQuery或TADOTable按时间刷新

你用哪个方法刷新?

刷新了看不到?我还没遇到过。不过最简单的办法就是2个dbgrid公用一个数据源,连刷新都不用了。

grid1、grid2共用一个数据源  
  将grid2的filter设为:目前所在地=本地  
   
  或  
   
  用2个ado连接,在dataset的afterpost事件中刷新另一个dataset  
  在ado2的语句中   where   目前所在地=本地

我现在在界面1里添加一条数据为   (张三     0451     新浪     外地)到数据库里  
  但是界面2刷新后不显示此数据,只有当在界面1里把该数据修改为   (张三   0451   新浪   本地)后  
   
   
  你确定数据已经入库了码????  
   
  如果入库,刷新就应该读的到(除非代码有问题)  
   
  刷新的时候,最好关掉,再打开,例如adoquery1.close;adoquery1.open;

另外一种方法,你把Adoquery放到datamodual中,让两个窗口同时引用datamodual,使用同一个datasource和adoquery   来处理。这个不需要刷新,能同步看到。

呵呵,   看老冯的高级方法:  
   
  运用观察者模式,轻松搞定。

另外一个方法就是API消息传递:  
  把数据库记录定义为record.   当A写入一条记录时,   将记录通过PostMessage发送给B,   反之亦然。相比观察者模式,这个方法破坏了封装。

什么意思?就是说界面1显示[目前所在地]为本地的,界面2显示[目前所在地]为外地?

requery()

没有提交数据吧?  
  你要用事务来控制,这样数据才能一致

1   两个界面共用一个ADOQUERY  
  2   其中一个改变后发消息给另一个窗体,让它刷新  
  3   不要绑定,数据库访问用一个对象封装,其它对象ADD   DEL   UPDATE   都通过它,它记录所有访问的窗体,有变化时通知全部刷新。  
 

posted on 2009-05-12 16:00  delphi2007  阅读(160)  评论(0编辑  收藏  举报