关于在2个界面上操作数据库中同一个表的问题, Delphi / Windows SDK/APIhttp://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 都通过它,它记录所有访问的窗体,有变化时通知全部刷新。