![]() |
Re: Tabelle sperren
Dein SQL-Befehl wird ja über die Connection ausgeführt.
Er sperrt dann alles, was hinter dem Start der Transaction angesprochen wird |
Re: Tabelle sperren
Das geht nicht so gut da würde der zu viel sperren (leider währe so schön gewesen und mehrere Datnebanken geht nicht (zuviel Verbindugen))
Geibts noch eine methode :oops: |
Re: Tabelle sperren
Ich versteh dein Problem nicht im geringsten. Wenn du Start Transaction machst werden die Datensätze
gesperrt die du dann benötigst. Er sperrt weder die komplette Datenbank noch die komplette Tabelle. Und das ist doch was du wolltest. MfG Kasoft |
Re: Tabelle sperren
Ja schon aber da ich nur eine DB hab und nicht unbedingt für jedes modul eine eigene machen will,
Sperrt er dann alles was auf gemacht wird (wenn man z.b. Kunden öffnet soll er die ja nicht mit sperren) |
Re: Tabelle sperren
Hallo,
ich arbeite zwar mit Interbase aber es sollte doch in etwa genauso funktionieren. Die Datenbank sperrt doch nicht die komplette Table wenn darauf zugegriffen wird, das widerspricht doch dem Multigeneration - prinzip solcher DB's. Es ist bei Interbase eine reine Einstellungssache wie sich die DB bei einem Zugriff verhält und das sollte bei MySQL genauso so sein. Der/die Datensatz(e) wird bei einem Zugriff gesperrt, nur der DS der bearbeitet wird, die anderen DS können normal bearbeitet und gelessen werden. Es sei de, du hast eine exklusive Sperren hinterlegt, dann werden alle Tables gesperrt, die von der Transaktion verwendet werden. Diese Einstellung sollte aber nicht der Standard sein. |
Re: Tabelle sperren
Hallo Franktron,
Albi hat schon alles gesagt. Ich denke du solltest das machen wie es beschrieben ist! Vergess nicht das deine MySQL Datenbank das InnoDB Format haben muss. MfG Kasoft |
Re: Tabelle sperren
Hi,
wenn du einen Datensatz sperren möchtest, brauchst du innoDB-Tabellen. Beim Sperren musst du zunächst eine Transsktion starten. Anschließend fragst Du die zu bearbeitenden Datensätze mit dem Kommando 'FOR UPDATE' ab:
Delphi-Quellcode:
Solange du die Transaktion nicht beendest(Commit/rollback) ist/sind der/die Datensatz(Datensätze) gesperrt.
try
Database.StartTransaction mysqlQuery.SQL.Text('SELECT * FROM MeineTabelle WHERE Irgentwas FOR UPDATE'); //... weitere Aktionen... Database.Commit; except on E: DatabaseError do begin Database.rollback showmessage('Ausführung nicht erfolgreich!') end; Fragen?:Frag! |
Re: Tabelle sperren
Ich glaub jetzt hab ichs kappiert ich probier das mal aus Danke für die info. :thuimb: :duck:
|
Re: Tabelle sperren
Hallo!
Funktioniert das auch mit InterBase? Kann ich einen Interbase-Datensatz sperren, indem ich in einer Transaction den Satz mit SELECT .... FOR UPDATE auslese? Was passiert, wenn ein anderer Benutzer den gleichen Satz dann ebenfalls "FOR UPDATE" auslesen will? Danke für die Antwort! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz