Использование DBIopenlocklist



Автор: Reinhard Kalinke

Вот пример поиска пользователей данной таблицы. Имейте в виду, что свойство TStringList Duplicate установлено в dupIgnore, поскольку пользователь может иметь более одной блокировки таблицы. При работе с dBase возвращается только блокировка текущего сеанса, тогда как с Paradox функция покажет всех пользователей, получивших доступ к этому же NET-файлу.


procedure GetTableUserList(ATable: TTable; AStringList: TStringList);
var
hUserCur: hDBICur;
pUserBuf: pByte;
begin
AStringList.Clear;
AStringList.Duplicates := dupIgnore;
Check(DBIOpenLockList(ATable.Handle, True, True, hUserCur));
GetMem(pUserBuf, SizeOf(LOCKDesc));
try
while (DBIGetNextRecord(hUserCur, dbiNOLOCK, pUserBuf, nil) = DBIERR_NONE) do
AStringList.Add(StrPas(pLOCKDesc(pUserBuf)^.szUserName))
finally
FreeMem(pUserBuf, SizeOf(LOCKDesc));
DBICloseCursor(hUserCur);
end;
end;


Далее: Как научить VCL делать Refresh для запросов правильно »»