 |
操作系统:WIN
编程工具:VB
问题:我最近在用VB6.0编写一个数据库管理软件,客户机为WIN98操作系统,服务器端为NT Server4.0+SQL Server2000,请问如何在多个用户访问同一个数据库时始终确保数据的同步,也就是说不管哪一个客户端程序往某个数据库中添加或删除记录,其它正在连接该数据库的客户端程序从数据库中读取的数据都应该是当前最后一次被更新过的数据,即数据必须是实时的,任何对该数据库中数据的更改都会立即反映到连接该数据库的其它客户端程序中,我知道用数据控件连接到数据库时可以利用其记录集的Refresh刷新方法对当前记录集进行刷新来获得最新的数据,但是我在程序中用的是ADO对象访问数据库,该对象的记录集中好象没有Refresh方法,请问专家我该怎样做来确保数据的实时性,最好不要在客户端专门编程来实现而由服务器端定时发回最新的数据 ,因为我怕会影响网络访问的速度,多谢! (zhfox1937)
|
| |
|
 |
ADO中 没有 refresh 方法,但是有 requery 方法。客户端所有打开的recordset全部是在内存中的。也就是说如果想实现数据库和recordset的完全同步并不是件容易的事情。
解决的方法,我就想到这些。
1、想要服务器定时发回,太简单了,客户端有个timer控件,每次都rs.requery一下就OK了。
2、上面并不是完全的同步,如果想服务器端一旦发生了变化,就反映到客户端,则要在SQL server 建立一个触发器,当SQL Server 做了一次Update动作的时候,就触发一个信号给客户端,让客户端执行一次requery。
okokwuka的意见:
我给出的解决方案是用多层结构,利用com+与消息机制完成这个任务。
可以用消息通讯的方式异步地完成数据的更改。这样你可以在业务规则的com+中完成事务处理功能,来保证数据的完整性与一致性。
diruser的意见:
请用SQL2000的触发器进行。
LWWVB的意见:
记录集不是有一个动态游标的吗?看看这方面的ADO帮助吧...
AdOpenDynamic 动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。
此问题由wholehope回答。
附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 数据库, database, query。
|
| |
|
| |
|
| |
|
|