![Access 通过 ODBC 连接远程 Postgresql 数据库可用吗?](https://linux22.com/image/481285/Access%20%E9%80%9A%E8%BF%87%20ODBC%20%E8%BF%9E%E6%8E%A5%E8%BF%9C%E7%A8%8B%20Postgresql%20%E6%95%B0%E6%8D%AE%E5%BA%93%E5%8F%AF%E7%94%A8%E5%90%97%EF%BC%9F.png)
我目前有一个 MS Access 应用程序,它通过 ODBC 连接到 PostgreSQL 数据库。它成功地在有 20 个用户的 LAN 上运行(每个用户都运行自己的 Access 版本)。现在,我正在考虑一些灾难恢复方案,似乎保护数据的一种快速简便的方法是使用日志传送来创建热备用。
这让我考虑将这个热备用系统放在远程位置,但我有一个问题:
Access 通过 ODBC 连接远程数据库是否可用? 即远程数据库可能位于同一国家/地区,ping 时间正常,并且我有一条 1mbit SDSL 线路。
答案1
简短回答:是的。
长答案:如果你要回来更小数据集,是的。您还需要在 pgodbc 驱动程序中启用特定标志和设置,因为 Access 会根据服务器反馈的内容发出警告:
KSQO(键集查询优化)应该打开。是的,我知道文档说这不是必需的,但实际情况是 MSAccess 正在向服务器传递一些看起来相当粗糙的 SQL。这只是稍微整理了一下 SQL 语句。不相信我吗?打开 ODBC 的日志记录,发送一个查询,关闭日志,翻阅几兆的废话,90% 的路程你会看到一个生成并传递的看起来很糟糕的 SQL 语句。不,这是不是ODBC 驱动程序,是 Access 在做这件事。
使用声明/获取如果您计划以交互方式查看大型数据集,则应启用该选项。这将导致驱动程序获取结果集中较小的块,而不是将一个庞大的负载转储到其中。
文本作为 LongVarChar- 您可能希望测试一下。我猜您会希望将其“打开”。
未知尺寸应设置为最大值。
马克斯·瓦查尔建议设置为 254 或更小,但也可以设置为更大。
额外选项- 设置为 0x6(假 MS SQL Server + 以 ANSI 而非 Unicode 回复)。
(所有这些都可以在http://psqlodbc.projects.postgresql.org/config.html)
请记住大型数据集会给你带来痛苦,尽管从服务器返回的数据通常都是紧凑的二进制格式。
答案2
我使用 MSA 和 WAN 数据库的经验从未如此丰富。总有那么一刻,Access 会决定从数据库中提取大量数据。我成功的方法有两种:将 Access 前端也放在远程服务器上并使用终端服务器。或者使用 SQL Passthrough 查询,这样您就可以明确控制传递到/来自数据库服务器的内容。
答案3
在这种情况下,要使 Access 应用程序正常工作,必须将其设计为检索最少的数据,并且很可能最适合未绑定的表单,因为 Access/Jet/ACE 需要每秒左右 ping 远程数据库以刷新绑定表单中显示的数据。由于可以在 Access 中设置 ODBC 刷新间隔,因此在完全不绑定之前,应该先尝试一下,因为这意味着您将错过使用 Access 作为前端的 90% 的好处。
总体而言,我认为上述场景并不是特别可行。这意味着本末倒置,您的灾难恢复计划将决定常规应用程序的设计。我认为将应用程序托管在靠近远程数据库服务器的某个位置会是一个更好的解决方案,因为它不需要对 Access 应用程序进行重大改动。