使用 Sharepoint 列表中的链接表从 Excel 执行 sql 到 Access
Posted
技术标签:
【中文标题】使用 Sharepoint 列表中的链接表从 Excel 执行 sql 到 Access【英文标题】:Execute sql from Excel to Access with linked tables from Sharepoint lists 【发布时间】:2020-05-12 13:43:16 【问题描述】:我有一个 Excel 文件,它在带有本地表的 MS Access 数据库上执行 SQL 查询,工作正常。现在我必须让这个数据库在网络上工作,我们只有 SharePoint。我发现了 SharePoint 列表,因此我将表导出到这些列表中,现在我有了一个带有链接表的 Access 数据库。
问题是我无法像以前那样在这个数据库上使用 Excel 中的查询。是否可以?因为我可以从 Access 中进行这些查询并且它可以工作,所以我不明白为什么它不能从 Excel 中进行。这是我的功能:
Sub test()
Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & "C:\...\BADO.accdb"
strSql = "SELECT Count(*) FROM Programmes;"
cn.Open strConnection
Set rs = cn.Execute(strSql)
MsgBox rs.Fields(0) & " tuples dans Programmes"
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
连接cn.Open
的部分有效,但是当它尝试执行cn.Execute
时,Excel 进入无休止的加载并崩溃。此代码仅适用于本地表。
如果不可能,我在想我可以让数据库与其本地表在 SharePoint 上并让用户将其与 OneDrive 同步,但我不知道同步是如何工作的。如果数据库很重,我不希望他们每次都上传完整大小。那么,有没有办法让这段代码工作呢?
【问题讨论】:
请描述您的环境。 Excel 文件和/或 Access 数据库是位于 SharePoint 上、SP 之外但硬连线 LAN 上,还是位于通过无线/远程连接连接到 SP 的本地 CPU 上? 【参考方案1】:归根结底,这是一个网络环境问题。从 Excel 测试您的代码,其中工作簿和 Access 数据库都驻留在通过局域网 (LAN) 连接到 SharePoint 的网络上,我没有遇到挂起或崩溃的问题。
但是,从通过无线或远程连接连接到 SharePoint 的本地 CPU 运行工作簿和 Access 数据库时,我确实遇到了严重的挂起和崩溃。
因此,请按复杂程度考虑以下选项:
LAN 连接:将 Excel 工作簿和 Access 数据库放置在与 SharePoint 建立 LAN 连接的网络空间中。这可能涉及用户通过 *** 远程连接到本地计算机。
操作查询:让 MS Access 从链接到您的简单计数聚合的本地表运行生成表查询:
SELECT Count(*) AS [Count] INTO Programmes_Count FROM Programmes;
或者,对预先创建的表使用附加查询,这可能比DROP TABLE
更好,并且每次都重新创建:
DELETE FROM Programmes_Count;
INSERT INTO Programmes_Count ([Count])
SELECT Count(*) FROM Programmes;
可以保存此类操作查询,然后使用从 Excel 调用的 Access macros 或 modules 自动执行。然后让 Excel 访问这些本地表。
COM 自动化:让 Excel 将 Access.Application 作为 COM 对象启动,然后让数据库本身查询链接表。
Sub RunQuery()
Dim accApp, db, qdef, rst As Object
Dim strSQL As String
Set accApp = CreateObject("Access.Application") ' LAUNCH ACCESS IN BACKGROUND
accApp.OpenCurrentDatabase "C:\Path\To\Database.accdb"
strSQL = "SELECT Count(*) AS [Count] FROM Programmes;"
Set db = accApp.CurrentDb() ' ASSIGN UNDERLYING DB
Set qdef = db.CreateQueryDef("", strSQL) ' CREATE QDEF OR USE SAVED
Set rst = qdef.OpenRecordset() ' OPEN RECORDSET
' LAUNCH MESSAGE BOX
MsgBox rst.Fields(0) & " tuples dans Programmes"
' CLOSE OBJECTS
rst.Close: qdef.Close
accApp.DoCmd.CloseDatabase
accApp.Quit
' RELEASE RESOURCES
Set rst = Nothing: Set qdef = Nothing:
Set db = Nothing: Set accApp = Nothing
End Sub
更好地绕过Access应用程序并通过DAO查询Access:
Sub RunQuery()
Dim conn, db, qdef, rst As Object
Dim strSQL As String
Set conn = CreateObject("DAO.DBEngine.120") ' LAUNCH DAO CONNECTION
Set db = conn.OpenDatabase("C:\Path\To\Database.accdb")
strSQL = "SELECT Count(*) AS [Count] FROM Programmes;"
Set qdef = db.CreateQueryDef("", strSQL) ' CREATE QDEF OR USE SAVED
Set rst = qdef.OpenRecordset() ' OPEN RECORDSET
' LAUNCH MESSAGE BOX
MsgBox rst.Fields(0) & " tuples dans Programmes"
' CLOSE OBJECTS
rst.Close: db.Close
' RELEASE RESOURCES
Set rst = Nothing: Set qdef = Nothing
Set db = Nothing: Set conn = Nothing
End Sub
【讨论】:
“归根结底,这是网络环境问题。”确切地。当我创建链接数据库时,我在计算机的本地区域中,它运行良好。我假设如果我使用它旁边的 Excel 文档,它会起作用,但不是。所以,多亏了你的帖子,我把它们移到了 OneDrive 区域,然后它开始工作,不再崩溃。非常感谢你 !而且你建议我绕过Access应用程序,通过DAO查询Access,所以我会调查一下。 嗯....您是否在 MS Access 中测试过相同的查询?如果在 CPU 的本地区域,它的运行速度应该和 Excel 一样慢。请记住,远程连接可能会出现间歇性性能。与 LAN 不同,运行良好或时不时挂起。以上是关于使用 Sharepoint 列表中的链接表从 Excel 执行 sql 到 Access的主要内容,如果未能解决你的问题,请参考以下文章
如何生成作者链接 - Spfx/React 和 Sharepoint 2019?
无法通过 Microsoft Graph 更新 SharePoint 中的超链接或图片