Mailinglisten-Archive |
Yann Sénécheau schrieb:
> Wie kann man gesetzte Locks abfragen?
>
> Mit LOCK TABLES TEST WRITE setze ich einen Write Lock auf test.
> Eine andere Session soll ohne Wartezeiten wissen koennen, welche tables frei
> sind (da sonst kein Login in das Programm moeglich).
Genau die gleiche Frage habe ich vor kurzer Zeit auch gestellt,
aber leider keine Antwort erhalten.
Wenn man ein solches Lock setzt, und ein anderer Client
möchte lesen, so wartet der andere Client solange, bis
das Lock aufgehoben wird (Das kann in bestimmten Fällen
ja dauern ...).
Also so gehts nicht.
Ich arbeite jetzt mit kooperativem Locking
allerdings in Delphi so:
{--------------------------------------------------------------------}
function GetLock(Tabname:string):boolean;
{Kooperatives Lock einrichten: Nicht die Tabelle wird gesperrt
sondern nur die Zeichenkette, die allerdings vereinbarungsgemäß
die Tabelle repräsentieren kann. (dubois S.654)}
var AQu:TMySQLQuery;
begin
AQu:=TMySQLQuery.Create(NIL);
result:=false;
With AQu do
begin
Database:=SVWForm.SVWDatabase;
Close; SQL.Clear;
SQL.Add('select get_lock("'+Tabname+'",0)');
Open;
if Fields[0].AsInteger=1 then result:=true;
Close;
end;
AQu.Free;
end;
{--------------------------------------------------------------------}
function ReleaseLock(Tabname:string):boolean;
{Kooperatives Lock freigeben}
var AQu:TMySQLQuery;
begin
AQu:=TMySQLQuery.Create(NIL);
result:=false;
With AQu do
begin
Database:=SVWForm.SVWDatabase;
Close; SQL.Clear;
SQL.Add('select release_lock("'+Tabname+'")');
Open;
if Fields[0].AsInteger=1 then result:=true;
Close;
end;
AQu.Free;
end;
{--------------------------------------------------------------------}
Der zweite Client erhält beim Aufruf von GetLock auf den
gleichen String bei obiger Funktion "false" zurück.
Er kann aber weiterhin lesen und schreiben.
Der Programmierer entscheidet im Client, ob er darf.
Vielleicht hilfts dir ja auch.
Vielleicht kennt jemand noch eine bessere Lösung.
--
Gruß
Dieter Spieß
Mail: mailto:Dieter.Spiess_(at)_t-online.de
Home: http://www.dieter-spiess.de
---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive