Seite 1 von 1

ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 9:17
von Dominik Krebs
Hallo Zusammen,
ist es möglich mir über den ADS Server anzeigen zu lassen wer genau welchen Datensatz gesperrt hat?
Ich habe nichts derlei gefunden und mich würde interessieren wie Ihr dies handhabt.
Ich verwende ein ADD.

Liebe Grüße

Re: ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 9:25
von Marcus Herz
Der ARC zeigts schon an, aber nicht sehr optimal:
Management Console -> Connected Users
in dem mitteleren Panel zeigt er die gesperrten Sätze zu der Tabelle unter an. Man muss also alle Tabellen und User durchscrollen, um den zu finden.
Alternativ muss mna sich was selber schreiben, die API ist gut beschrieben.

Re: ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 9:43
von Tom
Die ADSMG.LIB/DLL (müsste in den Beispielen stecken) wrappt einige ACE-Funktionalitäten, darunter "AdsMgGetLockOwner" - eine Funktion, die Dir die gelockten Tabellen, die gesperrten Datensätze und die Besitzer der Sperrungen liefert.

Re: ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 11:01
von Dominik Krebs
Klasse vielen Dank.
Hat denn schon jemand etwas eigenes in diese Richtung geschrieben?

Re: ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 11:10
von nightcrawler
das ganze kann man auch über SQL erledigen. Schau mal die system procedures in der Hilfe durch.

Re: ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 12:36
von Wolfgang Ciriack
Hat denn schon jemand etwas eigenes in diese Richtung geschrieben?
So wie Tom bemerkte, einfach das Alaska Beispiel (...\Xbase++\source\samples\adsdbe\console) ausführen oder adaptieren.

Re: ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 12:51
von Tom
Das geht relativ einfach zweischrittig. Man holt sich zuerst über "AdsMgGetOpenTables()" die geöffneten Tabellen und arbeitet dann für das zurückgereichte Array mit "AdsMgGetLocks()" die Locks ab. Im Code der ADS Management Console (ist in den Beispielen) kann man das recht einfach nachvollziehen.

Re: ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 13:06
von nightcrawler
Hab da mal was zusammengestrickt:

Code: Alles auswählen

CREATE PROCEDURE GetAllLocks(tablename cichar(255) output, recNo Integer output, username cichar(255) output)
begin 
declare @tables CURSOR AS execute procedure sp_mggetalltables();
declare @locks CURSOR AS execute procedure sp_mggetalllocks(@tables.tablename); 
declare @lockowner CURSOR AS execute procedure sp_mggetlockowner(@tables.tablename, @locks.LockedRecNo); 
OPEN @tables;
while fetch @tables do
  open @locks;
  while fetch @locks do
    open @lockowner;
	while fetch @lockowner do
          insert into __output(tablename, recNo, username) values (trim(@tables.tablename), @locks.LockedRecNo, trim(@lockowner.username));
	end;
	close @lockowner;
  end while;
  close @locks;
end while;
close @tables;
end;
Dann nur noch:

Code: Alles auswählen

execute procedure GetAllLocks();

Re: ADS Gesperrte Datensätze

Verfasst: Fr, 22. Okt 2021 13:31
von Dominik Krebs
Das ist ja super, genau das was ich brauche. Vielen Dank :D

Re: ADS Gesperrte Datensätze

Verfasst: So, 26. Dez 2021 9:21
von UliTs
Ich bin gerade über diesen Faden gestolpert. Kann jemand ihn in das ADS Unterforum verschieben?

Re: ADS Gesperrte Datensätze

Verfasst: So, 26. Dez 2021 10:53
von Martin Altmann
'ledscht!

Schöne Feiertage,
Martin