tomate007
Goto Top

MSSQL Feld einer Tabelle für andere Zugriffe sperren geht das?

Hallo,

ich suche eine Möglichkeit ein Feld für andere Zugriffe zu sperren außer für den Zugriff der den Befehl zum sperren gibt.

Also mal ein Beispiel.

Ich habe eine Tabelle:

CountryId char(2)
RefId char(30)
Start int
End int
value int.

nun möchte ich den Inhalt von value wo CoutnryId = 12 und RefId = 22 dieser Wert aus Value wird dann durch mein Programm verändert und wieder in value gespeichert. Erst dannach wird das Feld wieder freigegeben für andere Zugriffe. Das ist meine Vorstellung. Also Kurzform:

Feld value (wo CountryId = 12 AND RefId = 22) für andere Benutzer sperren.
Inhalt von value (wo CountryId = 12 AND RefId = 22) auslesen
Inhalt von value (wo CountryId = 12 AND RefId = 22) ändern
Inhalt in value (wo CountryId = 12 AND RefId = 22) abspeichern
value (wo CountryId = 12 AND RefId = 22) wieder für andere zugriffe freigeben.

Ist dies mit einer MSSQL-Datenbank möglich?? wenn ja könnte mir einer erklären wie es geht?

Ich danke im Vorraus...

MFG
Andre

Content-ID: 65047

Url: https://administrator.de/contentid/65047

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

AndreasHoster
AndreasHoster 30.07.2007 um 16:46:12 Uhr
Goto Top
Ja geht.
Erklären, nun ja, ginge schon, wäre aber etwas sehr aufwendig.
Schon mal was von Transaktionen gehört? Wäre hilfreich.
Und wie, mit welcher Programmiersprache soll das stattfinden? Direkt ein Transact SQL Programm auf dem Server oder doch eher eine VisualBasic Anwendung die per DAO oder ADO zugreift? Je nachdem muß man die Parameter anders / woanders angeben.

Insgesamt ist die Sperrlogik des SQL Servers auch nicht was, was man in 2 Minuten erklärt.
Aber falls Du selber in der SQL Hilfe noch lesen willst, Stichworte wären:
Isolationsstufen, Transaktionen, Sperren
Tomate007
Tomate007 31.07.2007 um 08:13:08 Uhr
Goto Top
Auf dem Server läuft Delphi welches den Zugriff auf den SQL-Server steuert und das Value dann halt modifiziert.....

Also es is ne ISAPI von Delphi welches dann halt auf die Datenbank zugreift....

Ich hatte jetzt sowas gehofft wie als wenn es nen SQL befehlt zum sperren gibt und einen zum entsperen... weil dann könnte ich das so machen:

SQL SPERREN value where CountryId = 12 AND RefId = 22
SQL SELECT value where CountryId = 12 AND RefId = 22
Bearbeitung im Programm(Delphi)
SQL UPDATE Table value= 'neuer wert' where CountryId = 12 AND RefId = 22
SQL ENTSPERREN value where CountryId = 12 AND RefId = 22

Ist das nicht so einfach durch sql befehle möglich ?!

mmh wie die Datenbankverbindung hergestellt wird ich glaube über ODBC, muss ich nochmal meinen Ausbilder fragen.


EDIT1:
Also ich hab jetzt mal google befragt zu deinen Suchbegriffen habe auch sehr viel Text gefunden es auch gelesen aber ich versteh nur Bahnhof und Kofferklaun..... wäre es möglich das du auf mein Beispiel hier mir ein Beispiel zur sperrung der Datenbank schreibst?? weil wenn ich dann einmal nen Beispiel habe kann ich es auch leichter verstehen. Danke
Ende EDIT1

Danke für die Hilfe

MFG
Andre
AndreasHoster
AndreasHoster 31.07.2007 um 08:59:28 Uhr
Goto Top
Ja, ja und dann stürzt das Programm ab und die Sperre bleibt ewig.
Nein, solche Sperren haben eine maximale Gültigkeit über eine Transaktion und wie man das mit Transaktionen macht ist von Programmiersprache zu Programmiersprache unterschiedlich.
Und Delphi ist jetzt nicht meine Programmiersprache.
Außerdem gibts verschiedene Stufen von Sperren (oder im SQL Jargon Isolationsstufen), je nachdem was alles vermieden werden soll. Bei Mehrbenutzersystemen ist es nämlich tödlich zuviel zu sperren, weil dann Wartezeiten und Deadlocks extrem zunehmen.

Unter VB lese ich die Zeile mit OpenRecordset(Select ...,,,) aus und kann im OpenRecordset Befehl sagen, wie gesperrt werden soll (dabei macht VB die Transaktionen implizit, ohne daß ich noch was machen muß) wenn man in den Edit Modus wechselt. Nehme mal an, Delphi kann sowas auch.
Tomate007
Tomate007 31.07.2007 um 13:46:37 Uhr
Goto Top
Also ich hab jetzt nochmal genau nachgefragt...

Ich soll nichts in Delphi oder so programmieren sondern...

Ich soll eine Transact-SQL Prozedur auf dem MS-SQL-Server programmieren welche dann mit Execute und den 3 variablen (CountyId,RefId,neuer value wert) aufgerufen wird. Nun ist es schlimmer als erwartet und ich habe mir einfach mal die vorhandenen Systemprozeduren angesehen und verstehe nur Bahnhof und Kofferklauen. Das hab ich auch meinen Ausbilder gesagt aber der meinte ich soll es versuchen und nun steh ich da... kann mir einer nen gutes Tutorial zum Prozeduren programmieren auf einen MS-SQL-Server nennen??


MFG
Andre