Autor Beitrag
Sidi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Mo 08.12.14 23:39 
Hallo zusammen,

gibt es eine Möglichkeit in einem Netzwerk festzustellen, von wie vielen Anwendern ein Programm gerade genutzt wird? :nixweiss:

Gruß Sidi


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 08.12.2014 um 23:45
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 09.12.14 00:10 
Nur, wenn du irgendwo zählst oder das Programm sich in einem Netzwerk finden lässt.

Ich denke, die einfachste Möglichkeit, ist eine zentrale Datenbank oder eine andere Daten-Stelle, wo das Programm jede aktive Session einträgt.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 09.12.14 10:05 
viele Datenbanken haben eingebaute Funktionen oder Systemtabellen, aus denen sich ermitteln lässt, wie viele Verbindungen zur DB offen sind.
Wenn Dein Programm schon eine Datenbank benutzt, wäre es sinnvoll uns zu sagen, welche das ist. Dann könnte man die Richtung vielleicht Tipps geben.

Oder hast Du ansonsten eine zentrale Stelle im Netzwerk, z.B. irgend ein Serverdienst, wo das Programm sich anmelden muss, etc.? Dann wäre das der Ansatzpunkt.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Sidi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Di 09.12.14 20:26 
Hallo zusammen,

das Programm nutzt eine MySQL Datenbank. An die Möglichkeit in der Datenbank einfach einen Zähler hochzählen zu lassen oder den Usernamen zu speichern habe ich auch schon gedacht - ich möchte jedoch vermeiden dass bei einem Stromausfall der Zähler nicht zurückgesetzt wird und dadurch die Anzahl der User verfälscht würde. Am geschmeidigsten wäre es natürlich wenn ich abfragen könnte wie viele User eine bestimmte Tabelle offen haben ohne etwas speichern zu müssen, das dürfte relativ unkritisch auf ungewollte Abbrüche der Verbindung sein.

Gruß Sidi
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 09.12.14 21:04 
Wenn es pro Programm-Instanz nur eine konstant bleibende Verbindung zur Datenbank gibt, würde vermutlich der Tipp von Nersgatt ausreichen.

Was das verlieren einer Session angeht, kannst du den Vorgang ja regelmäßig wiederholen, dass das Programm alle paar Minuten eine kurze Info an den Server sendet, dass die Session mit der ID noch da ist.
Dann gibt es in der Datenbank eine Tabelle für die Sessions mit einer ID, Zeitpunkt, wann sie erstellt wurde, etc.


Wobei ich mich aber schon frage, wozu das gut sein soll.
Sidi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Di 09.12.14 21:16 
wozu das gut sein soll - ganz einfach ;-)

Das Programm liegt auf einem Server (kein Internetserver), jeder User startet von dort das Programm und logt sich mit dem selben Passwort ein. Möchte man nun den gleichzeitigen Zugriff auf eine bestimmte Anzahl User einschränken (je nach Lizenz) dann muss man ermitteln können, wie viele User gerade angemeldet sind.

Gruß Sidi
dsi
Hält's aus hier
Beiträge: 22
Erhaltene Danke: 8



BeitragVerfasst: Di 09.12.14 21:24 
Wenn es für jeden user einen eigenen DB-User gibt kannst du mit dem folgenden Befehl die Anzahl der eingeloggten User ermitteln.

SELECT count( DISTINCT user ) FROM `processlist`

Alternativ könntest du es mit den folgenden Befehlen versuchen, falls es nur einen DB-User gibt.

SELECT count( DISTINCT host ) FROM `processlist`

SELECT count(*) FROM `processlist` where user = 'USERNAME'


Zuletzt bearbeitet von dsi am Di 09.12.14 21:41, insgesamt 1-mal bearbeitet
Sidi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Di 09.12.14 21:37 
hm - verstehe ich nicht

SELECT count( DISTINCT user ) FROM `processlist`

das script im MySQL Query Browser eingegeben führt zur Fehlermeldung -

soll wohl heißen dass ich die user in einer Tabelle processlist speichern muß - das will ich ja vermeiden.
dsi
Hält's aus hier
Beiträge: 22
Erhaltene Danke: 8



BeitragVerfasst: Di 09.12.14 21:48 
Bei processlist handelt es sich eigentlich um eine Systemtabelle. Versuch es mal mit information_schema.processlist statt 'processlist'.

SELECT count( DISTINCT user ) FROM information_schema.processlist

Welche MySQL Version verwendest du? Die Systemtabelle processlist gibt es seit MySQL 5.1.7.
Sidi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47


Delphi XE5 Prof.
BeitragVerfasst: Di 09.12.14 23:09 
soweit ich weiß ist es die 5.0

ich habe im MySQL Query Browser die Datenbank Information_schema entdeckt, die enthält jedoch keine Tabelle processlist sondern nur folgende:

character_sets, collation_character_set_application, collations, column_privilegs, columns, key_column_usage, routines, Schema_privileges, Schemata, statistics, table_constraints, table_privileges, tables, Triggers, user_privileges, views

Gruß Sidi