我有一个使用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时使用相同的连接字符串
任何有助于
的建议答案 0 :(得分:1)
当有主键时,Access可以更新链接表 当他们没有一个时,你就会得到"这个Recordset不可更新"错误。
如果基础SQL Server表具有主键,Access通常会检测它并在链表中使用它。
如果表不在服务器上有主键,或者它是视图而不是表,则Access无法自行设置主键。
如果您按DSN手动链接视图,系统会弹出一个窗口,要求您选择Access应考虑作为主键的列:
当您将表格DSN-less(即每个代码)链接起来并且您没有指定主键时,Access将链接没有主键的表格。
所以我认为您正在谈论的表格是一个视图,或者它没有主键。
当它最初与DSN链接时,有人在上面显示的弹出窗口中选择了主键
当您将其与无DSN代码重新关联时,您可能没有设置主键,这就是您获取"此Recordset不可更新的原因&#34 ;现在错误。
解决方案:将表格与您的无DSN代码关联后,explicitly set the primary key via VBA code。