🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

FileDateTime-Vergleich / Routine aus Handbuch für Datenbanksicherung, Fehlverhalten

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Aubergino
Beiträge: 26
Registriert: Di 6. Feb 2024, 20:12

FileDateTime-Vergleich / Routine aus Handbuch für Datenbanksicherung, Fehlverhalten

Beitrag von Aubergino » Di 18. Jun 2024, 21:15

Moin die Runde,
aus dem Handbuch von Robert verwende ich die Routine für die automatische Datenbanksicherung, bei jedem Programmstart. Das funktioniert auch prima - bis die inMax-Vorgabe (Maximale Anzahl der Sicherungen, bevor die älteste überschrieben wird) erreicht ist. Dann aber wurde zeitweilig nicht die älteste überschrieben, sondern immer gleiche, die mit der höchsten Nummer.

Als Ursache habe ich folgendes herausgefunden:
Das Alter der Versionen wird wie in der Handbuch-Routine wie folgt verglichen
(Achtung bei Copy und Paste: URL-Komposition bei mir etwas anders als im Handbuch):

Code: Alles auswählen

          If FileDateTime(LEFT(sUrl_Start,LEN(sUrl_Start) - 4,0) & "_" & k & ".odb") _
          <=FileDateTime(LEFT(sUrl_Start,LEN(sUrl_Start) - 4,0) & "_" & k+1 & ".odb") Then
[...]
FileDateTime liefert aber das Datum als String im Format "dd.mm.yyyy hh:mmss".
Daher werden die Daten als String verglichen.
- Das Ergebnis ist richtig, wenn z.B. "03.06.2024 17:45:49" mit "03.06.2024 17:46:21" verglichen wird: Das erste, ältere Datum wird als kleiner bewertet.
- Das Ergebnis wird aber falsch, wenn z.B. "20.5.2024 18:07:17" mit "03.06.2024 17:45:49" verglichen wird: Das erste Datum wird als größer bewertet, obwohl es das ältere ist.

Erst wenn man dafür sorgt, dass der Vergleich zwischen "Date"-Formaten vollzogen wird, klappt es wie gewünscht:

Code: Alles auswählen

          DIM Datetime_k0 AS DATE
          DIM Datetime_k1 AS DATE
[...]
          FOR k = inMax - 1 TO 1 STEP -1
          DateTime_k0=FileDateTime(LEFT(sUrl_Start,LEN(sUrl_Start) - 4,0) & "_" & k & ".odb")
          DateTime_k1=FileDateTime(LEFT(sUrl_Start,LEN(sUrl_Start) - 4,0) & "_" & k+1 & ".odb")
          IF Datetime_k0 <= Datetime_k1 THEN
[...]
Jetzt wird auch der zweite Datumsvergleich aus obigem Beispiel richtig.

Noch 'ne Kleinigkeit:
Außerdem habe ich in der Zeile, die beim ersten Durchlauf überprüft, ob es noch "freie Nummern" gibt:

Code: Alles auswählen

          IF NOT FileExists(LEFT(sUrl_Start,LEN(sUrl_Start) - 4,0) & "_" & i & ".odb")
noch ein

Code: Alles auswählen

          OR (i>inMax)
angefügt. Damit wird gesichert, dass auch dann nicht über den zugelassenen Nummernraum hinausgeschossen wird,
wenn es Dateiversionen mit inMax+1 (und weitere) als Nummer gibt, z.B. weil zuvor mal eine größere Zahl zugelassen war.

Tschüs,
Knut

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: FileDateTime-Vergleich / Routine aus Handbuch für Datenbanksicherung, Fehlverhalten

Beitrag von RobertG » Mi 19. Jun 2024, 07:59

Hallo Knut,

Du hast Recht. FileDateTime erzeugt erst einmal einen String. Mit einem CDate darum wird daraus eine Datumsvariable.
Werde ich so im Handbuch ändern:

Code: Alles auswählen

IF CDate(FileDateTime(oPath.Backup & "/" & k & "_" & stTitel)) <=  CDate(FileDateTime(oPath.Backup & "/" & k+1 & "_" & stTitel)) THEN
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten