使用 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的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint 2007:链接列表项的目标受众

如何生成作者链接 - Spfx/React 和 Sharepoint 2019?

如何限制排在SharePoint列表中的号码?

无法通过 Microsoft Graph 更新 SharePoint 中的超链接或图片

更新链接到 SharePoint 的 Access 表中的信息

如何使用 Graph API 读取 sharepoint 在线列表的附件