Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

можно ли получить список  пользователей работающих в базе 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]

Если этот список есть, то его получить можно


Наверх

Титульная страница Поиск, карта сайта Написать письмо