Keine update-Tabelle über CurrentDb.Ausführen

Ok, bevor jemand sagt mir, dass es ein Duplikat von eine andere Frage, ich glaube nicht, dass es die gleiche Sache. Ich bin mit einem CurrentDb.Execute in VBA in MS Access 2007 und es ist, nachdem ich die option dbFailOnError , erhielt ich diese Fehlermeldung:

Fehler 3218 Konnte nicht aktualisieren; momentane Sperrung

Vorher nichts unternommen wurde, auf den Tisch, ich bin versucht, zu aktualisieren. Hier der aktuelle code im Modul Formulars:

Option Compare Database

Private Sub cmdvalidate_Click()
    Dim user As String
    Dim rs As Recordset
    Dim strsql As String
    Dim pass As String
    Dim f1 As Form_frmMenu

    strsql = "SELECT * FROM account WHERE username = '" & Me.txtusername & "'"

    'Execute SQL and store in recordset (cannot be stored in a string or integer)
    Set rs = CurrentDb.OpenRecordset(strsql)

    'Go through recordset and extract first value
    If rs.RecordCount > 0 Then

        rs.MoveFirst
        rs.Edit
        pass = rs!Password

        ' I know it's not the best way to validate password here (since it is
        ' case insensitive, but it's only for internal use with 3 people in
        ' the same department. This will considered if there are more people
        ' who get involved, but for the time being, this is not important.
        If pass = Me.txtpassword Then
            user = rs!UserName

' MS Access debugger says the error is here
CurrentDb.Execute "UPDATE [Account] SET [Account].[Active] = 'Y' WHERE [Account].[Username] = '" & user & "'", dbFailOnError

            MsgBox "Login Successful!"
            'DoCmd.OpenForm "frmMenu", , , , , acDialog
        Else
            MsgBox "Incorrect Username Or Password. Please try again."
        End If
    Else
        MsgBox "Something has gone wrong. Please contact your administrator."
    End If       
End Sub

Mein Ziel am Ende des Tages ist es, in der Lage sein, den Benutzernamen, wer sich angemeldet hat. Zuerst habe ich versucht eine Globale variable verwenden, aber es scheint, dass dies nicht möglich ist mit verschiedenen form-Module. Anstatt also, ich habe die Active Feld, so dass ich konnte den Benutzernamen in einer anderen form-Module über eine SELECT - Anweisung.

Einige Prüfungen, die ich gemacht habe:

  • Die Datei wird nicht geöffnet von niemandem außer mir, ich bin mir 100% sicher.
  • Die Abfrage war zunächst etwas unter, aber ich habe den eckigen Klammern nur für den Fall gab es reservierte Wörter:
"UPDATE Konto SET Active = 'Y' WHERE Benutzername = '" & user & "'"
  • Anderen form-Module in der gleichen Datei nicht über dieses UPDATE-Problem und es gibt keine anderen Optionen außer Option Compare Database (die anderen Sachen sind Private Subs).
  • Ich entdeckt, dass ich verwenden könnte Environ("Username") zu Holen Sie sich die Windows-Anmelde-Benutzernamen in den anderen Modulen statt. Dies wird das problem lösen, aber ich bin immer noch Fragen, warum diese Abfrage kann nicht ausgeführt das update.

Fragen:

  1. Wenn die Tabelle gesperrt ist, gibt es eine Möglichkeit, kann ich es entsperren?
  2. Warum ist diese Abfrage immer einen Fehler in den ersten Platz? Was gesperrt hat?

Weiß ich nicht viel, wenn überhaupt über vb und ich bin mir auch nicht sicher, wie ich auf dieses Projekt...

InformationsquelleAutor Jerry | 2013-08-20

Schreibe einen Kommentar