Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz über mehrere Tabellen sperren [Vorgehensweise] (https://www.delphipraxis.net/150790-datensatz-ueber-mehrere-tabellen-sperren-%5Bvorgehensweise%5D.html)

RWarnecke 27. Apr 2010 10:19

Datenbank: Firebird • Version: 2.1.3 • Zugriff über: UniDAC

Datensatz über mehrere Tabellen sperren [Vorgehensweise]
 
Hallo zusammen,

ich suche einen Weg, einen Datensatz in einer Firebird Datenbank über mehrere Tabellen sperren. Ich habe ca. 10 - 15 Tabellen, worin die Spalte Kundennummer durchgängig ist. Nun möchte ich, das wenn ich einen Kunden auswähle, dessen Kundennummer über alle Tabellen gesperrt wird.

Dabei stellt sich mir die Frage, mache ich das über den Datenbankserver oder über mein Programm und wie mache ich das am besten ?

Edit: Sorry hatte die Datenbank falsch angegeben. :wall: Blöde Auto-Vervollständigung

borwin 27. Apr 2010 10:28

Re: Datensatz über mehrere Tabellen sperren [Vorgehensweise]
 
Zitat:

Datenbank: Firebird Embedded, Version: 2.1.3
Beim der Embedded Version greift immer nur ein User auf die Datenbank. Warum willst Du den Satz dann auf allen Tabellen sperren?

Wenn, dann auf jeden Fall sowas nur auf Seiten des Datenbankservers.

SQL-Technisch musst Du ein
SQL-Code:
Select * from Tabellenname where kundenumer = 1234 LOCK FOR Update
machen. (SQL ungeprüft)

Gruß Borwin

mkinzler 27. Apr 2010 10:29

Re: Datensatz über mehrere Tabellen sperren [Vorgehensweise]
 
Es reicht den Datensatz in einer Tabelle zu sperren und das andere programmatisch zu machen

BTW: Das Datenmodell scheint mir nicht ganz gut durchdacht zu sein

Die SQL muss so heissen:
SQL-Code:
Select * from Tabellenname where kundenumer = 1234 FOR Update WITH LOCK;

RWarnecke 27. Apr 2010 10:36

Re: Datensatz über mehrere Tabellen sperren [Vorgehensweise]
 
Zitat:

Zitat von borwin
Zitat:

Datenbank: Firebird Embedded, Version: 2.1.3
Beim der Embedded Version greift immer nur ein User auf die Datenbank. Warum willst Du den Satz dann auf allen Tabellen sperren?

Habe ich korrigiert.

Zitat:

Zitat von borwin
Wenn, dann auf jeden Fall sowas nur auf Seiten des Datenbankservers.
SQL-Technisch musst Du ein
SQL-Code:
Select * from Tabellenname where kundenumer = 1234 LOCK FOR Update
machen. (SQL ungeprüft)
Gruß Borwin

Damit sperre ich aber nur in der einen Tabelle den Datenssatz oder ?

Zitat:

Zitat von mkinzler
Es reicht den Datensatz in einer Tabelle zu sperren und das andere programmatisch zu machen

Nur wie mache ich das, da ich gleichzeitig aber noch haben möchte, dass es trotzdem lesbar ist.
Zitat:

Zitat von mkinzler
BTW: Das Datenmodell scheint mir nicht ganz gut durchdacht zu sein

Warum sollte das nicht ganz durchdacht sein ?

mkinzler 27. Apr 2010 10:39

Re: Datensatz über mehrere Tabellen sperren [Vorgehensweise]
 
Zitat:

Warum sollte das nicht ganz durchdacht sein ?
Weil die Daten in den Tabellen entweder alle in einer Tabelle stehen könnten oder über Constraints verknüpft sein sollten
Zitat:

Damit sperre ich aber nur in der einen Tabelle den Datenssatz oder ?
http://www.firebirdsql.org/refdocs/l...-withlock.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz