依赖ODBC连接的前端Access替代方案?

时间:2012-06-13 20:47:25

标签: database ms-access vba odbc

我的任务是使用依赖于ODBC连接的Access 2007应用程序,并与具有相同ODBC连接的其他机构共享它。如果我不能很好地沟通,请原谅我。我不是开发人员,但是我已经完成了这项任务,因为我已经做到了这一点。我确信之前从未发生过......

首先,我将给出我们结构的布局:

  • 我在一所大学里工作,通过ODBC与其他31所学校共享一个数据库。
  • 维护所有校园数据库的系统办公室只允许我们通过公共接入点服务器(CAP)的VPN访问只读数据,然后通过ODBC连接
  • CAP服务器(唯一可以链接到ODBC的位置)具有Microsoft Office,并且没有Internet访问权限。
  • 每个园区都有一个唯一的ODBC连接,当accdb放置在其CAP服务器上时,需要重新链接表。
  • 每次启动Access时,用户还必须登录ODBC连接。
  • CAP服务器可以在网络驱动器上进行读写,但反之亦然。
  • 我们可以放心地假设CAP服务器上没有其他软件可以安装,但可以放置文件(这就是我们可以分发accdb文件的原因)

Access应用程序从ODBC中提取学生课程活动,并应用逻辑来确定学生是否/何时停止参加所有课程。这时,这个逻辑是一系列与宏相关的查询。然后,数据库生成学生的报告(包含来自ODBC的更多信息)。存在一个主动跟踪过程,因此可以从报告中清除记录,除非发生更改,这将导致记录随更改重新出现。这需要将数据存储在本地,因为ODBC是只读的。 VBA也支持各种形式和报告。

目标是打包软件并在所有其他校园分发。到目前为止,我们通过简单地向它们发送accdb文件并使用一个启动链接表管理器的按钮来完成小型分发。初始分发后,我将继续开发软件并分发更新,必须保留本地存储在accdb中的数据。

问题在于我只有使用Access的经验以及足够的VBA知识才能在出现时单独使用Google解决方案。

我的问题可能简单或复杂,我不确定。基本上我想知道除了我一直在做的事情之外是否有更合适的方法:发送accdb并且用户复制并粘贴唯一需要转移的表。

澄清

将accdb转换为每个分发版本的可执行文件是否可行?当ODBC需要重新连接并且ODBC在校园之间是唯一的时,这是否可能?

2 个答案:

答案 0 :(得分:1)

您可以添加一个重新链接按钮,循环遍历数据库中的表并重新连接它们

dim tdf as tabledef
dim db as database
db = currentdb
db.tabledefs.refresh
for each tdf in db.tabledefs
    with tdf
        if len(.connect)>0 then ' this is a table that has a connect string
           if left$(.connect)="ODBC" then  ' this is an ODBC connection
                .connect = newconnectstring
                .refreshlink
           end if
        end if
    end with
next

答案 1 :(得分:1)

要求最终用户将每个升级中存储本地数据的表从一个accdb文件复制并粘贴到另一个accdb文件中,最终会导致数据丢失 - 某人在升级过程中会忘记此步骤。

更可靠的方法是创建第二个accdb数据库。将其称为“YourAppName_data.accdb”或其他类似的东西,并将其放在与前端客户端相同的目录中,或者放在名为“Data”的子目录中。将“data”accdb文件中的表链接到前端客户端。

您可以向前端客户端添加启动代码,可以尝试通过查找已知位置中的数据accdb文件来自动重新链接这些表。如果程序找不到它,您可以提示用户为您找到它。顺便说一句,您也应该能够为ODBC表做类似的事情。您可以使用类似于ChrisPadgham在此步骤的答案中所写的代码。

此时您所做的是从应用程序前端(表单,查询)中分离应用程序的数据(每个学校需要能够自行维护的只读数据和数据) ,逻辑和报告)。

这样可以更轻松地将更新分发到前端客户端。最终用户只需将前端客户端复制到正确的目录,覆盖目录中的现有文件并运行程序。

这样可行,但它仍然没有那么强大,因为任何有权访问CAP服务器的人都可能从服务器上删除数据文件。 (希望每所学校定期备份本机以防止数据丢失。)

正如HansUp所建议的那样,通过将存储在Access accdb文件中的数据移动到每个位置的SQL Server数据库,最终可以提供更好的服务,这将更好地控制谁可以访问信息,并且会有点更好地保护数据,因为SQL Server数据库文件在服务器运行时在计算机上“锁定”。 (这可以防止有人意外删除文件)。 SQL Server的缺点是存在学习曲线,需要在CAP服务器或CAP服务器可以在网络上访问的其他机器上的每个学校安装。一旦您有更好的信息,这可能会随着时间的推移而发挥作用。