使用 MS Access 2010 的外部数据库的可能性

Possibilities for external database with MS Access 2010

这个问题很笼统,但是我找不到好的答案。

在 MS Access 中使用外部数据库有哪些可能性?

我看到 MySQL 可以使用,但我必须设置 ODBC 连接并在每台机器上安装驱动程序。问题是我有一个使用大量数据的 MS Access 开发的软件,当我包含大量数据时,它处理数据的速度非常慢。

该软件分析来自风力涡轮机的数据,因此它被不同的客户使用,它可能包含许多不同的涡轮机,每个数据集中有 50,000 多行。

我希望将这些涡轮机数据存储在一个单独的文件中,该文件由 MS Access 指向,因此我包含了软件 + 任何需要的涡轮机数据。

就像现在一样,我有很多Access数据库文件,其中的数据包含在软件中。无法跟踪 - 特别是当我对软件的源代码进行编辑时,这几天经常做。

另一个问题是用户可能只有 Access Runtime。

我在这里有什么选择?使用Access Link函数的最佳方法是什么?

此致,埃米尔。

编辑:

SQL's - 它们可以合并吗? :

SELECT q_DataLimited.YAW001, q_DataLimited.YAW002
FROM q_DataLimited
WHERE (((q_DataLimited.YAW002)>Degree_dsp() And (q_DataLimited.YAW002)<Degree_dsp_high()));

SELECT Count(q_WindRose_PCU.YAW001) AS CountOfYAW0011
FROM q_WindRose_PCU;

编辑 2:

Public Degree As Long
Public Function Degree_dsp() As Long
Degree_dsp = Degree * 20
End Function

我有学位作为函数外的计数器,形式为:

For Degree = 0 To 17
DoCmd.OpenQuery "q_WindRose_PCU"
DoCmd.Close
Next Degree

编辑 3: 如何组合查询并将其附加到 table?

SELECT q_PowerBinned.Bin, Avg(q_PowerBinned.POW001) AS AvgOfPOW001, StDev(q_PowerBinned.POW001) AS StDevOfPOW001, Avg(q_PowerBinned.WSP001) AS AvgOfWSP001, StDev(q_PowerBinned.WSP001) AS StDevOfWSP001, Avg(q_PowerBinned.POW002) AS AvgOfPOW002, StDev(q_PowerBinned.POW002) AS StDevOfPOW002, Avg(q_PowerBinned.WSP002) AS AvgOfWSP002, StDev(q_PowerBinned.WSP002) AS StDevOfWSP002, Count(q_PowerBinned.Bin) AS CountOfBin
FROM q_PowerBinned
GROUP BY q_PowerBinned.Bin;

然后将上面的附加到 table:

INSERT INTO t_Average_Stored ( Bin, PowAvg001, WindAvg001, PowAvg002, WindAvg002, n_samples, PowDev001, WindDev001, PowDev002, WindDev002 )
SELECT q_Average_Temp.Bin, q_Average_Temp.AvgOfPOW001, q_Average_Temp.AvgOfWSP001, q_Average_Temp.AvgOfPOW002, q_Average_Temp.AvgOfWSP002, q_Average_Temp.CountOfBin, q_Average_Temp.StDevOfPOW001, q_Average_Temp.StDevOfWSP001, q_Average_Temp.StDevOfPOW002, q_Average_Temp.StDevOfWSP002
FROM q_Average_Temp;

我已经在评论中看到了一些建议,但我将回答您发布的一般性问题。总之,可能性是无限的。

MS Access 和 Excel 具有出色的外部数据工具,可让您连接到几乎任何外部数据源并利用基于常规 SQL 的数据库,甚至使用 OLAP立方体来做你的分析。 Access 本身应该足够强大以处理您提到的数据集。即使是 Access 2010 也应该能够相对轻松地处理数百万条记录。

MS Access 确实有一个很大的限制,即 2GB 的文件大小。一旦您的数据库达到 2GB,一切都会消失 window 并且您很可能会出现数据损坏。这是一个众所周知的问题,但我认为您没有接近这些限制。

