zwangsweise Indexerstellung

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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

Beitrag von Koverhage »

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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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.
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!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Warum nicht einfach an jedem geraden oder ungeraden Tag den Index neu erstellen?

Jan
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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:

Beitrag von Koverhage »

Manfred,

hier soll es ja alle 2 Tage passieren, ergo hätte ich mit dem datum das gleiche Problem.
Es sieht so aus als wenn ich (wie Hubert sagt) ein neues Datumsfeld in einer Tabelle schaffen müßte, hat aber den Nachteil, ich muß erst die Tabelle öffnen, etc.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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:

Beitrag von Koverhage »

Jan,

nett gedacht, bloß ist das Datum ja bei allen Anwendern (hier 8) gleich. D.h. sobald sich ein User anmeldet werden immer die Dateien neu erstellt. bzw. gibt Fehlermeldungen da sich ja andere im Programm befinden.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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. 8)
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!!
Krause
UDF-Programmierer
UDF-Programmierer
Beiträge: 52
Registriert: Mo, 08. Jan 2007 8:55
Wohnort: In Thüringen

Beitrag von Krause »

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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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.
unter NTFS gibt es 3 verschiedene Datumsangaben, die einer Datei zugeordnet sind:

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 :shock:
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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.
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!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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 8)
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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Hubert,

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!!
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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:

Beitrag von Koverhage »

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.
Krause
UDF-Programmierer
UDF-Programmierer
Beiträge: 52
Registriert: Mo, 08. Jan 2007 8:55
Wohnort: In Thüringen

Beitrag von Krause »

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Koverhage hat geschrieben:Hallo,
Alle zwei Tage sollen die Index-Dateien erneuert werden.
Hierzu wird das Erstellungsdatum der Datei abgefragt.
hm ... M$ Windows "Taskplaner" ?

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
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
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

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.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Antworten