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

时间:2015-02-09 10:17:48

标签: sql database ms-access

这个问题很普遍,但我找不到合适的答案。

将外部数据库与MS Access一起使用有哪些可能性?

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

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

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

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

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

我有什么选择?是使用Access Link功能的最佳方法吗?

最好的问候,埃米尔。

编辑:

SQL - 它们可以合并吗? :

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: 如何将查询及其附加组合到表中?

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;

然后将上述内容附加到表格中:

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;

1 个答案:

答案 0 :(得分:2)

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

MS Access和Excel就此而言,拥有出色的外部数据工具,可以连接到几乎所有外部数据源,并利用常规的基于SQL的数据库,甚至可以使用OLAP多维数据集进行分析。访问本身应该足够强大,可以处理您提到的数据集。甚至Access 2010也应该能够相对轻松地处理数百万条记录。

MS Access确实存在重大限制,即2GB文件大小。一旦你的数据库达到2GB,一切都会消失,你很可能会破坏数据。这是一个众所周知的问题,但我不认为你已接近这些限制。

在考虑升级之前,有几点需要建议:

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

如果您已经查看了上面的项目,并且您认为确实需要采取措施,那么一条相当简单的路径(并且便宜)就是安装SQL Server Express,您可以从Microsoft免费下载。访问是与SQL Server通信,性能要好很多倍。您可以在个人电脑中运行SQL Server Express并将其用作Access的后端,或者您可以将其实际安装在联网的PC中并将其用作服务器(防火墙后面,当然,从不连接到Internet) )。在此设置中,您可以从多台PC访问数据。

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

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

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

首先想到的是SQLite,它是一个高性能的数据库,实际上是基于文件的。它非常小巧,但功能强大且速度非常快,非常适合像您提到的本地应用程序。 SQLite还有许多图形界面,您可以通过ODBC从Access连接到它。同样,您希望使用传递查询运行所有内容,并让SQLite获取负载。 SQLite是开源的,它是免费的。

如果您热衷于拥有真正的数据库服务器&#34;,那么MySQL可能是下一步。它也是开源和免费的,非常受欢迎,这意味着有很多地方可以获得支持和不同的图形界面可供选择。

任何搜索开源数据库都会为您提供更多选择,供您选择。

要记住的一件事是:如果您在PC中安装任何数据库服务器,它将成为服务器,并且如果您开始在本地网络或互联网上宣传其服务把它带到当地的星巴克。请注意,了解如何启动/停止PC中的服务,并确保在不在防火墙后关闭它们。对于不同的数据库服务器有许多漏洞,一旦您的PC开始宣传其新获得的能力,您将很快被检测到。

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