我们正在考虑“增加”一个MS-Access数据库,其中包含一些用于多个用户的表,表单和查询。 (使用不同的后端是另一个,但更长期的选择,遗憾的是目前是不可接受的。)
大多数用户将是只读的,但会有一些(当前是一个或两个)用户必须能够进行更改(而只读用户也在使用数据库)。我们并不关心安全方面,而是关注以下一些问题:
非常感谢任何有用文章的提示或指示。
答案 0 :(得分:51)
答案 1 :(得分:4)
要做的第一件事(如果尚未完成)是将数据库拆分为前端(包含所有表单/报表等)和后端(包含所有数据)。第二件事是在前端设置版本控制。
我在很多数据库中这样做的方法是让用户运行一个小的“跳线”数据库来打开主数据库。这个跳线做了以下事情
•检查用户是否在其C盘上有数据库
•如果没有则安装并运行
•如果他们这样做,那么检查他们有哪个版本
•如果版本号不匹配,请复制最新版本
•打开数据库
整个检查过程通常需要不到半秒钟。使用此模型,您可以在单独的数据库上进行所有开发,然后当您准备“发布”时,只需将新的mde放到网络共享上,下次用户打开跳线时,将复制最新版本。 / p>
在多用户数据库中还有其他需要考虑的事情,可能值得检查常见错误,例如将表单绑定到整个表等等。
答案 2 :(得分:2)
数据写入期间Access中可以使用表或记录锁定。您可以通过工具|控制默认记录锁定选项|高级选项卡:
您可以在表单的Record Locks或DAO / ADO代码中设置此项以满足特定需求。
如果正确使用交易,交易不应该是一个问题。
最佳做法:将表与所有其他代码分开。为每个用户提供他们自己的代码文件副本,然后在网络服务器上共享数据文件。处理代码的“测试”副本(以及指向测试数据文件的链接),然后单独更新用户的各个代码文件。如果您需要更改数据文件(添加表,列等),则必须让所有用户离开应用程序才能进行更改。
请参阅Oracle比较的其他答案。
答案 3 :(得分:2)
我认为Access是您案例的最佳选择。但是您必须拆分数据库,请参阅: http://accessblog.net/2005/07/how-to-split-database-into-be-and-fe.html
•当其他用户使用数据时,我们如何确保写入用户可以更改表数据?读取用户是否将锁定放在表格上?写用户是否必须在表上放置锁? Access是否为我们执行此操作,还是必须显式编写此代码?
除非您明确地将它们放在一起,否则没有读锁定。只需使用“No Locks”
•我们应该注意“MS Access交易”是否存在任何常见问题?
不应该是1-2写用户的问题
•我们可以在使用表格,查询等工作吗?我们怎样才能“编程”而不妨碍用户?
如果您拆分数据库 - 那么在FE设计上没有问题。
•MS Access中的哪些设置会对事情的处理方式产生影响?
你是什么意思?
•我们的背景主要是在Oracle中,Access在处理多个用户方面有何不同? Access中有“隔离级别”这样的东西吗?
访问中没有隔离级别。 顺便说一句,如果你有很多用户和大数据库,你可以稍后将数据移动到oracle并保持访问前端。
答案 4 :(得分:0)
Access是一个很棒的多用户数据库。它具有许多内置功能来处理多用户情况。事实上,它非常受欢迎,因为它是一个非常棒的多用户数据库。有多少用户可以同时使用数据库进行更新和编辑有一个上限 - 取决于开发人员对访问的了解程度以及数据库的设计方式 - 从20个用户到大约50个用户。可以构建一些访问数据库以处理多达50个并发用户,而其他许多访问数据库可以处理20或25个并发用户更新数据库。对于已经使用了几年或更长时间的数据库,已经观察到这些数据,并且已经在访问新闻组中多次讨论过。
答案 5 :(得分:0)
我发现Vista中引入了SMB2协议来锁定访问数据库。 它可以通过以下注册表禁用:
Windows注册表编辑器版本5.00
[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\ LanmanServer \参数] “SMB2”= DWORD:00000000
答案 6 :(得分:0)
构建客户端/服务器的正确方法Microsoft Access应用程序(其中数据存储在RDBMS中)是使用链接表方法。这可确保在Microsoft Access客户端应用程序和RDBMS数据之间维护数据隔离和并发,而无需额外的和不必要的编程逻辑和代码,这使维护更加困难,并增加了开发时间。
请参阅:http://claysql.blogspot.com/2014/08/normal-0-false-false-false-en-us-x-none.html