Узнать имя компьютера

Romka_84

Всем привет. У меня следующая проблема. Есть небольшая программка позволяющая узнать есть ли подключения к базе данных. Как можно узнать имена компов с которых идут эти подключения?
<b>program</b> Version1;

<i>{$APPTYPE CONSOLE}</i>

<b>uses</b>
 Windows, SysUtils, shellapi, Classes, Dialogs;

<b>var</b>
 PathDir, s : <b>String</b>;
 Res : Boolean;
 f : TextFile;

<b>function</b> CheckOpenFile(fName: <b>string</b>): boolean;
<b>var</b>
 HFileRes: HFILE;
<b>begin</b>
 Result := false;
 <b>if</b> <b>not</b> FileExists(fName) <b>then</b> exit;
 HFileRes := CreateFile(pchar(fName), GENERIC_WRITE, <b>0</b>, <b>nil</b>, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, <b>0</b>);
 Result := (HFileRes = INVALID_HANDLE_VALUE);
 <b>if</b> Result = false <b>then</b>
 CloseHandle(HFileRes);
<b>end</b>;

<b>begin</b>

 PathDir := 'D:\2009.gdb';
 Res := CheckOpenFile(PathDir);
 <b>if</b> Res = true <b>then</b> <b>begin</b>
 s := 'D:\Users.txt';
 AssignFile(f, s);
 Rewrite(f);
 writeln(f, 'Users working with DB');
 CloseFile(f);
 <b>end</b>;

<b>end</b>.
24 ответа

Romka_84

<b>var</b> CompName: PChar;
 ...
 SetComputerName(CompName);


Romka_84

Всем привет. У меня следующая проблема. Есть небольшая программка позволяющая узнать есть ли подключения к базе данных. Как можно узнать имена компов с которых идут эти подключения?
PathDir := 'D:\2009.gdb';
 Res := CheckOpenFile(PathDir);
 <b>if</b> Res = true <b>then</b> <b>begin</b>
 s := 'D:\Users.txt';
 AssignFile(f, s);
 Rewrite(f);
 writeln(f, 'Users working with DB');
 CloseFile(f);
 <b>end</b>;
2009.gdb -- это база данных Interbase/Firebird ?И если да, то где ты взял этот код ? ссылку в студию, плиз.


Romka_84

Граур Станислав,тсс....автор хочет узнать что единственное подключение к этому файлу идет с его компьютера, процесс firebird.exe


Romka_84

Romka_84,IB Console запусти.


Romka_84

база поддерживается СУБД Yaffil. Код на форуме нарыл.


Romka_84

база поддерживается СУБД Yaffil. Код на форуме нарыл.
1. Ходи на *****.ru и читай2. Научись давать имена темам.P.S.Имхо имена компов ты не узнаешь. Ну разве что через netsatИмена подключенных юзеров только если стоит Yaffil SuperServer


Romka_84

Имхо имена компов ты не узнаешь. Ну разве что через netsat
Чиво?? Еще какими средствами винды Вы собираетесь узнавать подключенных юзверей? А с Ораклом прокатит такое? :)
Имена подключенных юзеров только если стоит Yaffil SuperServer
Почитайте в чем отличия "классик" от "супер".


Romka_84

Чиво?? Еще какими средствами винды Вы собираетесь узнавать подключенных юзверей?
Автор вроде хочет имена компов (в первом посте так написано).IP->имена.
Имена подключенных юзеров только если стоит Yaffil SuperServer
Почитайте в чем отличия "классик" от "супер".[/quot]И вам того же ))Супер -- покажет всех подключенныхКлассик -- только одного подключенного


Romka_84

Граур Станислав, а с каких пор клиент в IB/FB цепляется непосредственно к файлу бд?Служба firebird server - для красоты запускается?


Romka_84

Супер -- покажет всех подключенныхКлассик -- только одного подключенного
Однако


Romka_84

Граур Станислав, а с каких пор клиент в IB/FB цепляется непосредственно к файлу бд?Служба firebird server - для красоты запускается?
Кто мешает запустить netstat на сервере ?


Romka_84

Граур Станислав, а с каких пор клиент в IB/FB цепляется непосредственно к файлу бд? Служба firebird server - для красоты запускается?
Мну тоже всегда улыбал факт - зачем клиенту указывать ПОЛНЫЙ путь к БД. IMHO, клиенту должно быть пофиг, где там на сервере лежит база данных.


Romka_84

Кто мешает запустить netstat на сервере ?
А зачем???


Romka_84

