AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie würdet Ihr eine Mehrbenutzersperre realisieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie würdet Ihr eine Mehrbenutzersperre realisieren?

Ein Thema von Janek76 · begonnen am 31. Mai 2006 · letzter Beitrag vom 31. Mai 2006
Antwort Antwort
Janek76
(Gast)

n/a Beiträge
 
#1

Wie würdet Ihr eine Mehrbenutzersperre realisieren?

  Alt 31. Mai 2006, 18:50
Datenbank: MSSQL • Zugriff über: ADO
Hallo!

Folgende Frage habe ich:

Ich greife in Delphi 7 mit den AdoComponenten auf den MSSQL-Server zu. Das Programm soll im Terminal-Server laufen.

Ich benötige für mein Programm eine Mehrbenutzersperre, d.h. solange das Formular für das Unterprogramm geöffnet ist, soll kein anderer mit diesem Programm auf der Datenbank arbeiten, mit anderen Programmen und Unterprogrammen ggf. unter dem selben Benutzernamen schon.

Ich dachte ich schreibe in eine Tabelle einen Wert, der bei 0 beginnt, beim OnCreate-Event des Formulars um 1 hochgezählt und bei OnClose um 1 erniedrigt wird. Jedesmal wenn nach dem Öffnen der Wert ungleich 1 ist, würde ich die Sperre im Programm aktivieren.

Nun kann es aber passieren, daß das Programm abgeschossen wird oder der Rechner abstürzt. Dann würde die OnClose-Routine nicht ausgeführt werden und die Sperre wäre dauerhaft aktiviert, weil ein falscher Wert in der Tabelle stehen würde. Dafür müßte ich einen Button einrichten, mit dem man die Mehrbenutzersperre zurücksetzen kann. Das möchte ich aber verhindern. Daher habe ich zwei Fragen:

1) Gibt es sowas wie eine eindeutige Connection-ID bei TAdoConnection, die ich abfragen kann, die dann verschwindet, wenn keine Verbindung mehr besteht? Oder gibt es einen flüchtigen Speicher innerhalb einer Instanz des Programms, den ich im Terminal-Server aus einer anderen Instanz abfragen kann?

2) Wie kann ich mir die offenen Verbindungen zur Datenbank auflisten lassen?

Mich würden sehr Eure Meinungen interessieren. Wie würdet Ihr das umsetzen. Ist der Weg richtig oder macht man das anders?
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#2

Re: Wie würdet Ihr eine Mehrbenutzersperre realisieren?

  Alt 31. Mai 2006, 19:50
also ohne mit mysql jemals gearbeitet zu haben:
bist du dir sicher, dass du diese mehrbenutzersperre brauchst?

bei firebird beispielsweise kümmert sich das rdbms selbst um die datenintegrität (und darauf willst du doch hinaus, oder?), und ich wäre davon ausgegangen, dass das mittlerweile standard bist .. correct me if i'm wrong

was die einzelnen benutzer am ende sehen lässt sich über das isolation level einstellen

gruß

martin
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Wie würdet Ihr eine Mehrbenutzersperre realisieren?

  Alt 31. Mai 2006, 19:53
Wieso mysql? ich dachte es geht um MSSQL...
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#4

Re: Wie würdet Ihr eine Mehrbenutzersperre realisieren?

  Alt 31. Mai 2006, 19:54
oh, ja stimmt

damit hab ich aber genauso wenig gearbeitet; und meine antwort bleibt die gleiche
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Wie würdet Ihr eine Mehrbenutzersperre realisieren?

  Alt 31. Mai 2006, 20:10
Du hast beim MSSQL Server in der Tabelle sysprocesses aus der Master Datenbank ganz detailliert aufgelistet, welcher User sich gerade mit welchem Programm in die Datenbank eingeloggt hat. Sobald Du die Anwendung beendest, oder dein Programm abstürzt und dadurch bedingt die Verbindung zur Datenbank verliert, wird dies in der besagten Tabelle mitgepflegt.

Meistens ist es aber nun so, dass du als normaler User gar nicht an die Master Datenbank randarfst, da hilft Dir dann aber die Erstellung einer View in deiner Datenbank, die dann von jedem gelesen werden kann...

Kuck Dir mal diesen Thread genauer an, da hab ich genau beschrieben, wie Du sowas realisieren kannst...

Lass also das Gefriemele aus Delphi heraus irgendwie mitzuloggen, wer wo wann was macht. Überlass dies dem Datenbankserver
  Mit Zitat antworten Zitat
Janek76
(Gast)

n/a Beiträge
 
#6

Re: Wie würdet Ihr eine Mehrbenutzersperre realisieren?

  Alt 31. Mai 2006, 20:18
Ja. Es geht um den Microsoft SQL-Server.

Das eine Programm stößt einen Importvorgang an, das andere exportiert Daten und hakt sie am Ende des Prozesses als erledigt ab, wenn der Prozeß erfolgreich war.

Für beide Unterprogramme brauche ich eine Mehrbenutzersperre. D.h. der Prozeß muß erst komplett abgelaufen sein. Dann sind alle temporären Daten abgearbeitet und der nächste kann dann mit den aktualisierten Daten starten. Die Mehrbenutzersperre ist wichtig, sonst würde es Durcheinander geben und die Mitarbeiter würden nicht mit aktuellen Daten arbeiten. Eine pessimistische Datensatzsperre reicht nicht aus, ich brauche sowas für den ganzen Prozeß.


Lese jetzt gerade die letzte Antwort. Sehr hilfreich. Vielen Dank. Werde mal in den anderen Thread gucken.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Wie würdet Ihr eine Mehrbenutzersperre realisieren?

  Alt 31. Mai 2006, 20:32
Zitat von Jelly:
Lass also das Gefriemele aus Delphi heraus irgendwie mitzuloggen, wer wo wann was macht. Überlass dies dem Datenbankserver
Das bringt aber nur was bei klassichen 2-Tier Lösungen.
Ein Windowsserver bietet mit DCOM/EnterpriseServices eine nette Architektur um solche Sperren DBMS-unabhngig und vor allem auch DBMS-übergreifend zu lösen. Ein DB-Server taugt nicht wirklich viel als App-Server, packe da zuviel Logik rein und du wirst dich nur noch mit den Unzulänglichkeiten DB-interner Skriptsprachen wie TSQL, PSQL oder PL/SQL rumärgern müssen...

Ich selbst gehe leiber meinen Weg, fernab von DCOM, aber DCOM bietet einige Schmankerl wie verteilte Transkationen und Callbacks zum Client objekt.
Ich denke Bernhard dürfte ein ziemlicher DCOM Crack sein, vllt schreibt er was zu dem Aufwand, den ein simpler Sperrserver machen würde und wieviel Mehraufwand ein DCOM-basierter Datenzugriff bedeuten würde.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz