Fehler 3622 - Sie müssen die Option dbSeeChanges mit OpenRecordset verwenden, wenn Sie auf eine SQL Server-Tabelle mit einer IDENTITY-Spalte zugreifen
Ich verwende MS Access 2007 und verbinde mich mit einem MS SQL 2008 R2-Server. Ich habe ein Formular mit einem Mehrfachauswahlfeld, mit dem ich den Status für mehrere Felder für die ausgewählten Server aktualisiere. Zur Zeit verwende ich das Feld Servername im Mehrfachauswahlfeld. Das Problem ist, dass es mehrere Datensätze mit demselben Servernamen geben kann. Um dies zu umgehen, möchte ich es von ServerName in Datensatznummer (ID) ändern. Wenn ich dies tue, obwohl VB den Fehler "Fehler 3622 - Sie müssen die Option dbSeeChanges mit OpenRecordset verwenden, wenn Sie auf eine SQL Server-Tabelle mit einer IDENTITY-Spalte zugreifen". Ich habe mir viele verschiedene Posts auf verschiedenen Websites angesehen, kann aber nicht herausfinden, wie ich das in meinen Code implementieren kann. Das Skript funktioniert einwandfrei, wenn ich ServerName verwende. Es funktioniert auch einwandfrei, wenn ich zum SQL-Server gehe und das Feld in Identity = False ändere. Das Problem dabei ist, dass ich mit der automatischen Nummerierung keine neuen Datensätze erstellen kann. Es funktioniert auch perfekt, wenn ich die Zeilennummern in einer Update-Abfrage fest codiere. Das Problem dabei ist, dass ich die Zeilennummern nicht für alle Benutzer der Datenbank fest codieren kann. Das Problem scheint nur im Zusammenhang mit VB zu stehen. Unten ist was ich aktuell habe. Wie Sie sehen, habe ich versucht, die dbSeeChanges zur Execute-Zeile hinzuzufügen.
Private Sub btnRoarsStatus_Click()
Dim strSQL As String
Dim Criteria As String
Dim Itm As Variant
With Me.lstServerNames
If .ItemsSelected.Count > 0 Then
For Each Itm In .ItemsSelected
Criteria = Criteria & "," & .ItemData(Itm)
Next Itm
' remove leading comma
Criteria = Mid(Criteria, 2)
' execute the SQL statement
strSQL = "UPDATE buildsheet SET [Roars Status] = " & Chr(34) & _
Me.cboRoarsStatus & Chr(34) & " WHERE ID IN(" & Criteria & ")"
Debug.Print strSQL
CurrentDb().Execute strSQL, dbSeeChanges
Else
MsgBox "You must select one or more items in the list box!", _
vbExclamation, "No Selection Made"
Exit Sub
End If
End With
MsgBox "Completed", vbExclamation, "Completed"
End Sub