运行时错误'3326'此Recordset不可更新

时间:2015-03-25 11:11:25

标签: vba ms-access access-vba ms-access-2007 dsn

我有一个使用Access 2007创建的应用程序,它与DSN完美配合,我更新应用程序以使用无DSN连接到SQL-Server,我没有更改应用程序中的任何代码,但是当我运行时应用程序我收到此错误

  

运行时错误'3326'此Recordset不可更新

Sub DnsLessLinkTable()

    Dim td As TableDef
    Dim stConnect As String
    Dim strTablesName(0 To 7) As String
    strTablesName(0) = "dbo_Directorate"
    strTablesName(1) = "dbo_Nationality"
    strTablesName(2) = "dbo_personal"
    strTablesName(3) = "dbo_Qualification"
    strTablesName(4) = "dbo_Qualimain"
    strTablesName(5) = "dbo_Qualisec"
    strTablesName(6) = "dbo_Section"
    strTablesName(7) = "dbo_Trips"

    For Each td In CurrentDb.TableDefs
       For Each TableName In strTablesName
           If td.Name = TableName Then
              CurrentDb.TableDefs.Delete TableName
           End If
       Next
   Next

   stConnect = "ODBC;Driver={SQL Server};Server=ServerNametest;Database=DBName;Uid=user;Pwd=password;"
   For Each TableName In strTablesName
       Dim splitTarget As Variant
       splitTarget = Split(TableName, "_")
       Set td = CurrentDb.CreateTableDef(TableName, dbAttachSavePWD, splitTarget(1), stConnect)
       CurrentDb.TableDefs.Append td
       AttachDSNLessTable = True
   Next
   Err.Description
End Sub

dosnt拥有主键的唯一表是SQL Server中的[Personal],我将其链接到[dbo_personal]

无DSN模块已成功运行并更新了所有链接表,我真的很挣这个应用程序, 请注意,在DSN-less连接之前,我在构建DSN时使用相同的连接字符串

任何有助于

的建议

1 个答案:

答案 0 :(得分:1)

当有主键时,Access可以更新链接表 当他们没有一个时,你就会得到"这个Recordset不可更新"错误。

如果基础SQL Server表具有主键,Access通常会检测它并在链表中使用它。

如果表在服务器上有主键,或者它是视图而不是表,则Access无法自行设置主键。

如果您按DSN手动链接视图,系统会弹出一个窗口,要求您选择Access应考虑作为主键的列:

select unique record identifier

当您将表格DSN-less(即每个代码)链接起来并且您没有指定主键时,Access将链接没有主键的表格。

所以我认为您正在谈论的表格是一个视图,或者它没有主键。
当它最初与DSN链接时,有人在上面显示的弹出窗口中选择了主键 当您将其与无DSN代码重新关联时,您可能没有设置主键,这就是您获取"此Recordset不可更新的原因&#34 ;现在错误。

解决方案:将表格与您的无DSN代码关联后,explicitly set the primary key via VBA code