你需要做的是 3件事
1. 注意 Access 2007 里面的 jet 引擎在 Win7 上是有点问题的!一定要安装 补丁的。
2553029 Description of the Office Access 2007 hotfix package (Ace-x-none.msp, Access-x-none.msp): August 30, 2011
http://support.microsoft.com/default.aspx?scid=kb;EN-US;2553029
2. 如果你是连接 sql 服务器 或 网络上的 连接表 的话,a, b, c, d 必须要做其中一个,
a) 所有 连接改为 name pipe 方式,包括连接表,和vba编写的动态连接
例子:Provider=SQLOLEDB;Data Source=np:\\ServerName\pipe\sql\query;Connect Timeout=10;User ID=UserName;Password='Pwd
b) 所有 连接改为 ip地址 方式,包括连接表,和vba编写的动态连接
例子:Provider=SQLOLEDB;Data Source=tcp: ServerName;Connect Timeout=10;User ID=UserName;Password='Pwd'
c) 关闭 LLMNR 通信协议 http://technet.microsoft.com/en-us/library/bb878128.aspx.
http://social.msdn.microsoft.com/Forums/en/windowscompatibility/thread/f295994c-5812-4e46-8ac9-f05471d4dd54
d) 把你要连接的数据源的服务器名字对应的 ip 地址放在 你的 lmhosts 或者 hosts 里面(看你用哪种网络方式连接, tcpip 还是 micosoft network)
一般的 拖慢,闪烁,死机情况就能解决的了。
其实,原因是 Win7 采用了 支持 ipV6 的名称解释协议,名叫 LLMNR 协议服务器搜寻协议,这个是 Vista,Server2008,Windows 7 上会有的。
但是本地网上其他的电脑,或者服务器根本对这个协议没有响应,而Win7 客户每 0.1秒 又发出一次解释,又等待 0.2秒,而每个查询都会有大概至少20个连接的,而造成了最少6秒时间的等待。
所以解决方法就是不用名称连接服务器,或者关闭 LLMNR 协议,或者服务器用 2008,Win7 等支持 LLMNR 协议的系统。