Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Laufzeit-Fehlermeldung: 3251

Begonnen von herb54, November 30, 2021, 08:43:59

⏪ vorheriges - nächstes ⏩

herb54

Hallo zusammen,
ich bekomme seit ich das Kennwort meines Programmes geändert habe eine Laufzeitfehler 3251:
Das aktuelle Recordset unterstütz keine Aktualisierung usw.
Das Programm lief vorher schon ca. 2 Jahre fehlerfrei. Nach dem Öffnen des Programmes kommt ein Eingabeformular bei dem ein Aufrufzähler beim Laden des Programmes die täglichen Aufrufe zählt. Dies müsste eigentlich die Fehlerursache sein - da nur hier ein Recordset vorkommt. Hier mall der Programmcode:

Private Sub Form_Load() ' Aufrufzähler aktualisieren
     ' CurrentDb.Execute "UPDATE tblFormAufrufe SET tblFormAufrufe.AufrufZähler = " _
                      & " Nz(DMax('Aufrufzähler','tblFormAufrufe'),0)+1", dbFailOnError
                      Dim Laufcount As Integer
                      Dim rst As New ADODB.Recordset
                      On Error GoTo Err_Handler
                     
                      rst.Open "tblAufrufe", ActiveConnection:=CurrentProject.Connection, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
                     
                     
                      If rst.BOF Then
                      With rst
                      .AddNew
                      .Fields("Aufrufzaehler").Value = 1
                      .Update
                      GoTo ersterDurchlauf
                      End With
                      End If
                     
                      With rst
                      .MoveLast
                      Laufcount = rst.Fields("Aufrufzaehler") + 1
                      .AddNew
                      .Fields("Aufrufzaehler").Value = Laufcount
                      .Update
                      End With
                     
ersterDurchlauf:
                rst.Close
                Set rst = Nothing
                                                                                             
  DoCmd.GoToRecord , , acLast
Exit Sub

Err_Handler:
MsgBox "Ein unerwarteter Fehler ist aufgetreten. Fehler: " & _
Err.Number & vbNewLine & Err.Description, vbCritical
                     
End Sub


Wie gesagt das Programm lief jetzt zwei Jahre ohne Fehler. Das Recordset wird mit adLockOptimistic geöffnet (dürfte eigentlich nichts passieren).
Der Fehler passiert nur mit MAC Rechnern! Mit Windowsrechner läuft das einwandfrei. Wenn der Fehler einmal aufgetaucht ist, erscheint er dann auch auf Windowsrechner beim Starten. Ich muss dann komprimieren und reparieren machen um ihn weg zu bekommen.
Wenn ich den Programmcode für den Aufrufzähler weglasse läuft es einwandfrei auf MAC. Irgendwie blicke ich da gerade nichts mehr!
Noch kurz zur Umgebung: Das Programm läuft auf einem Windows Server 2012 R2. Dort ist leider noch ein uraltes Access drauf (2003). Aber wie gesagt es lief bis jetzt einwandfrei!
Grüße
Herbert

herb54

Hallo,

ich habe jetzt den Programmcode für den Aufrufzähler auskommentiert. Beim Öffnen mit dem MAC erscheint jetzt die Meldung:
"Schreibgeschützt - die Datenbank wurde schreibgeschützt geöffnet...
Was jetzt noch merkwürdiger ist: Mit meinem alten MAC 2013 kann ich die Datei ohne Fehlermeldung öffnen.


PhilS

Zitat von: herb54 am November 30, 2021, 08:43:59Das Programm läuft auf einem Windows Server 2012 R2. Dort ist leider noch ein uraltes Access drauf (2003).
Wie ist das zu verstehen? Ist das ein Terminal Server auf den sich die Benutzer per RDP einwählen? Ist die Anwendung in Frontend/Backend aufgeteilt, oder öffnen alle dieselbe Datei?

Mein Bauchgefühl ist im Moment, dass die Ursache für dein Problem darin liegt, dass die Benutzer auf Dateisystem-Ebene keine ausreichenden Berechtigungen auf die Datei oder das Verzeichnis haben.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

herb54

Hallo Phil,
ja alle öffnen die gleiche Datei (Serverzugang RDP). Du könntest recht haben mit den Benutzerrechten. Da wurde etwas geändert - muss ich mal nachschauen. Erst mal vielen Dank!
Gruß
Herbert

herb54

Hallo Phil,
ja das war das Problem. Da wurde letzte Woche das Kennwort des Programmes geändert und gleichzeitig die Rechte der Benutzer des Ordners geändert in dem sich das Programm befindet. Da Vererbung automatisch aktiviert ist konnte das Programm den Recordset nicht durchführen da die Rechte des Ordners hier Anwendung finden und nicht die des Programmes. Bei dem Programm war zwar Vollzugriff eingestellt aber die Ordnerrechte haben dies unterbunden (ist schön zu sehen wenn man die Benutzerrechte überprüft: Da sind die übergeordneten Ordnerrechte ausgegraut und die Rechte im Programm nicht). Ich bin folgendermaßen vorgegangen: Ich habe Benutzer im Hauptordner entfernt und neu angelegt mit Vollzugriff. Im Programm habe ich die Vererbung deaktiviert und durch den Button "Alle Berechtigungseinträge für untergeordnete Objekte durch vererbbare Berechtigungseinträge von diesem Objekt ersetzen" wieder die Vererbung aktiviert. Dadurch hatte ich unter Sicherheit - Erweitert- Berechtigungen wieder die Berechtigungen vom Hauptordner übernommen und das Programm lief einwandfrei. Vielen Dank noch mal für deinen Tipp - ich wäre da nie draufgekommen!
Grüße
Herbert

herb54

Noch eine Ergänzung warum das Programm auf den Windowsrechnern lief: Hier benutzen fast alle MAC. Es gibt nur zwei Windowsrechner. Diese hatten im Hauptordner schon Vollzugriffsrechte - daher kam da der dort Fehler nie!