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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 65047
Url: https://administrator.de/contentid/65047
Ausgedruckt am: 26.11.2024 um 02:11 Uhr
4 Kommentare
Neuester Kommentar
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
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
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.
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.