通过网络对* .mdb进行ODBC访问

时间:2015-08-13 19:20:07

标签: ms-access networking odbc nas

我有一个关于* .mdb如何工作的ODBC的一般问题。

根据我的理解,当我访问存储在另一台计算机(即NAS,我的计算机)上的MS Access数据库(* .mdb)时,无论我是否使用odbc,请纠正我首先需要加载完整的* .mdb文件,然后才能对它进行任何操作,无论它们有多简单。与仅将结果发送回查询的SQL服务器不同。

如果您可以确认这一点,那么我就通过odbc访问mdb的多用户环境提出了一些相关问题:

  • 文件保存到商店(即NAS)的频率是多少?是否存在某种“空闲”超时或类似情况?我试图找出这个生成的网络流量较大的文件。
  • 一个用户在同一个文件上看到另一个用户所做更改的速度有多快?
  • 这种文件访问如何在多用户环境中工作而不会不断导致数据损坏?

请注意,我确实知道更好,更有效的解决方案,我真的只对这种特定情况的内部运作感兴趣。

谢谢

2 个答案:

答案 0 :(得分:6)

  

根据我的理解,当我访问存储在另一台计算机(即NAS,我的计算机)上的MS Access数据库(* .mdb)时,无论我是否使用odbc,请纠正我首先需要加载完整的* .mdb文件,然后才能对它进行任何操作,无论它们多么简单。

你错了。打开数据库时,整个.mdb(或.accdb)文件将通过网络拉出。如果可以使用索引来识别相关行,即使对特定表的操作也不一定会通过网络拉动整个表。对于使用Wireshark执行的实际测量,请参阅我的回答documentation

  

文件保存到商店(即NAS)的频率是多少?是否存在某种“空闲”超时或类似情况?我试图找出使用较大文件生成的网络流量。

Access数据库引擎可能会在提交之前将更新缓冲几秒钟。这可能是为了减少对数据库文件的争用。当提交 更新时,Access数据库引擎仅通过网络发送修改后的页面;它不会重写整个表(或文件)。

  

一个用户在同一个文件上看到另一个用户所做更改的速度有多快?

我前段时间进行了一些测试,发现一个用户(连接)所做的更改通常在大约五(5)秒后可用于其他连接。有关详细信息,请参阅我的回答here

  

这种文件访问如何在多用户环境中工作而不会不断导致数据损坏?

每个用户都有自己的Access数据库引擎实例来操作共享数据库文件,但各种实例相互合作以管理记录/页面锁定。请注意,在“共享模式”下打开Access数据库文件(.accdb或.mdb)时,会在同一文件夹中创建锁定文件(.laccdb或.ldb)。 Access数据库引擎的各种实例使用此锁定文件来管理多用户访问。

示例re:网络流量

我刚刚使用Wireshark来捕获使用ODBC运行的VBScript生成的网络流量

...
width: dp(30) if variable_x else TODO

对照驻留在网络共享上的84.3 MB Access数据库文件。该文件由一(1)个表组成,该表包含一百万(1,000,000)行并且具有Long Integer [ID]字段作为其主键。

产生的总网络流量
  • 打开与数据库文件的ODBC连接,
  • 运行查询
  • 返回结果,
  • 关闭连接

是110 KB。

答案 1 :(得分:0)

你有一个很好的问题我无法回答!

然而:

如果您正在使用和访问多个用户的前端和数据,MS建议:

  1. 您将数据库拆分为两个文件。一个拥有其他所有其他表(即前端文件)的表

  2. 每个用户都有一份前端文件的副本(这有时是必不可少的,但你可以在不这样做的情况下离开,但不建议这样做,因为有些代码可能会阻止多个用户!)

    < / LI>

    因此,只有数据可以推动,而不是表单和报告定义。

    这里有一些有趣的网页here

    简而言之:

    如果您使用的是Microsoft Jet(.mdb)数据库,则使用DAO类比使用Microsoft Access ODBC驱动程序更有效。