我的任务是使用依赖于ODBC连接的Access 2007应用程序,并与具有相同ODBC连接的其他机构共享它。如果我不能很好地沟通,请原谅我。我不是开发人员,但是我已经完成了这项任务,因为我已经做到了这一点。我确信之前从未发生过......
首先,我将给出我们结构的布局:
Access应用程序从ODBC中提取学生课程活动,并应用逻辑来确定学生是否/何时停止参加所有课程。这时,这个逻辑是一系列与宏相关的查询。然后,数据库生成学生的报告(包含来自ODBC的更多信息)。存在一个主动跟踪过程,因此可以从报告中清除记录,除非发生更改,这将导致记录随更改重新出现。这需要将数据存储在本地,因为ODBC是只读的。 VBA也支持各种形式和报告。
目标是打包软件并在所有其他校园分发。到目前为止,我们通过简单地向它们发送accdb文件并使用一个启动链接表管理器的按钮来完成小型分发。初始分发后,我将继续开发软件并分发更新,必须保留本地存储在accdb中的数据。
问题在于我只有使用Access的经验以及足够的VBA知识才能在出现时单独使用Google解决方案。
我的问题可能简单或复杂,我不确定。基本上我想知道除了我一直在做的事情之外是否有更合适的方法:发送accdb并且用户复制并粘贴唯一需要转移的表。
澄清
将accdb转换为每个分发版本的可执行文件是否可行?当ODBC需要重新连接并且ODBC在校园之间是唯一的时,这是否可能?
答案 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服务器可以在网络上访问的其他机器上的每个学校安装。一旦您有更好的信息,这可能会随着时间的推移而发挥作用。