![]() |
Tabelle sperren
Wer weis wie man unter mysql eine Table sperren kann oder das irgendwie simulieren kann
|
Re: Tabelle sperren
Hallo,
in MySQL gibt es den Befehl LOCK TABLES. Vielleicht ist es das, was Du suchst? |
Re: Tabelle sperren
Hallo,
willst Du komplette Table vor einen Zugriff sperren oder nur während sie von einem User bearbeitet wird? |
Re: Tabelle sperren
Ich habe folgendes Problem ich habe ein Rechungswewesen und will wenn ein User eine Rechung bearbeitet das nicht ein 2. User auch da rein geht.
Und dann habe ich einen Abschluss und da will ich wenn ein User auf dei Tab zugreift das nicht ein 2 zugriff hat |
Re: Tabelle sperren
Ich denk mal du meinst das ACID Prinzip. Du musst wenn du in der Tabelle drin bist
zuerst einmal deiner Transaktionskomponenten .StartTransaction angeben das der Datensatz für ihn reserviert hat. Am ende wenn alles fertig ist nur noch ein .Commit und alles ist gut. Noch eins solltest nicht vergessen. die Eigenschaft Autocommit vor der ganzen Geschichte auf False zu setzen. MfG Kasoft |
Re: Tabelle sperren
Geht leider net hab nur ein Transaction in der Database Komponente und der kann ich lieder nicht sagen auf welche tab.
Ich benutz MySQLDAC Aber ganu das meinet ich hab ich ja auch immer so unter IB gemacht aber wie jetzt |
Re: Tabelle sperren
ich habe absolut keine Ahnung von MySQLDAC. Hast du aber eine Möglichkeit Commit ein
und auszuschalten??? Du weisst das du auch die DBMS darauf umszustellen... MfG Kasoft |
Re: Tabelle sperren
Also StartTransaction und Commit hab ich aber eben nur in der Database Comp.
|
Re: Tabelle sperren
Jo und?
Transaction Starten zeug machen commit |
Re: Tabelle sperren
Ja aber woher weis er auf welcher tab oder sperrte er alle tabs.
|
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 15:30 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