Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabelle sperren (https://www.delphipraxis.net/23768-tabelle-sperren.html)

franktron 9. Jun 2004 11:22


Tabelle sperren
 
Wer weis wie man unter mysql eine Table sperren kann oder das irgendwie simulieren kann

Gollum 9. Jun 2004 11:43

Re: Tabelle sperren
 
Hallo,

in MySQL gibt es den Befehl LOCK TABLES.
Vielleicht ist es das, was Du suchst?

Albi 9. Jun 2004 11:45

Re: Tabelle sperren
 
Hallo,

willst Du komplette Table vor einen Zugriff sperren oder nur während sie von einem User bearbeitet wird?

franktron 9. Jun 2004 12:32

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

Kasoft 9. Jun 2004 13:00

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

franktron 9. Jun 2004 13:45

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

Kasoft 9. Jun 2004 13:53

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

franktron 9. Jun 2004 15:28

Re: Tabelle sperren
 
Also StartTransaction und Commit hab ich aber eben nur in der Database Comp.

Smokey 9. Jun 2004 15:29

Re: Tabelle sperren
 
Jo und?
Transaction Starten
zeug machen
commit

franktron 9. Jun 2004 15:32

Re: Tabelle sperren
 
Ja aber woher weis er auf welcher tab oder sperrte er alle tabs.

Smokey 9. Jun 2004 15:35

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

franktron 9. Jun 2004 15:44

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:

Kasoft 9. Jun 2004 16:51

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

franktron 10. Jun 2004 08:43

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)

Albi 10. Jun 2004 11:50

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.

Kasoft 10. Jun 2004 14:28

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

barnti 10. Jun 2004 14:50

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:
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;
Solange du die Transaktion nicht beendest(Commit/rollback) ist/sind der/die Datensatz(Datensätze) gesperrt.
Fragen?:Frag!

franktron 10. Jun 2004 18:27

Re: Tabelle sperren
 
Ich glaub jetzt hab ichs kappiert ich probier das mal aus Danke für die info. :thuimb: :duck:

grips-net 3. Sep 2004 09:06

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