访问.ldb文件&多重连接。

时间:2012-11-15 19:05:07

标签: c++ ms-access odbc

我有一个API,可以打开一个用于读写的访问数据库。 API在构造时打开连接,并在被破坏时关闭连接。打开数据库时,会创建一个.ldb文件,当它关闭时,它会被删除(或消失)。

有多个应用程序使用API​​来读取和写入访问数据库。我想知道:

  1. ldb文件是否用于跟踪多个连接
  2. 调用db.close()是关闭所有连接还是只关闭一个实例。
  3. 上述方法是否会出现同步问题。

3 个答案:

答案 0 :(得分:2)

db.Close()关闭一个连接。关闭所有连接后,将自动删除.ldb。

请记住,虽然Jet数据库(即Access)确实支持多个并发用户,但它们并不是非常适合非常大的并发用户群;首先,当出现网络问题时,它们很容易被破坏。我现在正在处理这个问题。如果是这样,您将需要使用数据库服务器。

那就是说,我已经多次使用Jet数据库了。

当您说“同步问题”时,不确定您的意思。

答案 1 :(得分:1)

  1. 是的,需要多个用户以共享模式打开数据库。似乎它代表“锁定数据库”。请在MSDN中查看更多信息:Introduction to .ldb files in Access 2000
  2. Close()仅关闭一个连接,其他连接不受影响。
  3. 是的,如果您尝试编写其他用户已锁定的记录,则可能。但是,数据将保持一致,您将收到有关写冲突的错误。
  4. 实际上,MS Access不是多连接使用场景的最佳解决方案。 您可以查看SQL Server Compact这是MS SQL Server的简易版本。它在进程中运行,支持多个连接和多线程,大多数强大的T-SQL功能(不包括存储过程)等。

答案 2 :(得分:1)

作为对其他好答案的补充说明,我强烈建议在客户端应用程序的生命周期内保持与虚拟表的连接。

过于频繁地关闭连接并允许每次创建/删除锁定文件是一个巨大的性能瓶颈,并且在某些情况下快速访问数据库实际上会导致查询和插入失败。

你可以在我前一段时间的this answer中阅读更多内容。

在性能和可靠性方面,您可以从Access数据库中获得很多,只要记住一些事项:

  • 在客户端的生命周期内保持连接对虚拟表开放(或者至少使用一些超时,如果你不想保留它就会在20秒不活动后关闭连接一直打开。)

  • 设计您的客户端应用程序以正确关闭所有连接(包括我没时间做的虚拟连接),无论发生什么(例如崩溃,用户关闭等)。
    保留锁定并不好,因为这可能意味着客户端已将数据库置于未知状态,并且如果其他客户端继续保持过时锁定,则可能增加损坏的可能性。

  • 定期压缩和修复数据库。让它成为夜间任务 这将确保数据库得到优化,并且删除任何陈旧数据并正确关闭打开锁。

  • 良好,稳定的网络连接对于基于文件的数据库的数据完整性至关重要:避免像瘟疫这样的WiFi。

  • 有办法从数据库服务器本身踢出所有客户端 例如,有一个表格,例如客户定期轮询的MaintenanceLock字段。如果设置了该字段,则在给予用户保存其工作的机会后,客户端应断开连接 同样,当客户端应用程序启动时,请检查数据库中的此字段以允许或禁止客户端连接到它 现在,您可以随时快速退出客户,而无需访问每个用户并要求他们关闭应用程序。确保当您运行Compact& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp;修理维护。