Мну тоже всегда улыбал факт - зачем клиенту указывать ПОЛНЫЙ путь к БД. IMHO, клиенту должно быть пофиг, где там на сервере лежит база данных.
Как видишь - не пофиг.А некоторые даже пытаются узнать список подключенных юзверей средствами винды :)


Romka_84

Как видишь - не пофиг.А некоторые даже пытаются узнать список подключенных юзверей средствами винды :)
А некоторые не могут прочитать отличие classic от superИ вопрос был не о юзерах, а о компах.


Romka_84

А некоторые не могут прочитать отличие classic от superИ вопрос был не о юзерах, а о компах.
Да я уже заметил, что Вы понятия не имеете, чем отличаются "классик" от "супер".Ровно как и то, что ib/fb - не файловая база данных. И список сеансов (а там и имя юзверя есть, и имя компа) смотреть надо средствами субд, а не средствами винды.


Romka_84

Мну тоже всегда улыбал факт - зачем клиенту указывать ПОЛНЫЙ путь к БД. IMHO, клиенту должно быть пофиг, где там на сервере лежит база данных.
Это заморочки ИБ и его последователей, возможно это единственная СУБД такого рода


Romka_84

Это заморочки ИБ и его последователей, возможно это единственная СУБД такого рода
Да не надо на клиенте указывать локальный (для сервера) путь.В ib/fb давно есть алиасы.


Romka_84

а там и имя юзверя есть, и имя компа
О-о-о... И давно?


Romka_84

О-о-о... И давно?
Угу. Всегда. http://www.delphiplus.org/articles/ib/firebird-2-full-capability/2/index.htmlMON$ATTACHMENTS (активные подключения) хранит информацию об активных в текущий момент подключениях к базе данных. В текущий версии сервера ТОЛЬКО ЧТЕНИЕMON$ATTACHMENT_ID идентификатор подключения MON$SERVER_PID идентификатор процесса сервера (PID). Можно увидеть в диспетчере задач M$ Windows или в списке #ps ax LINUX MON$STATEсостояние подключения 0: idle 1: active принимает одно из значений поля RDB$TYPE набора данных, возвращаемых SQL-скриптом SELECT T.RDB$TYPE, T.RDB$TYPE_NAME FROM RDB$TYPES T WHERE (T.RDB$FIELD_NAME ='MON$STATE')MON$ATTACHMENT_NAME имя базы, укзанное при подключении (строка подключения). Содержит или физическое имя файла базы данных, или имя псевдонима из файла ($firebird)/aliases.conf, смотря как была задана строка подключения. MON$USER имя пользователя, под которым подключились к базе MON$ROLE роль пользователя MON$REMOTE_PROTOCOL протокол подключения, например TCPv4 MON$REMOTE_ADDRESS удаленный адрес подлючения, например 192.168.0.101 MON$REMOTE_PID идентификатор процесса (PID) клиентского приложения на удаленной ЭВМ, вызвавшего подключение. Если клиентское приложение использует библиотеку fbclient.dll младше версии 2.1, то поле содержит NULL MON$REMOTE_PROCESS полный путь к исполняемому файлу клиентского приложения на удаленной ЭВМ, вызвавшего подключение. Если клиентское приложение использует библиотеку fbclient.dll младше версии 2.1, то поле содержит NULL MON$CHARACTER_SET_ID идентификатор кодировки, указанной при подключении, например 52 принимает одно из значений поля RDB$CHARACTER_SET_ID набора данных, возвращаемых SQL-скриптом SELECT C.RDB$CHARACTER_SET_ID, C.RDB$CHARACTER_SET_NAME FROM RDB$CHARACTER_SETS CMON$TIMESTAMP дата-время старта подключения MON$GARBAGE_COLLECTION флаг сборки мусораMON$REMOTE_ADDRESS - надеюсь этого хватит, что б nslookup сработал?


Romka_84

разве "имя" у клиента вообще обязано быть?


Romka_84

Да не надо на клиенте указывать локальный (для сервера) путь.В ib/fb давно есть алиасы.
Я как бы в курсе, но я же не про алиасы говорил, это всего лишь псевдоним, а про суть, зачем нужно указывать путь, да еще с клиента. Алиас сути не меняет.


Romka_84

Я как бы в курсе, но я же не про алиасы говорил, это всего лишь псевдоним, а про суть, зачем нужно указывать путь, да еще с клиента. Алиас сути не меняет.
Как не меняет?Алиасы на сервере определябтся.На клиенте - только названия алиаса, полный путь клиенту совершенно не нужен.