
A példához szükséges a MACDB adatbázis, melyet a mellékelt Run.cmd BATCH állomány lefuttatásával hozhatunk létre. Csak arra kell ügyelni, hogy a MACDB.sql parancsállomány a BATCH állománnyal azonos mappában legyen. A MACDB.sql parancsállomány 5. sorában adja meg helyesen a létrehozandó adatbázisfájlok mappájának nevét és elérési útvonalát.
A megoldáshoz tehát két módon juthatunk. Az első esetben a számítógépben található hálózati kártya azonosítóját (MAC Address) a Microsoft SQL Server segítségével nyerjük, míg a másik esetben –az első megoldást ellenőrizendő – a Windows Management Instrumentation (WMI) lehetőségeivel élve kaphatunk eredményt.
Megoldás SQL Server segítségével
A MACDB adatbázisban található GetMACNumber tárolt eljárásában a master adatbázis sysprocesses rendszertáblájának azon rekordjának net_address oszlopértékét olvassuk ki, mely az aktuális process-hez tartozik, vagyis ahol a SID mező értéke megegyezik a @@SPID konstans értékével. A konstans az adott felhasználóhoz kapcsolódó process-azonosítót hordozza.
A tárolt eljárásban szükségünk van hat változóra, melyek a kapott karakterlánc részláncait hordozzák a lekérdezések után.
Create procedure GetMACNumber (@mac char(17) output )
AS
DECLARE @elso char(2)
DECLARE @masodik char(2)
DECLARE @harmadik char(2)
DECLARE @negyedik char(2)
DECLARE @otodik char(2)
DECLARE @hatodik char(2)
A lekérdezés hatszor a következő:
SELECT @elso = substring(net_address,1,2)
FROM master..sysprocesses
WHERE spid = @@SPID
...
A karakterláncokat összefűzzük és eltároljuk az output paraméterben.
SET @mac = @elso + ':' + @masodik + ':' + @harmadik + ':' + @negyedik + ':' + @otodik + ':' + @hatodik
A megoldás eredményét a Form szövegmezőjében jelenítjük meg. A tárolt eljárás meghívásához az ADO fül elemeit használjuk fel, nevezetesen egy ADOCommand és egy ADOConnection objektumot. A hívás a következőképpen történik:
with DM.ADOCommand1 do begin
Execute;
Edit1.Text := Parameters[1].Value;
end;
Az eredmény az első paraméter kiolvasásával kapható meg.
Megoldás a WMI segítségével
A WMI megfelelő objektumát egy Visual Basic nyelven megírt parancsállomány segítségével érhetjük el. A kód a WMIMAC.vbs állományban található, ezt indítjuk el programunkban.
A művelet eredményeképpen egy listát jelenítünk meg egy üzenetpanelen, mely tartalmazza a kártyák nevét és MAC címét.
A GetObject metódus segítségével elérhetjük a szükséges objektumot, ennek módja a következő:
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Az objektum ExecQuery metódusának segítségével kérdezhetjük le egy kollekcióba a kívánt adatokat úgy, hogy átadjuk paraméterként a kérési szempontokat, jelen esetben a „Select * from Win32_NetworkAdapter” karakterláncot.
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
Ezt követően már csak végig kell mennünk a kollekción és lekérdezni a számtalan tulajdonság közül azokat, melyek a feladat szempontjából érdekesek.
For Each objItem in colItems
If Not (objItem.MACAddress = "") Then
text = text & "Name : " & objItem.Name & " MACAddress: " & objItem.MACAddress & Chr(13)
End If
Next
A megoldás szempontjából a kártya neve és MAC címe fontos, így a panelre csak azokat írjuk ki.