excel 中vba与sql 和access之间的区别,与优势是啥,各种适合用应于哪些方面或数据场合 ?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel 中vba与sql 和access之间的区别,与优势是啥,各种适合用应于哪些方面或数据场合 ?相关的知识,希望对你有一定的参考价值。
参考技术A excel主要是用来做简单的数据处理,少量数据记录、数据表示(将数据以适当的形式展现,如表格,透视表、图表等),access的定位是数据库,即数据的存储及管理,即数据的存储需要以适当的形式来组织,以使得数据的存储减少冗余、保持一致以及通过建立索引来加快海量数据的查询。。。excel的优点是灵活、适合小规模数据的简单计算、以及透过丰富的展现手段表现数据。。。access的优势是海量数据的管理(相对excel而言)能够有组织、高效率的存放和提取
如何使用sql语句和vba将数据从MS-Access导入excel power查询?
在我工作的公司中,有一个文件夹,其中包含许多由系统生成的访问数据库文件。它们具有相同的结构但数据不同。我正在尝试构建一个Excel工具来比较和分析其中一些使用电源查询(连接到工作簿数据模型并使用DAX)。将使用该系统的人不熟悉vba,电源查询(我也不熟悉)或SQL语句。所以,我想要做的是编写一个vba函数来允许人们选择他们想要分析的文件,然后使用这些数据更新工作簿电源查询。电源查询源数据应该是SQL语句。
我正在使用“公式”属性来进行所需的所有更改(实际上,新数据源文件,附加带有文件名的列,并将结果附加到其他数据源文件(如果选择了多个)。下面的代码可以工作,如果我导入一个表,但我无法使用SQL语句。我试图改变一些Access.Database参数,如使用Query =“Select XXX”而不是Item =“TableXXX”但它没有用。我发现了一些关于使用ODBC的信息,但我不想使用ODBC,因为在我看来,该工具可以导致许多连接处理(打开和删除)用户决定更改数据源。
下面是一个只有两个数据源文件的“公式”属性的例子。我没有写循环来构建字符串strSource,因为我没有问题。我想问题是在Access.Database中使用SQL语句。谢谢您的帮助。
strSource = "let
Fonte = Access.Database(File.Contents("PathNameFile01Name.mdb")),
_TbEx_1 = Fonte{[Schema="",Item="TableExample"]}[Data],
_TbEx_C1 = Table.AddColumn(_TbEx_1, "Case", each "File01Name", type text),
Fonte_2 = Access.Database(File.Contents("PathNameFile02Name.mdb")),
_TbEx_2 = Fonte_2{[Schema="",Item="TableExample"]}[Data],
_TbEx_C2 = Table.AddColumn(_TbEx_2, "Case", each "File02Name", type text),
_TbExComb = Table.Combine({_TbEx_C1 , _TbEx_C2})
in
_TbExComb"
ActiveWorkbook.Queries("PwQry01").Formula = strSource
ThisWorkbook.Connections("Qry-PwtQry01").Refresh
在互联网上搜索,我发现了一种使用SQL语句的方法,但问题是在同一个电源查询中组合不同文件的连接。按照我发现的代码,但我认为“公式”属性更接近最终答案。
cnString = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
"PathNameFile01Name.mdb;Mode=Read"
ThisWorkbook.Connections.Add2 _
Name:="MyConnect", _
Description:="Testing connection", _
ConnectionString:=cnString, _
CommandText:="SELECT * FROM TableExample", _
lCmdtype:=XlCmdType.xlCmdSql, _
CreateModelConnection:=True, _
ImportRelationships:=True
天真,我希望看到的是:
strSource = "let
Fonte = Access.Database(File.Contents("PathNameFile01Name.mdb")),
_TbEx_1 = Fonte{[Schema="",Query="SELECT XXXXX"]}[Data],
_TbEx_C1 = Table.AddColumn(_TbEx_1, "Case", each "File01Name", type text),
Fonte_2 = Access.Database(File.Contents("PathNameFile02Name.mdb")),
_TbEx_2 = Fonte_2{[Schema="",Query="SELECT XXXX"]}[Data],
_TbEx_C2 = Table.AddColumn(_TbEx_2, "Case", each "File02Name", type text),
_TbExComb = Table.Combine({_TbEx_C1 , _TbEx_C2})
in
_TbExComb"
ActiveWorkbook.Queries("PwQry01").Formula = strSource
ThisWorkbook.Connections("Qry-PwtQry01").Refresh
使用Access对单个mdb文件“连接”所有数据并使用它来完成剩下的工作会容易得多。
我按照@Wedge的建议并使用了ODBC方法。为了使它工作,我创建了一个ODBC,没有与Windows ODBC数据源关联的ms-access文件。在Excel中,用户选择他想要分析的文件,此信息是strPath()变量。使用循环,所有文件都包含在Formula属性中。变量tpPQSQLMap是一个自定义类型(我相信可能是一个字典),其中strPQNames为查询名称,strPQSQL为SQL语句。遵循最终代码
For pq = 1 To ThisWorkbook.Queries.Count
strSource = ""
strSrcComb = ""
For k = 1 To UBound(strPath)
strSource = strSource + "SourceC" + CStr(k) + "=Odbc.Query(""dbq=" + strPath(k) + ";dsn=MyODBC"", """ + tpPQSQLMap(pq).strPQSQLs + """), " + vbCrLf
strSrcComb = strSrcComb + "SourceC" + CStr(k) + ","
Next k
strSrcComb = Left(strSrcComb, Len(strSrcComb) - 1)
strSource = "let " + vbCrLf + strSource + "Final = Table.Combine({" + strSrcComb + "}) " + vbCrLf + "in " + vbCrLf + "Final "
ThisWorkbook.Queries(pq).Formula = strSource
ThisWorkbook.Connections("Query - " + tpPQSQLMap(pq).strPQNames).Refresh
Next pq
以上是关于excel 中vba与sql 和access之间的区别,与优势是啥,各种适合用应于哪些方面或数据场合 ?的主要内容,如果未能解决你的问题,请参考以下文章
从 Excel VBA 运行嵌套的 Access SQL 查询
如何使用sql语句和vba将数据从MS-Access导入excel power查询?
在 Excel VBA 中使用长 Access SQL 查询