![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
можно ли получить список пользователей работающих в базе Paradox [D6, Paradox]
OlegKrt © (2002-10-30 08:54:00)можно ли получить список пользователей работающих с базой Paradox
или хотя бы узнать подключен ли кто-нибудь к базе
Avsam (2002-10-30 16:19:00) [1]> А я взял и открыл файл таблицы c помощью Notepad.exe
notepad.exe загружает в себя файл, не лочя его. То есть файл даже удалить можно.
Лучше всего в программе сделать, что при запуске пользователь регистриться в специально отведенной таблице, а при выходе - запись удаляется.
Туда же можно писать и имя машины, время и т.д.
OlegKrt (2002-10-30 10:30:00) [2]а можно ли получить имя машины, с которой подключен пользователь?
И если кто-то открыл файл монопольно можно ли узнать кто?
Reindeer Moss Eater (2002-10-30 10:24:00) [3]А я взял и открыл файл таблицы c помощью Notepad.exe
sky3d (2002-10-30 09:48:00) [4]Когда то получал список пользователей, которые держат таблицу на случай что б знать кого отцеплять.
Основная идея вот в таком разрезе приблизительно:
procedure TForm1.GetLockInfo;
var
TmpCursor: hdbicur;
Lock: LOCKDesc;
rslt: dbiResult;
ListItem: TListItem;
begin
Session.Close;
Session.Open;
with Table do
try
DatabaseName := FDatabaseName;
TableName := FTableName;
Open;
except
Exit;
end;
Check(DbiOpenLockList(Table.handle, True, True, TmpCursor));
Check(DbiSetToBegin(TmpCursor));
ListView.Items.Clear;
repeat
rslt:= DbiGetNextRecord(TmpCursor, dbiNOLOCK, @Lock, nil);
if (rslt <> DBIERR_EOF) then
begin
ListItem := ListView.Items.Add;
ListItem.Caption := inttostr(Lock.iType);
ListItem.SubItems.Add(StrPas(Lock.szUserName));
ListItem.SubItems.Add(InttoStr(Lock.iNetSession));
ListItem.SubItems.Add(InttoStr(Lock.iSession));
ListItem.SubItems.Add(InttoStr(Lock.iRecNum));
end;
until rslt <> DBIERR_NONE;
Check(DbiCloseCursor(TmpCursor));
end;
Bis (2002-10-30 09:28:00) [5]все это хранится в специальном файле PDOXUSRS.NET
Если он заблокирован (нельзя удалить), то значит есть подключения. И вполне могут быть повисшие соединения, так что не факт, что эксклюзивное открытие дает факт того, что кто-то работает в данный момент
REP (2002-10-30 09:18:00) [6]Чтобы узнать подключен ли кто-нибудь к базе попробуй использовать свойство TTable.Exclusive:
Try
..
Table1.Exclusive:=True;
Table1.Exclusive:=False;
..
Except
//Кто-то подключился!!!
end;
Reindeer Moss Eater (2002-10-30 09:01:00) [7]Если этот список есть, то его получить можно