Delphi-PRAXiS
Seite 2 von 2     12   

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)

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 04:27 Uhr.
Seite 2 von 2     12   

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