我有一个关于* .mdb如何工作的ODBC的一般问题。
根据我的理解,当我访问存储在另一台计算机(即NAS,我的计算机)上的MS Access数据库(* .mdb)时,无论我是否使用odbc,请纠正我首先需要加载完整的* .mdb文件,然后才能对它进行任何操作,无论它们有多简单。与仅将结果发送回查询的SQL服务器不同。
如果您可以确认这一点,那么我就通过odbc访问mdb的多用户环境提出了一些相关问题:
请注意,我确实知道更好,更有效的解决方案,我真的只对这种特定情况的内部运作感兴趣。
谢谢
答案 0 :(得分:6)
根据我的理解,当我访问存储在另一台计算机(即NAS,我的计算机)上的MS Access数据库(* .mdb)时,无论我是否使用odbc,请纠正我首先需要加载完整的* .mdb文件,然后才能对它进行任何操作,无论它们多么简单。
你错了。打开数据库时,整个.mdb(或.accdb)文件将不通过网络拉出。如果可以使用索引来识别相关行,即使对特定表的操作也不一定会通过网络拉动整个表。对于使用Wireshark执行的实际测量,请参阅我的回答documentation。
文件保存到商店(即NAS)的频率是多少?是否存在某种“空闲”超时或类似情况?我试图找出使用较大文件生成的网络流量。
Access数据库引擎可能会在提交之前将更新缓冲几秒钟。这可能是为了减少对数据库文件的争用。当提交 更新时,Access数据库引擎仅通过网络发送修改后的页面;它不会重写整个表(或文件)。
一个用户在同一个文件上看到另一个用户所做更改的速度有多快?
我前段时间进行了一些测试,发现一个用户(连接)所做的更改通常在大约五(5)秒后可用于其他连接。有关详细信息,请参阅我的回答here。
这种文件访问如何在多用户环境中工作而不会不断导致数据损坏?
每个用户都有自己的Access数据库引擎实例来操作共享数据库文件,但各种实例相互合作以管理记录/页面锁定。请注意,在“共享模式”下打开Access数据库文件(.accdb或.mdb)时,会在同一文件夹中创建锁定文件(.laccdb或.ldb)。 Access数据库引擎的各种实例使用此锁定文件来管理多用户访问。
我刚刚使用Wireshark来捕获使用ODBC运行的VBScript生成的网络流量
...
width: dp(30) if variable_x else TODO
对照驻留在网络共享上的84.3 MB Access数据库文件。该文件由一(1)个表组成,该表包含一百万(1,000,000)行并且具有Long Integer [ID]字段作为其主键。
由
产生的总网络流量是110 KB。
答案 1 :(得分:0)
你有一个很好的问题我无法回答!
然而:
如果您正在使用和访问多个用户的前端和数据,MS建议:
您将数据库拆分为两个文件。一个拥有其他所有其他表(即前端文件)的表
每个用户都有一份前端文件的副本(这有时是必不可少的,但你可以在不这样做的情况下离开,但不建议这样做,因为有些代码可能会阻止多个用户!)
< / LI> 醇>因此,只有数据可以推动,而不是表单和报告定义。
这里有一些有趣的网页here
简而言之:
如果您使用的是Microsoft Jet(.mdb)数据库,则使用DAO类比使用Microsoft Access ODBC驱动程序更有效。