不过,在考虑升级之前,有几点建议:

  • 分析数据和数据库的结构。也许您的表太大(很多列)并且不必要地冗余。处理您收到的原始数据以将其拆分为不同的表以减少冗余并提高性能可能是有意义的。
  • 考虑为表格中的一些关键字段编制索引。这在很大程度上取决于您所做的分析类型以及最常见的查询。阅读索引以及如何使用它们,并使用实际数据集探索一些选项。您可能会感到惊讶,过去 运行 需要几分钟才能完成的查询在创建和维护正确的索引后变得几乎瞬间完成。
  • 分析您的查询性能。如果我没记错的话,MS Access 2010 有一个性能分析器,可以改进您的查询,使它们 运行 更有效。

如果您已经研究了上述项目并且您决定您确实需要更进一步,一个相当简单(并且便宜)的方法是安装 SQL Server Express,您可以下载从微软免费。访问是为了与 SQL 服务器通信,性能要好很多倍。您可以 运行 SQL Server Express 在您的个人电脑中并将其用作 Access 的后端,或者您实际上可以将其安装在联网的电脑中并将其用作服务器(在防火墙后面,当然,永远不要连接到互联网)。在此设置中,您可以从多台 PC 访问您的数据。

一旦开始使用 Access 作为前端,要牢记的一件重要事情是,您希望将处理推到后端,而不是将其保留在 Access 中。执行此操作的最佳方法是创建 Access 所称的传递查询。这些查询是用后端的原生 SQL 语言编写的,并被发送到后端服务器进行处理。只有处理过的数据会返回。如果您不这样做,例如通过在 Access 的可视化编辑器中创建查询,原始数据将被发送到 Access 并且 然后 Access 将尝试创建您的结果。正如您所想象的那样,这实际上可能比您的初始情况慢很多,所以不要这样做。

如果您不是 SQL 专家并且需要可视化编辑器,可以从 Microsoft 下载一个工具:SQL-Server Management Studio Express。查询编辑器与 Access 没有太大区别,允许您以可视方式创建查询,但使用的是 Transact-SQL(SQL 服务器的语言)。您还可以使用此工具管理您的 SQL Server Express 并以这种方式(导入、导出等)维护您的数据。您可以在此编辑器中创建所需的 SQL 语句,然后复制并粘贴到 Access 中的传递查询中。数据将在您熟悉的程序中为您提供,但在幕后有一个更大的数据库引擎的力量。

因为我不想听起来像微软的骗子,所以我绝对想提一下外部数据的其他选项,这些选项可能与 SQL Server Express 同等甚至更强大。我提到这些的唯一原因是因为您已经熟悉 Microsoft 产品并且学习曲线不那么陡峭。此外,大多数东西应该开箱即用。

第一个想到的选项是 SQLite,这是一个实际上基于文件的高性能数据库。它非常小,但非常强大和快速,非常适合您提到的基于本地的应用程序。 SQLite 也有很多图形界面,您可以通过 Access 中的 ODBC 连接到它。同样,您希望 运行 使用直通查询的所有内容,并让 SQLite 承担负载。 SQLite 是开源的,而且是免费的。

如果您热衷于拥有 "a real database server",那么 MySQL 可能是下一步。它也是开源和免费的,非常受欢迎,这意味着有很多地方可以获得支持和不同的图形界面可供选择。

任何对开源数据库的搜索都会为您提供更多选项供您尝试和选择。

需要牢记的一件重要事情:如果您在 PC 上安装任何数据库服务器,它将成为一个服务器,并开始在您的本地网络或如果你把它带到当地的星巴克,就可以在互联网上找到。对此要小心,了解如何 start/stop PC 中的服务,并确保在不在防火墙后面时关闭它们。有许多针对不同数据库服务器的漏洞,一旦您的 PC 开始宣传其新获得的功能,您就会很快被发现。

只是关闭,Access的性能和运行时间没有区别。只是能够编辑查询等等。无论您在 Access 中创建什么前端,您的用户都能够以相同的方式使用。