【问题标题】:Errors when opening an MSAccess table linked to Sharepoint打开链接到 Sharepoint 的 MSAccess 表时出错
【发布时间】:2018-03-23 21:26:25
【问题描述】:

我有一个 Microsoft Access 数据库,其中包含一个主动链接到 Sharepoint 中的列表的表。只要我在 Microsoft Access 中对表中的记录进行更改,更改就会出现在服务器上。

我有一些数据要添加到该表中。我想执行一些INSERTUPDATE SQL 查询来添加新数据,因为有很多行要添加。我要添加的数据在这个数据库的第二个表中,它没有链接到共享点列表。

问题是,第二次我的 SQL 查询甚至触及链接到 Sharepoint 的第一个表时,我收到以下错误:

System.Runtime.InteropServices.COMException: '找不到可安装的 ISAM。'

我已经尝试对Microsoft.Office.Interop.Access.DaoOleDb 执行此操作。他们都很好地连接到数据库,但每当我尝试触摸链接到 Sharepoint 的表时,都会失败并显示上述错误消息。他们可以编辑任何没有主动链接到 Sharepoint 的表格,没有任何问题。

我花了一段时间在谷歌上搜索我遇到的错误,并找到了各种不同的建议,但我所看到的所有建议都没有帮助我解决这个问题。我确定 Sharepoint 的链接会以某种方式导致此错误,但如果我删除该链接,我的数据将不会像我想要的那样上传到 Sharepoint。那么如何克服这个错误并查询链接表呢?

我尝试为这些运行的代码

Microsoft.Office.Interop.Access.Dao

    Dim dbEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
    Dim dbs As Microsoft.Office.Interop.Access.Dao.Database
    Dim rst As Microsoft.Office.Interop.Access.Dao.Recordset2


   dbs = dbEngine.OpenDatabase(FileName)
   rst = dbs.OpenRecordset("SELECT * FROM SharepointLinkedTable") '<-- Crashes here

OleDb

    Dim cnnOLEDB As New OleDbConnection
    Dim cmdOLEDB As New OleDbCommand

    Dim strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName
    cnnOLEDB.ConnectionString = strConnectionString
    cnnOLEDB.Open()
    cmdOLEDB.CommandText = "SELECT * FROM SharepointLinkedTable"
    cmdOLEDB.Connection = cnnOLEDB

    Dim rdrOLEDB As OleDbDataReader = cmdOLEDB.ExecuteReader '<-- Crashes here

【问题讨论】:

    标签: sql ms-access sharepoint dao


    【解决方案1】:

    当您将其定义为 Microsoft Access 数据库时,我假设您有一个标准 Access 文件作为前端,并且它链接到 SharePoint 列表作为后端。

    主题是是否可以对链接的 SharePoint 列表表运行“操作查询”(更新、追加、删除)。副手我不确定 - 所以先查一下,看看是否有明确的否定。否则我会删除指向 SharePoint 列表的链接并重新制作它。这只是基本的“当所有其他方法都失败时 - 重新启动......”

    为了帮助澄清错误原因:暂时将 SharePoint 列表复制到前端,使其成为本地表。请注意,您不能有 2 个同名的表,因此必须管理命名。

    然后设置您的更新/追加查询 - 并确保它们成功运行到本地表测试。将它们保存为标准查询,以便它们位于导航窗格中。我建议这样做,因为错误可能会产生误导,真正的原因是查询错误 - 而不是链接本身。

    然后将它们修改为链接表名,在SharePoint List表上运行看看。

    【讨论】:

      【解决方案2】:

      经过更多研究,包括遵循Cahaba Data 的一些建议后,我想出了一种方法来实现这一点。

      首先,虽然我找不到任何这样说的文档,但根据我的测试和研究,Sharepoint 2016 似乎不允许对主动链接到 sharepoint 的表运行任何类型的 SQL 查询。我在 Internet 上的其他地方发现了一些过去能够做到这一点的人的帖子,但他们都是几年前的,在早期版本的 Sharepoint 上。

      所以我从 Sharepoint 中取消了我的表的链接并运行了我的 SQL 查询以将数据移动到未链接的表中而没有问题。让我们将此表称为Table1

      随着我的数据现在移动到Table1,我尝试将访问和共享点之间的链接恢复到Table1,但在Sharepoint 中似乎没有执行此操作的选项。因此,我同步了要访问的 Sharepoint 表的第二个副本,称为 Table2

      我试图突出显示Table1 中的所有行并将数据手动复制并粘贴到Table2,但我收到了一些阻止我插入任何数据的新消息。错误很模糊,只是说无效数据。

      经过更多研究,我确定我的表格中的某些列是问题所在。我的 Sharepoint 表有一个 Person or Groups 列和一个 Choice 列。我试图添加到表中的数据包含这两种列类型不喜欢的值。我最终将这两列都转换为 Sharepoint 中的 Single line of text 字段,并在 Access 中重新创建 Table1Table2

      之后,我可以将Table1 中的数据复制并粘贴到Table2 中。复制和粘贴需要一些时间(由于我的记录中有大量附件),但它可以正常工作并将数据同步到 Sharepoint。

      所以底线是,通过一些变通方法,是的,您仍然可以将数据移动到主动链接到 Sharepoint 的访问表中,但它需要比过去更多的工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多