Autor Beitrag
Metschu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mo 13.09.10 21:35 
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 13.09.10 21:37 
TRecord File schreit sowieso nach Datenbank ;)
Metschu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
BeitragVerfasst: Mo 13.09.10 21:44 
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
TRecord File schreit sowieso nach Datenbank ;)

... die man auf dem Server leider nicht installieren kann... :bawling:

Oder gibts ne Variante, bei der man nichts installieren brauch?

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 13.09.10 21:47 
jo. Firebird Embedded
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
// Kein funktionierender Code, nur Codestruktur
try
  try
    Dateizugriffsroutine(n)
  except
    Fehlermeldung // vielleicht mit Schreiboperationen in eine lokale oder Userabhängige Fehlerdatei, um das zu dokumentieren)
  end
finally 
  try
    Datei Schließ-Routine
  except
    Fehlermeldung // vielleicht mit Schreiboperationen in eine lokale oder Userabhängige Fehlerdatei, um das zu dokumentieren)
  end
end


Dann sollte eigentlich das Ganze funktionieren, wenn Windows nicht dazwischenfunkt (s.o.).
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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.