Autor |
Beitrag |
Metschu
      
Beiträge: 135
Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
|
Verfasst: Mo 13.09.10 20:18
Nabends!
Folgendes Problem:
Prog liegt auf dem Server, mehrere User greifen darauf zu.
Die Daten werden in einem TRecord File auch auf dem Server gespeichert.
Damit es keine Zugiffskonflikte auf die Daten gibt, prüfe ich mit der Funktion "isFileInUse" (aus dem Forum), ob die Datei geöffnet ist.
Die Software öffnet die Datei, schreibt daten und Schliesst sie gleich wieder.
Jetzt ist es schon mehrfach vorgekommen, das die Funktion meldet, das Datei geöffnet ist und verweigert das Speichern.
In der Software habe ich schon mehrfach nachgeschaut, die Datei wird nach dem öffnen immer geschlossen (zumindest laut Quelltext...)
Gibt es eine Möglichkeit rauszufinden, welcher User im Netzwerk diesen "Fehler" verusacht?
Oder kann ich die Datei auch von Extern "Zwangsschliessen", um wieder drauf zugreifen zu können?
Das soll keine Entgültige Lösung sein, nur hilft es auch bei der Fehlersuche, wenn ich den User Fragen kann, was er gemacht hat um das nachzuvollziehen.
Danke schonmal.
Gruß
Torsten
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 13.09.10 20:47
Ich würde eine zweite Datei beim Öffnen anlegen und beim Schließen wieder löschen. Und wenn das zweite Programm die Datei öffnen will, prüft es vorher, ob die Datei existiert.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mo 13.09.10 21:28
Und wenn das Programm zwischendurch verreckt, Stromverbindung gekappt wird o.Ä.? Dann hat man den Salat und die Datei ist in Dauernutzung. Man müsste quasi mit Sessions arbeiten.
LG
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 13.09.10 21:35
FinnO hat folgendes geschrieben : | Und wenn das Programm zwischendurch verreckt, Stromverbindung gekappt wird o.Ä.? Dann hat man den Salat und die Datei ist in Dauernutzung. Man müsste quasi mit Sessions arbeiten.
LG |
Ich würde in die 2te Datei einfach eine Zeitangabe schreiben, und das Nutzungsrecht für T+x Sekunden vergeben. Wenn ein Programm länger braucht, muss es die Time-stamp datei refreshen.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mo 13.09.10 21:37
TRecord File schreit sowieso nach Datenbank 
|
|
Metschu 
      
Beiträge: 135
Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
|
Verfasst: Mo 13.09.10 21:44
FinnO hat folgendes geschrieben : | TRecord File schreit sowieso nach Datenbank  |
... die man auf dem Server leider nicht installieren kann...
Oder gibts ne Variante, bei der man nichts installieren brauch?
Boldar hat folgendes geschrieben : | Ich würde in die 2te Datei einfach eine Zeitangabe schreiben, und das Nutzungsrecht für T+x Sekunden vergeben. Wenn ein Programm länger braucht, muss es die Time-stamp datei refreshen. |
Klingt Logisch und interessant. Wäre ein Work Arround.
Zusätzlich würde mich aber noch interessieren, wer die datei "offen" hält, um das Problem entgültig zu lösen.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mo 13.09.10 21:47
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 14.09.10 01:38
Man öffne beim Windows die Systemsteuerung, wähle Verwaltung, gehe dann auf Computer - Freigegebene Ordner - geöffnete Dateien ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Di 14.09.10 03:58
Manchmal geschieht das auch bei mir, dass in einem Programm solche Fehlermeldungen kommen. Oft ist der Datentransfer im Netz Schuld, der Server überlastet etc.
Es ist schon vorgekommen, dass man den Server neu starten musste, um eine solches hartnäckiges Problem zu lösen.
Für den Clientzugriff auf eine Datei empfehle ich ein Try .. finally .. end Konstrukt, dass selbst bei Programmfehlern immer der finally-Teil abgearbeitet wird.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| try try Dateizugriffsroutine(n) except Fehlermeldung end finally try Datei Schließ-Routine except Fehlermeldung end end |
Dann sollte eigentlich das Ganze funktionieren, wenn Windows nicht dazwischenfunkt (s.o.).
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 14.09.10 07:54
Schreib doch zusätzlich eine Datei mit dem Benutzer-Namen. Dann siehst du, wer der Übeltäter ist.
Vielleicht passt die Info ja auch noch in den TRecord.
|
|