Seite 1 von 1

Datei-Erstellungsdatum ermitteln - nicht letzte Modifikation - für Zugriffssperre über lck-Datei

Verfasst: Mo 4. Mär 2024, 12:40
von Aubergino
Guten Tag,
durch Abfrage, ob eine .lck-Datei vorhanden ist und älter als 15sek, wollte ich feststellen, ob schon ein anderer User in der auf einem NAS gespeicherten (eingebetteten) Datenbank arbeitet. Dafür frage ich die FileDateTime der .lck-Datei ab.
Das scheitert aber daran, dass ein zweiter User der durch den ersten User erzeugten .lck-Datei eine Modifikation verpasst UND die Funktion FileDateTime nicht das Erstellungsdatum, sondern das der letzten Modifikation abfragt - daher sieht es dann beim Zeitvergleich mit now - 15 sec. so aus, als sei die Datei ganz neu und also erst vom zweiten User selbst erzeugt worden.
Gibt es denn eine Möglichkeit, tatsächlich das Erzeugungsdatum statt des letzten Modifikationsdatums einer Datei abzufragen?
Danke für einen heißen Tipp!

Re: Datei-Erstellungsdatum ermitteln - nicht letzte Modifikation - für Zugriffssperre über lck-Datei

Verfasst: Mo 4. Mär 2024, 16:05
von RobertG
Du wirst das Erstellungsdatum einer *.lck-Datei nicht heraus bekommen, wenn es modifiziert wurde. So etwas wird nicht zusammen mit der *.lck-Datei gespeichert.

Du modifizierst diese Datei ja vermutlich, weil Du erneut die *.odb-Datei starten lässt, oder? Ich würde da so vorgehen, dass ich vor dem Start der *.odb-Datei nachschaue, ob die .lck-Datei existiert.

Re: Datei-Erstellungsdatum ermitteln - nicht letzte Modifikation - für Zugriffssperre über lck-Datei

Verfasst: Mo 4. Mär 2024, 18:36
von Aubergino
Hallo Robert, danke für die schnelle Antwort.
Ich hätte gedacht, dass das Erstellungsdatum erhalten bleibt, weil ich es ja z.B. im Windows-Explorer in den Datei-Eigenschaften noch angezeigt bekomme. Aber das nützt mir ja nichts, wenn es keine Funktion gibt, die das abfragt, also mache ich es natürlich besser so, wie Du es vorschlägst.
Das hatte ich eigentlich auch vorgehabt, aber wohl noch nicht die richtige Stelle gefunden für den Aufruf.

Der ist als Aktion zugewiesen unter :"Extras" - "Anpassen" - "Ereignisse" - "Dokument öffnen".
Wo müsste er denn zugewiesen werden, damit er noch vor der .lck-Erzeugung abläuft?

So sieht er aus:
---------------------------------
Sub OnOpenDocument()
Dim oController AS OBJECT
Dim oDoc AS OBJECT
Dim sUrl_Start AS STRING
oController = ThisDatabaseDocument.CurrentController
If not (oController.isConnected()) Then oController.connect() ' Connect to the database, if necessary
oDoc = ThisComponent
sUrl_Start = oDoc.URL
if FileDateTime(sUrl_Start & ".lck")<dateadd("s",-15,now()) Then
Msgbox("Datei bereits an anderem Arbeitplatz geöffnet")
Exit Sub
End if
Datenbankbackup(6)
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.FORM, "frmObjekte", FALSE) ' Parameters: ObjectType, Parameter ObjectName, ForEditing
End Sub
---------------------------------

Re: Datei-Erstellungsdatum ermitteln - nicht letzte Modifikation - für Zugriffssperre über lck-Datei

Verfasst: Mo 4. Mär 2024, 19:20
von RobertG
Der Haken liegt bei Dir in dem Makro selbst. Die Lockdatei wird ohne Makros erst erzeugt, wenn auf die Tabellen zugegriffen wird, weil erst dann eine Verbindung benötigt wird.

Du erzeugst erst eine Verbindung und fragst dann nach der Lock-Datei

Code: Alles auswählen

Sub OnOpenDocument()
Dim oController AS OBJECT
Dim oDoc AS OBJECT
Dim sUrl_Start AS STRING
oDoc = ThisComponent
sUrl_Start = oDoc.URL
if FileExits(sUrl_Start & ".lck") Then
Msgbox("Datei bereits an anderem Arbeitplatz geöffnet")
Exit Sub
End if
oController = ThisDatabaseDocument.CurrentController
If not (oController.isConnected()) Then oController.connect() ' Connect to the database, if necessary
Datenbankbackup(6)
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.FORM, "frmObjekte", FALSE) ' Parameters: ObjectType, Parameter ObjectName, ForEditing
End Sub
So dürfte das eher passen.

Re: Datei-Erstellungsdatum ermitteln - nicht letzte Modifikation - für Zugriffssperre über lck-Datei

Verfasst: Mo 4. Mär 2024, 19:49
von Aubergino
Nicht mal eine Stunde ist vergangen, und schon kommt Antwort mit der richtigen Lösung. Toll! Danke dafür.