Есть ли возможность определить MAC_aдрес(а) на сетевом(ых) компе(ах) из Clarion (посредством WinApi или к-л. доп. библиотекой)?
Легко!
Всего-то и надо - MS SQL и внедрить малюсенькую прогу на юзеровские компы, чтобы эта прога коннектилась к какой-либо БД. А дальше ну совсем просто:
1. Создаем хранимку(например, WriteLogUsers) в нужной БД
SELECT convert(char(20),master.dbo.sysprocesses.nt_username) AS NetworkUserName,
convert(char(20),master.dbo.sysprocesses.loginame) AS LoginName,
convert(char(20),master.dbo.sysprocesses.login_time,113) AS LoginTime,
convert(char(20),master.dbo.sysdatabases.name) AS DatabaseName,
convert(char(20),master.dbo.sysprocesses.hostname) AS ComputerName,
convert(char(20),master.dbo.sysprocesses.net_address) AS MACAddress,
convert(char(20),master.dbo.sysprocesses.program_name) AS ProgramName
INTO Dbo.Users
FROM master.dbo.sysprocesses, master.dbo.sysdatabases
WHERE master.dbo.sysdatabases.dbid = master.dbo.sysprocesses.dbid
AND master.dbo.sysdatabases.name = '<yourdatabase>'
2. В DCT описываем таблицу Users:
NetworkUserName STRING 20 @s20
LoginName STRING 20 @s20
LoginTime STRING 20 @s20
DataBaseName STRING 20 @s20
ComputerName STRING 20 @s20
MACAddress STRING 20 @s20
ProgramName STRING 20 @s20
3. И делаем вызов где-нибудь в меню:
OPEN(DummyCnt)
OPEN(DummyStr)
CLEAR(DummyCnt)
DummyCnt{PROP:SQL}='DROP TABLE DBO.USERS'
NEXT(DUMMYCNT)
case errorcode()
of 0 ! данные получены
of 33 ! данных нет
BEEP(BEEP:SystemExclamation) ; YIELD()
of 90 ! ошибка SQL
stop(fileerror() & '<10>SQL: ' & DummyCnt{PROP:SQL})
else ! ошибка
stop(error() & '<10>Table: ' & name(DummyCnt))
end
CLEAR(DummyStr)
DummyStr{PROP:SQL}='NORESULTCALL WriteLogUsers'
NEXT(DUMMYSTR)
case errorcode()
of 0 ! данные получены
of 33 ! данных нет
BEEP(BEEP:SystemExclamation) ; YIELD()
of 90 ! ошибка SQL
stop(fileerror() & '<10>SQL: ' & DummyStr{PROP:SQL})
else ! ошибка
stop(error() & '<10>Table: ' & name(DummyStr))
end
BrowseUsers()
З.Ы. Использую эту технику для контроля подключения юзеров к БД