Info über Datenbankverbindung

10/02/2008 - 11:35 von Matthias Suck | Report spam
Hallo NG,

ist es möglich festzustellen wieviel User die Datenbank zur Zeit geöffnet
haben?

Ich habe schon in der Hilfe gesucht und auch im Internet aber keine
brauchbare Lösung gefunden.
Es muss doch möglich sein das ich feststellen kann wie of die DBC geöffnet
ist.

Vielen Dank
MFG
Matthias Suck
 

Lesen sie die antworten

#1 Jürgen Wondzinski
10/02/2008 - 12:49 | Warnen spam
Hallo Matthias,

Es muss doch möglich sein das ich feststellen kann wie of die DBC
geöffnet ist <<





Wieso _MUSS_ das möglich sein? Vielleicht erzàhlst du mal, wozu du diese
Funktion brauchst.

Rein technisch kann ein Client (also deine Applikation) nicht wissen (und
damit auch nicht abfragen), wer noch alles dieselbe Datei/Datenbank/Tabelle
offen hat. Fàllt quasi unter den "Datenschutz" ;)

Der Einzige, der dies sagen kann, ist der Server, denn der weiss wieviele
Connections, FileHandles und User gerade angemeldet sind. D.h. Du kannst,
wenn du Adminrechte hast, diese entsprechende Info vom Server abfragen.
Dummerweise laufen aber Applikationen normalerweise nicht mit Admin-Rechten.


Wenn dir vorschwebt, ne Art User-Lizensierung zu implementieren, musst du
entweder nen Serverdienst zur Verfügungs tellen, der dir die
Abfrageergebnisse an den Client übermittelt, oder ein eigenes Schema
implementieren. Ein übliches Verfahren dazu ist die Verwendung von sog.
Semaphoren oder Record-Locks auf einer Hilfstabelle:

Im simpelsten Falle geht sowas:
CREATE \\Server\Usertracking (Id C(20), Login T)
FOR i = 1 TO nAnzahlLizenzen
Append blank
ENDFOR

Und spàter dann in der App:

USE \\server\UserTracking shared
IF RECCOUNT() > nAnzahlLizenzen
? "Da hat wer rumgehackt"
QUIT
ENDIF

SCAN
lSuccess = RLOCK()
IF lSuccess
REPL id WITH cUsername, Login WITH DateTime()
EXIT
ENDIF
ENDSCAN

IF NOT lSucess
? "Keine freie Lizenz mehr"
ENDIF


Der Trick mit dem RLOCK ist, dass damit ein Rechnerabsturz oder das
App-Beenden ohne Leeren von den Anmeldedaten problemlos abgefangen wird, da
RecordLocks eines toten Clients vom Server nach einer gewissen Timeout-Zeit
automatisch entfernt werden.




Jürgen Wondzinski

Microsoft Visual FoxPro Technologieberater
Microsoft Most Valuable Professional seit 1996
"*´¨)
¸.•´¸.•*´¨) ¸.•*¨)
(¸.•´. (¸.•` *
.•`.Visual FoxPro: It's magic !
(¸.•``••*

Ähnliche fragen