【问题标题】:Importing vs linking to Excel spreadsheets导入与链接到 Excel 电子表格
【发布时间】:2012-11-15 00:32:14
【问题描述】:

我目前链接到六个 Excel 电子表格,主要是因为用户在 Excel 中编辑数据更容易/更好(他们从未使用过 Access),并且任何更改都会立即反映,包括新列已添加,然后可以立即供查询使用。

但是链接而不是导入此数据是否会降低性能?我的一些查询很慢,1-2 分钟,有时只需要 2-3 分钟就可以保存一个查询。我将如何设置 Access 以在每次打开数据库时导入这些工作表的新版本,是否值得?

【问题讨论】:

  • 这不是一个很好的多用户设置,你并不真的希望用户能够修改结构,例如添加/删除列。我不确定您在 access 中的背景/知识水平,但我更愿意将所有表存储在 access 中并开发前端屏幕供您的用户与数据交互,这对您来说是一个选择吗?
  • 对于系统的大小以及如何使用它不值得开发前端屏幕。我想如果我可以设置一个宏来在每次打开数据库时导入电子表格,并锁定电子表格以便只有我可以添加额外的列,那将是一个很好的平衡。
  • 但是我是否通过链接到电子表格而不是让数据位于 Access 表中而大大降低了性能?
  • 您测试过导入电子表格的性能吗?我的直觉反应是,根据电子表格的大小,它会更快。这值得一看。
  • @TonyWilkes 将电子表格导入 Access 并不能肯定会提高性能,只要电子表格的结构像数据库表一样正确,不包含太多数据,并且不在访问时间慢的共享空间。然后他们应该提供合适的性能。但是,如果任何查询将受益于 Indexing 某些列,那么您确实必须导入,因为我认为您不能针对链接的电子表格设置索引。

标签: performance excel ms-access import hyperlink


【解决方案1】:

关于链接电子表格的性能,您会立即想到 4 个因素:

  1. 网络性能
  2. 电子表格链接的数量(您说大约 6 个)
  3. 查询的复杂性
  4. 数据集的大小(猜测如果人们经常编辑它,可能会远低于 10,000 行)

鉴于保存查询通常很慢,我猜#1 是您的主要瓶颈。是的,使用链接而不是导入对性能的影响很小,但是您的用例(小数据集,没有太多链接)会使这种损失非常小。另一方面,慢速网络会减慢所有操作,包括将更改保存到 Access 数据库本身。

【讨论】:

  • 我将所有文件复制到我的 C 驱动器上,并重置链接以使用 Excel 文件的 C: 版本,延迟仍然存在,所以我认为它不是 #1。我不认为#2 或#4 是一个问题,但是对于#3,我倾向于构建多个级别的查询——即我将有一些直接访问链接表的基本查询,然后是一些引用的查询到这些基本查询,然后是一些引用这些第二级查询的更复杂的查询。这不是“最佳实践”吗?鉴于无法为查询编制索引,这是否会出现放缓?
  • 根据您刚才所说的,#3 + 您无法索引数据这一事实是性能低下的明显原因。
【解决方案2】:

我会提出我最终得到的解决方案,因为它几乎解决了我上面遇到的问题,包括自动更新数据:

有适当的访问表用于查询,例如tblStoreDetails, tblPromotions

仍然使用电子表格来维护数据,因为这是更新/查看这些内容的最灵活方式,无需在 Access 中构建表单/前端,这真的不值得花时间,因为没有其他人会这样做直接使用数据库。

在 Access 中链接到这些表,例如excelStoreDetails, excelPromotions

设置一个在启动时运行的 Autoexec 宏(假设单击了启用宏按钮),使用删除查询来清空 Access 表,并使用追加查询将链接的 Excel 表中的行添加到 Access 表中。

这解决了删除/重新导入表引起的问题,主要是它们最终都在 Unassigned Objects 组中;或尝试使用导入规范并最终导致类型不匹配。

【讨论】:

  • 但是我现在才发现一些较大的表的缺点是来自链接电子表格的追加查询可能非常慢,并且磁盘上的数据库大小现在是巨大的。可以考虑在关闭时自动进行压缩和修复,但这会增加更多时间。唉,如果 Access 是一匹马,现在早就有人开枪了。
【解决方案3】:

您可以通过 ADODB 连接连接到 excel 文件并在 ADODB.recordset 中打开它。它非常非常快。事实上,它可以像连接到“真实”数据库一样快。

实施这种解决方案的可能性取决于您将查询“翻译”成记录集的能力。您需要对 VBA 和 ADODB 对象有一定的了解,因为我必须编写代码来生成记录集,然后在屏幕上(或在报告中)显示它们的内容。

【讨论】:

  • 在我的头顶和底下——也许几年后。 8-)
  • 只有一个问题:您是否尝试过使用 Access 中提供的嵌入式“从 Excel 导入”工具?正确导入和索引数据后,尝试查询。如果您发现有很大的不同,那么您可以考虑自动从 Excel 导入。这并不复杂,您只需将 VBA 导入功能与文件多选框结合使用即可。
  • 我尝试在 Access 宏中使用 transferspreadsheet 和 runsavedimportexport 实现自动化,但我遇到的问题是 Access 决定某些字段是整数,即使还有文本值进一步向下,并且将数据放入的字段已设置为文本。烦人,但除了在电子表格中放置一个虚拟行之外,我无能为力,我真的不想这样做。
  • 我忘记了这个。我想我们可以通过在第一次导入之前在访问文件中创建表结构来解决这个问题。无论如何,为了使用索引,我们需要在导入之间保持表结构稳定。但我的目的是评估基于访问数据的查询与基于 excel\链接数据的相同查询之间的差异。
  • 没关系,我可以从这里解决。但问题是,即使在导入之前设置了一个表,所有字段都设置为文本,并且导入规范说“将这些字段导入为文本”,Access 仍然会查看导入文件并尝试猜测它保存的数据 - 如果它猜错了,那么就会有导入错误和丢失数据。 8-/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
相关资源
最近更新 更多