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