Exclusiv abfragen
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 29. Mai 2008 20:46
- Hat sich bedankt: 1 Mal
Exclusiv abfragen
Hi,
gibt es eine Möglichkeit zu prüfen, ob man eine DBF exklusiv öffnen könnte (oder nur shared), ohne sie exklusiv zu öffnen?
Wenn ich sie kurz exklusiv öffne, dann blocke ich sie unnötig für andere, das soll ich vermeiden.
Vielen Dank
Stephan
gibt es eine Möglichkeit zu prüfen, ob man eine DBF exklusiv öffnen könnte (oder nur shared), ohne sie exklusiv zu öffnen?
Wenn ich sie kurz exklusiv öffne, dann blocke ich sie unnötig für andere, das soll ich vermeiden.
Vielen Dank
Stephan
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Exclusiv abfragen
Herbert,
damit ist ja leider nichts gewonnen. Ob ich jetzt versuche die dbf exklusiv zu offnen, oder ich sie shared öffne und dann ein Locking versuche - ich blockiere die dbf im Erfolgsfall erstmal. Was ja gerade vermieden werden soll.
Jan
damit ist ja leider nichts gewonnen. Ob ich jetzt versuche die dbf exklusiv zu offnen, oder ich sie shared öffne und dann ein Locking versuche - ich blockiere die dbf im Erfolgsfall erstmal. Was ja gerade vermieden werden soll.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Exclusiv abfragen
Ich denke, dass das Flock und ein im Erfolgsfall sofortiges wieder freigeben so schnell geht, dass das nicht stört.
Die Frage ist aber, was will ich mit der Erkenntnis, dass die Datenbank vor einer Zeit xx exclusiv zu öffnen ging, anfangen.
Kurze Zeit später kann das ja schon wieder anders sein ?
Die Frage ist aber, was will ich mit der Erkenntnis, dass die Datenbank vor einer Zeit xx exclusiv zu öffnen ging, anfangen.
Kurze Zeit später kann das ja schon wieder anders sein ?
Viele Grüße
Wolfgang
Wolfgang
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Exclusiv abfragen
Ich mache das so
Code: Alles auswählen
#Define CRLF Chr(13)+ Chr(10)
Function Netz_Use()
Local lJa:=.f.
PARAMETERS Datei, ex_use, cTitel, Info, Name
If Info="alias"
If ex_use && exclusive
Use &Datei New Exclusive Alias Name
EndIf
Else
If ex_use && exclusive
Use &Datei New Exclusive
EndIf
EndIf
If NetErr()
lJa:=.f.
Msgbox("Die Datenbank "+Datei+" ist in Benutzung"+CRLF+;
"Das Programm an allen Stationen beenden und erneut starten",cTitel)
Else
lJa:=.t.
EndIf
Return lJa
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Exclusiv abfragen
Es kann ja zwei "allgemeine" Gründe dafür geben, warum sich eine Tabelle nicht exklusiv öffnen ließe: a) sie ist bereits exklusiv in Benutzung und b) sie ist im "shared"-Modus geöffnet. Ergänzend gäbe es noch die Möglichkeiten, dass eine Tabelle überhaupt nicht vorhanden ist oder sie aufgrund der Rechtesituation im Netz nicht geöffnet werden kann. Ohne Risiko eines Laufzeitfehlers lässt sich all das m.E. nur so abfangen:
Auch hier hat man, obwohl die Operation nur Millisekunden beanspruchen dürfte, möglicherweise einen konkurrierenden Zugriff erzeugt, der anderswo problematisch werden könnte. Außerdem gäbe auch das nur einen Snapshot - schon Sekundenbruchteile später kann die Situation eine andere sein. Deshalb arbeitet man in solchen Fällen ja tatsächlich so:
Gegenfrage: Wozu brauchst Du das? Warum will man zu einem Zeitpunkt, an dem die Tabelle nicht geöffnet werden soll, prüfen, ob sie geöffnet werden könnte?
Code: Alles auswählen
#include 'fileio.ch'
FUNCTION CouldBeUsedExclusive(cDbfName)
LOCAL nHandle
IF !File(cDbfName) // nicht vorhanden
RETURN .F.
ENDIF
nHandle := FOpen(cDbfName,FO_EXCLUSIVE)
IF nHandle > 0 // es gibt ein Handle
FClose(nHandle)
RETURN .T.
ENDIF
RETURN .F.
Code: Alles auswählen
USE (cDbfName) EXCLUSIVE NEW
IF NetErr()
* ging nicht
Zuletzt geändert von Tom am Mo, 02. Nov 2015 16:54, insgesamt 1-mal geändert.
Herzlich,
Tom
Tom
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2517
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Exclusiv abfragen
Hi
ja es gibt eine einfache Möglichkeit abzufragen welche DBF bereits auf anderen PC's geöffnet sind.
Verwende den Advantage Database Server und die ADSDBE
mit der Funktion AdsMgGetOpenTables() lassen sich die zur Zeit offenen/verwendeten DBF's abfragen.
Cu Carlo
ja es gibt eine einfache Möglichkeit abzufragen welche DBF bereits auf anderen PC's geöffnet sind.
Verwende den Advantage Database Server und die ADSDBE
mit der Funktion AdsMgGetOpenTables() lassen sich die zur Zeit offenen/verwendeten DBF's abfragen.
Cu Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Exclusiv abfragen
Wenn ich wissen will, ob eine Tabelle geblockt werden kann, gibt's keine andere Lösung. Und die Bemerkung von Wolfgang passt. Dazu kommt, dass so ein Test ja nicht aus Vergnügen erfolgt, sondern an passender Stelle. Es gibt schliesslich Momente, wo Andere nicht in einer Tabelle hineinfummeln dürfen.Jan hat geschrieben:damit ist ja leider nichts gewonnen. Ob ich jetzt versuche die dbf exklusiv zu offnen, oder ich sie shared öffne und dann ein Locking versuche - ich blockiere die dbf im Erfolgsfall erstmal. Was ja gerade vermieden werden soll.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Exclusiv abfragen
Herbert,
leider ist mit Wolfgangs Idee nichts gewonnen. Denn wenn ich ein FLock() machen möchte, muß ich die dbf ersteinmal geöfnet haben. Damit ist die dann für das exklusive Öffnen in dem anderen Modul wiederum gesperrt.
Ich denke das Stephan gerne den Modus auslesen würde, ohne irgend ein Use auf die dbf machen zu müssen. Aber solange er nichts mehr dazu sagt ist das alles vage Vermutung.
Jan
leider ist mit Wolfgangs Idee nichts gewonnen. Denn wenn ich ein FLock() machen möchte, muß ich die dbf ersteinmal geöfnet haben. Damit ist die dann für das exklusive Öffnen in dem anderen Modul wiederum gesperrt.
Ich denke das Stephan gerne den Modus auslesen würde, ohne irgend ein Use auf die dbf machen zu müssen. Aber solange er nichts mehr dazu sagt ist das alles vage Vermutung.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Exclusiv abfragen
Hast schon recht, Jan. Nur wie auch Tom bemerkt, was nützt eine Abfrage, wenn Millisekunden später ein anderer Zustand sein kann?
Also muss ich blockieren und sofort entscheiden, was weiter gehen soll. Die anderen User, welche zugreifen wollen, müssen entsprechende Meldungen erhalten, ist auch klar, da ja ein Grund des Exklusivzugriffs bestehen muss.
Also muss ich blockieren und sofort entscheiden, was weiter gehen soll. Die anderen User, welche zugreifen wollen, müssen entsprechende Meldungen erhalten, ist auch klar, da ja ein Grund des Exklusivzugriffs bestehen muss.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Exclusiv abfragen
Theoretisch müsste es die Möglichkeit geben, auf Betriebssystemebene zu prüfen, ob eine Datei shared/exclusive geöffnet ist, allerdings bestenfalls lokal.
Auch das wäre aber nur ein Snapshot. Genau wie " AdsMgGetOpenTables()", lieber Carlo.
Auch das wäre aber nur ein Snapshot. Genau wie " AdsMgGetOpenTables()", lieber Carlo.
Herzlich,
Tom
Tom