【问题标题】:Excel as front-end - Access as Backend - Only INSERTSExcel 作为前端 - 作为后端访问 - 仅插入
【发布时间】:2015-09-14 17:19:42
【问题描述】:

我正在开发一个 Excel to Access 应用程序,其中前端将是一个 Excel 工作簿,提供给将填写和提交表单的 60 位用户。提交表单时,表单数据将使用 VBA 和 ADO 插入到 Access mdb 文件中的一个表(只有一个表)中。用户将只插入记录;没有更新。 (基本上它是一个数据输入应用程序,为了加快数据输入速度,多个用户将使用 Excel 文件将记录输入到一个通用的后端 mdb 数据库中。)

如果只执行 INSERTS,是否会出现任何锁定或并发问题?如果是,有没有办法处理它们?

(我知道 SQL Express 或其他解决方案会比 MS-Access 解决方案更好。但业务需要一个 mdb 文件,因为它可以很容易地定期邮寄给其他人进行分析。)

【问题讨论】:

    标签: excel ms-access vba


    【解决方案1】:

    考虑在 Access 而不是 Excel 中构建表单。表单是 Access 的一个组成部分,可以在没有 VBA 或 ADO 的情况下更新、追加、删除表数据,因为表将是表单的 RecordSource。但是 Access 表单仍然允许 VBA 编码和具有交互性的嵌入式宏(即 OnClick、OnOpen、AfterUpdate、BeforeChange、AfterDelConfirm 事件)比 Excel UserForms 更先进。

    另外,Access 最多允许同时使用 255 个用户。您甚至可以将 Access 拆分为前端和后端两个文件,并将多个前端分发给所有 60 个用户,但保留一个后端数据文件。更重要的是,Access 后端可以使用 ODBC/OLEDB 驱动程序升级到任何标准 RDMS(Oracle、SQL Server、MySQL、PostgreSQL、DB2)。

    请不要仅仅因为 Excel 是一个非常流行且易于使用的应用程序而满足于它。要构建用户窗体,通过 ODBC 连接到数据库,并使用 VBA 记录集运行循环插入将相当于相当多的代码,因为所有这些都是 Access 本机的,并且可以在没有一行 VBA 的情况下构建。将 Excel 用作最终用途文档,例如 Word 或 PDF,与公式、统计数据、报告和表格/图表的静态导出数据交互。

    并发

    根据 DAOADO 调用或一般数据库设置,可以在 MS Access 表、存储查询或 VBA 记录集中设置各种锁定机制:

    1. 悲观锁定 - 当第一个用户处于编辑模式时单个记录被锁定
    2. 乐观或无锁定 - 仅在第一个用户处于保存模式时锁定单个记录;通常这用于 SAME 记录并发可能性较低的环境中
    3. 所有记录锁定 - 当第一个用户处于编辑模式时整个表被锁定

    通常,悲观锁定是默认设置(Access 表单采用此设置),在第一个用户之后,如果尝试编辑 SAME 记录,用户会收到错误消息。对于您插入数据的情况,锁定不会造成问题,但前提是您的其他用户可以浏览和编辑以前的数据。

    【讨论】:

    • 谢谢,冻糕。请注意,在 Access 中不会创建任何用户。所有 Excel 工作表都具有相同的连接字符串(没有用户名/密码)。我的基本问题是:鉴于没有 Update 语句,只有 INSERTS 和 SELECTS,可能会出现什么类型的并发和锁定问题。如果他们这样做,如何处理它们。 (插入可能会有一些延迟,因为插入不是关键任务。)
    • 另外,关于使用 Excel vba 和编码,我已经准备好代码,因为我已经编写并部署了另一个相同的 Excel Access 应用程序,该应用程序在过去 20 个月内为 30 个用户平稳运行。我这次我很担心,因为用户数量更多。
    • 正如@Parfait 所说,您应该使用 Access 来管理数据输入。如果不这样做,您将致力于从根本上重写 Access,因为您最终将需要 Excel 中缺少的所有功能 - 正如您现在所发现的那样。更糟糕的是,听起来您正在 mdb 上执行原始 SQL 语句,这不允许 DbEngine 管理事务 - 因此是您问题的根本原因。原始 SQL INSERT 语句是否存在并发问题?是的,因为您正在创建同时将 2 条记录添加到同一个表中的可能性。
    • 查看我添加的关于并发的注释。因为您的用户正在添加不同的数据记录,所以除非他们编辑以前的数据,否则不会导致锁定问题。
    • 谢谢,冻糕。原始帖子和关于并发的附加说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2021-10-25
    • 2016-11-15
    • 2018-05-04
    • 1970-01-01
    • 2014-03-03
    相关资源
    最近更新 更多