zwangsweise Indexerstellung
Moderator: Moderatoren
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2470
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
zwangsweise Indexerstellung
Hallo,
habe folgendes Problem. Alle zwei Tage sollen die Index-Dateien erneuert werden.
Hierzu wird das Erstellungsdatum der Datei abgefragt.
Leider klappt das nicht so, da Windows vermutlich das Erstellungsdatum nicht immer ändert, ich vermute mal es liegt am Cache.
Kann mir hier jemand einen Tip geben?
Hier die Programmierung
aNtxDate := directory("usersys.ntx")
if len(aNtxDate) > 0
if aNtxDate[1,7] <= date()-2
nDatHandle := FCREATE("index.log")
FWRITE(nDatHandle,curdir())
FCLOSE(nDatHandle)
aNtxFiles := Directory("*.NTX")
nCount := Len( aNtxFiles )
If nCount > 0
FOR i:=1 TO nCount
FERASE( aNtxFiles[i, F_NAME] )
NEXT
Endif
if FExists("usersys.ntx")
msgbox("Index-Dateien können nicht erstellt werden, da durch anderen Benutzer gesperrt!!!")
FERASE("index.log")
endif
endif
endif
Klaus
habe folgendes Problem. Alle zwei Tage sollen die Index-Dateien erneuert werden.
Hierzu wird das Erstellungsdatum der Datei abgefragt.
Leider klappt das nicht so, da Windows vermutlich das Erstellungsdatum nicht immer ändert, ich vermute mal es liegt am Cache.
Kann mir hier jemand einen Tip geben?
Hier die Programmierung
aNtxDate := directory("usersys.ntx")
if len(aNtxDate) > 0
if aNtxDate[1,7] <= date()-2
nDatHandle := FCREATE("index.log")
FWRITE(nDatHandle,curdir())
FCLOSE(nDatHandle)
aNtxFiles := Directory("*.NTX")
nCount := Len( aNtxFiles )
If nCount > 0
FOR i:=1 TO nCount
FERASE( aNtxFiles[i, F_NAME] )
NEXT
Endif
if FExists("usersys.ntx")
msgbox("Index-Dateien können nicht erstellt werden, da durch anderen Benutzer gesperrt!!!")
FERASE("index.log")
endif
endif
endif
Klaus
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Klaus,
warum legst Du keinen Dummy an und prüfst den? Sollte er nicht vorhanden sein, dann wird auf jeden Fall neu aufgebaut.
Nach einem Neuaufbau, wird der Dummy gelöscht und neu erstellt.
warum legst Du keinen Dummy an und prüfst den? Sollte er nicht vorhanden sein, dann wird auf jeden Fall neu aufgebaut.
Nach einem Neuaufbau, wird der Dummy gelöscht und neu erstellt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
ich kann deine Beobachtungen hier am Rechner nachvollziehen,
auch wenn ich es nicht glauben wollte.
Nun fällt mir aber wieder ein, warum ich in einem meiner Programme
mit ähnlichem Problem ein Feld hatte: LastIndCre D 8 0
Du könntest natürlich auch die Registry, eine INI Datei oder einfach so memowrit() / memoread() und einen schlichte Textdatei verwenden.
ich kann deine Beobachtungen hier am Rechner nachvollziehen,
auch wenn ich es nicht glauben wollte.
Nun fällt mir aber wieder ein, warum ich in einem meiner Programme
mit ähnlichem Problem ein Feld hatte: LastIndCre D 8 0
Du könntest natürlich auch die Registry, eine INI Datei oder einfach so memowrit() / memoread() und einen schlichte Textdatei verwenden.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Klaus,
ist es ein Problem das Datum in die Dummy Datei zu schreiben und dann vorher immer kurz zu öffnen und nachzulesen? Ich meine hier jetzt eine einfache .txt Datei, in der am Anfang z.B. 20070219 stehen würde. Das sollte doch zumindest vom DAtum her einwandfrei klappen. Allerdings weiß ich jetzt nicht, ob Du Lust hast sie jedesmal vorher zu öffnen.
ist es ein Problem das Datum in die Dummy Datei zu schreiben und dann vorher immer kurz zu öffnen und nachzulesen? Ich meine hier jetzt eine einfache .txt Datei, in der am Anfang z.B. 20070219 stehen würde. Das sollte doch zumindest vom DAtum her einwandfrei klappen. Allerdings weiß ich jetzt nicht, ob Du Lust hast sie jedesmal vorher zu öffnen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Hi,
kann es sein, dass du eine Anwendung laufen hast, die permanent die DBF- bzw. indirekt auch die Indexdateien geöffnet hat? Das Datum wird meiner Meinung nach durch das OS nur beim „letzten“ schließen der Datei (und nach einem Schreibzugriff) geändert. In dem Fall würde Dir auch eine separate Datei nicht viel nützen, die Datei ist ja dann noch für den dann notwendigen „Exclusive Zugriff“ gesperrt …
Mit freundlichen Grüßen
Joachim Krause
kann es sein, dass du eine Anwendung laufen hast, die permanent die DBF- bzw. indirekt auch die Indexdateien geöffnet hat? Das Datum wird meiner Meinung nach durch das OS nur beim „letzten“ schließen der Datei (und nach einem Schreibzugriff) geändert. In dem Fall würde Dir auch eine separate Datei nicht viel nützen, die Datei ist ja dann noch für den dann notwendigen „Exclusive Zugriff“ gesperrt …
Mit freundlichen Grüßen
Joachim Krause
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
am besten man erstellt dafür ein extra DBF,
diese öffnet man shared,
ist das Datum ok ?
- ja, dann alles zu und normal weiter,
- nein, dann mit FLOCK() auf diese Datei prüfen ob gerade ein anderer aktiv ist.
-- geht flock(), dann alle indexe löschen und neu aufbauen, Datum neu setzen, DBF schließen
-- geht flock() nicht, dann indizier gerade ein anderer, Fehlermeldun ausgeben und Quit ...
so mache ich es bei einem Programm schon viele Jahre.
am besten man erstellt dafür ein extra DBF,
diese öffnet man shared,
ist das Datum ok ?
- ja, dann alles zu und normal weiter,
- nein, dann mit FLOCK() auf diese Datei prüfen ob gerade ein anderer aktiv ist.
-- geht flock(), dann alle indexe löschen und neu aufbauen, Datum neu setzen, DBF schließen
-- geht flock() nicht, dann indizier gerade ein anderer, Fehlermeldun ausgeben und Quit ...
so mache ich es bei einem Programm schon viele Jahre.
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
unter NTFS gibt es 3 verschiedene Datumsangaben, die einer Datei zugeordnet sind:Krause hat geschrieben:Das Datum wird meiner Meinung nach durch das OS nur beim „letzten“ schließen der Datei (und nach einem Schreibzugriff) geändert.
Datum der Erstellung,
Datum letzte Änderung (entspricht früherem DOS bzw. FAT System),
Datum letzter Zugriff (ich meine nur lesend ? )
Eigentlich müsste also ein
delete file xyz.ntx
index on ... to xyz.ntx
das Erstellendatum zurücksetzen, das funktioniert aber nicht immer
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
ich glaube, dass wir uns hier alle verrennen.
Es sollte vielleicht zu Anfang erst einmal geklärt werden, ob (wie schon oben gefragt) die DBF nebst Index IMMER geöffnet ist, oder ob es auch sein kann, dass sie nicht geöffnet ist.
Dann wäre vielleicht interessant, warum ein Index erneuert werden MUSS. Vielleicht gibt es zu diesem Problem ja schon eine andere Lösung?
Es ist doch ein riesen Unterschied, ob Dauerbetrieb, oder nur zeitweise Benutzung der DBF. Finde ich jedenfalls.
ich glaube, dass wir uns hier alle verrennen.
Es sollte vielleicht zu Anfang erst einmal geklärt werden, ob (wie schon oben gefragt) die DBF nebst Index IMMER geöffnet ist, oder ob es auch sein kann, dass sie nicht geöffnet ist.
Dann wäre vielleicht interessant, warum ein Index erneuert werden MUSS. Vielleicht gibt es zu diesem Problem ja schon eine andere Lösung?
Es ist doch ein riesen Unterschied, ob Dauerbetrieb, oder nur zeitweise Benutzung der DBF. Finde ich jedenfalls.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi Manfred,
ob ein Index gelöscht werden muss, darüber will ich nicht streiten
Ich lösche meine normalerweise einmal pro Monat.
Jeden 2. Tag ist schon recht aufwändig, aber ob nötig oder nicht - keine Ahnung
Tatsache ist, dass ein Index bei geschlossener Datei, der gelöscht und danach neu aufgebaut wird das Erstellungsdatum dieses Neuaufbaus haben müsste. Das ist aber nicht sicher, wie wir oben herausgefunden haben.
ob ein Index gelöscht werden muss, darüber will ich nicht streiten
Ich lösche meine normalerweise einmal pro Monat.
Jeden 2. Tag ist schon recht aufwändig, aber ob nötig oder nicht - keine Ahnung
Tatsache ist, dass ein Index bei geschlossener Datei, der gelöscht und danach neu aufgebaut wird das Erstellungsdatum dieses Neuaufbaus haben müsste. Das ist aber nicht sicher, wie wir oben herausgefunden haben.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
das es mit dem Datum nicht stimmt, ist doch schon geklärt worden. Die Frage war doch nach einer anderen Idee.
das es mit dem Datum nicht stimmt, ist doch schon geklärt worden. Die Frage war doch nach einer anderen Idee.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2470
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Manfred und alle anderen,
ja die DBF (52), DBT(21) und NTX (127) Dateien werden beim Starten der Anwendung geöffnet und bleiben auch offen.
Mann kann sich über den 2-Tages Turnus streiten, es ist aber aufwendiger,
8 Leute im laufenden Betrieb aus der Anwendung zu kicken, weil irgendein Index nicht mehr in Ordnung ist.
Tasache ist, das dies öfters mal passiert, leider habe ich noch nicht rausgefunden an was das liegt.
ja die DBF (52), DBT(21) und NTX (127) Dateien werden beim Starten der Anwendung geöffnet und bleiben auch offen.
Mann kann sich über den 2-Tages Turnus streiten, es ist aber aufwendiger,
8 Leute im laufenden Betrieb aus der Anwendung zu kicken, weil irgendein Index nicht mehr in Ordnung ist.
Tasache ist, das dies öfters mal passiert, leider habe ich noch nicht rausgefunden an was das liegt.
Hi,
wir haben dieses Problem derart gelöst, dass wir prinzipiell die Datenbanken geschlossen halten und nur bei Bedarf diese dann öffnen. Zugegeben, es bedarf schon eine ganze Menge an Programmieraufwand eine derartige Lösung zu schaffen, aber auf dieser Art und Weise können bei uns im lokalen Netzwerk ca. 130 Arbeitsstationen in ein und dem selben Datenbestand ohne Terminal-Server arbeiten. Im SHARED-Modus war da schon mit mehr als 8 Arbeitsstationen, damals noch unter OS/2 Warp, nichts mehr sicher zu realisieren. Dementsprechend öffnen wir die Datenbanken für Lesezugriffe „Readonly-Shared“ und für Schreibzugriffe „Exclusive“. Defekte Indexdateien lassen sich dann problemlos neu generieren.
Mit freundlichen Grüßen
Joachim Krause
wir haben dieses Problem derart gelöst, dass wir prinzipiell die Datenbanken geschlossen halten und nur bei Bedarf diese dann öffnen. Zugegeben, es bedarf schon eine ganze Menge an Programmieraufwand eine derartige Lösung zu schaffen, aber auf dieser Art und Weise können bei uns im lokalen Netzwerk ca. 130 Arbeitsstationen in ein und dem selben Datenbestand ohne Terminal-Server arbeiten. Im SHARED-Modus war da schon mit mehr als 8 Arbeitsstationen, damals noch unter OS/2 Warp, nichts mehr sicher zu realisieren. Dementsprechend öffnen wir die Datenbanken für Lesezugriffe „Readonly-Shared“ und für Schreibzugriffe „Exclusive“. Defekte Indexdateien lassen sich dann problemlos neu generieren.
Mit freundlichen Grüßen
Joachim Krause
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
wichtig it eigendlich nur das man die *.DBF exclusiv öffnen kann,
deshalb gibt es bei meinen Applicationen immer
damit "schmeisse" ich erstmal alle User "raus". Um 00:01 starte ich
nun per M$ Windows "Taskplaner" mein *.BAT was mir das Backup
brennt. Danach werden dann die Index neu aufgebaut.
gruss by OHR
Jimmy
hm ... M$ Windows "Taskplaner" ?Koverhage hat geschrieben:Hallo,
Alle zwei Tage sollen die Index-Dateien erneuert werden.
Hierzu wird das Erstellungsdatum der Datei abgefragt.
wichtig it eigendlich nur das man die *.DBF exclusiv öffnen kann,
deshalb gibt es bei meinen Applicationen immer
Code: Alles auswählen
IF Seconds() > 86400-80 // 23:59
USERPROT("Auto-LogOff 23:59")
QUIT
ENDIF
nun per M$ Windows "Taskplaner" mein *.BAT was mir das Backup
brennt. Danach werden dann die Index neu aufgebaut.
gruss by OHR
Jimmy
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hi Klaus
warum schreibst du das erstellungsdatum der Indexdatei nicht in eine txt-Datei. Wenn du den Index neu erstellen willst, fragst du den eintrag ab.
und wenn dieser dann 2-tage her ist erstellst du diesen neu.
Anmerkung_: Wird das Programm welches den Index erstellen soll, täglich manuell gestartet ? Wäre aber mit sicherheit sinnvoll, dies über den Taskplaner automatisiert zu starten.
warum schreibst du das erstellungsdatum der Indexdatei nicht in eine txt-Datei. Wenn du den Index neu erstellen willst, fragst du den eintrag ab.
und wenn dieser dann 2-tage her ist erstellst du diesen neu.
Anmerkung_: Wird das Programm welches den Index erstellen soll, täglich manuell gestartet ? Wäre aber mit sicherheit sinnvoll, dies über den Taskplaner automatisiert zu starten.