SQL-DMO - What the hell ...

První kroky
Vytváříme-li projekt pracující s SQL-DMO, bude zřejmě nejvhodnější si nejprve tuto knihovnu zpřístupnit. Z nabídky Project si vyberte References a poté Microsoft SQLDMO Object Library:

Nyní si do projektu založte nový modul a v něm nadeklarujte globální proměnnou, která nám bude sloužit pro provázání s objektem SQLServer:

Dim MySQLServer

Tím máme připraveny základní věci pro první krok - přihlášení k serveru.

Přihlášení k serveru
Při přihlašování k serveru musíme znát tři věci - jméno, uživatele a heslo. Opět pracujeme s modelem ověřování SQL (více informací v seriálu o práci s SQL Serverem). Takže na formulář si dáme tři TextBoxy (getServerName, getUserName, getPassword) a tlačítko pro připojení (cmdConnect).

Nyní na událost Click tlačítka zapište:

'Vytvoření objektu
Set MySQLServer = CreateObject("SQLDMO.SQLServer")
'SQL Autentizace
MySQLServer.LoginSecure = False
'Připojení k serveru
MySQLServer.Connect ServerName:=getServerName.Text, Login:=getUserName.Text, Password:=getPassword.Text


Pokud jste zadali správné parametry a nebyla zobrazena žádná chybová hláška, tak jste připojeni SQL serveru. Pokud si nyní stopneme služby SQL Serveru a zkusíme se znovu přihlásit, dostaneme nicneříkající chybovou hlášku Automation Error. Je to způsobeno tím, že sme si neověřili, zda SQL Server běží. Upravme tedy náš kód následovně:

'Vytvoření objektu
Set MySQLServer = CreateObject("SQLDMO.SQLServer")
'SQL Autentizace
MySQLServer.LoginSecure = False
'Ověření stavu SQL Serveru
MySQLServer.Name = getServerName.Text
If Not MySQLServer.Status = 1 Then
   MsgBox "Vámi požadovaný SQL server neběží !!!", vbExclamation + vbOKOnly, "Upozornění"
Else
   'Připojení
   MySQLServer.Connect ServerName:=getServerName.Text, Login:=getUserName.Text, Password:=getPassword.Text
End If


Pomocí parametru Status si můžeme kdykoliv ověřit stav SQL serveru (služeb), pokud známe jeho jméno nebo IP. Těch stavů může být několik, jsou z kolekce SQLDMO_SVCSTATUS_TYPE a jejich seznam naleznete v Object Browseru u knihovny SQLDMO, objekt SQLServer.

Vylepšeme si ještě nyní náš kód pro přihlašování. Proč se zdržovat ručním zapínáním SQL služeb, když si to můžeme naprogramovat přímo z VB:

'Vytvoření objektu
Set MySQLServer = CreateObject("SQLDMO.SQLServer")
'SQL Autentizace
MySQLServer.LoginSecure = False
'Ověření stavu SQL Serveru
MySQLServer.Name = getServerName.Text
If Not MySQLServer.Status = 1 Then
   
'Spuštění serveru
   MySQLServer.Start False, getServerName.Text
End If
'Připojení
MySQLServer.Connect ServerName:=getServerName.Text, Login:=getUserName.Text, Password:=getPassword.Text

Server, pokud není spuštěn, spouštíme pomocí metody Start. Druhý parametr je jasný, ovšem je třeba vysvětlit hodnotu False. Tato hodnota určuje startovací mód serveru. Pokud bude nastavena na true, pak se po úspěšném startu server automaticky pokusí přihlásit na základě zaslaných parametrů, které ale zde nyní neuvádíme:

object.Start( StartMode , [ Server ] , [ Login ] , [ Password ] )

Kdybychom využívali automatického přihlášení po startu serveru, musel by náš kód vypadat asi trochu jinak (mám na mysli tu podmínku), ale to už byste jistě dokázali upravit sami.

Chyby při přihlašování
Co se stane, pokud například zadáte chybné heslo ? To, že se nepřihlásíte je asi jasné. Ovšem, je třeba ošetřit chybový stav:

Protože využíváme věci z DLL knihovny, vrací se nám všechny chyby jako Run-time a nemáme příliš velkou šanci si nejprve ověřit na serveru, zda je operace proveditelná a podle toho se rozhodnout. Upravme si tedy kód následovně, abychom ošetřili chybu při přihlašování:

On Error GoTo loginerror
'Vytvoření objektu
Set MySQLServer = CreateObject("SQLDMO.SQLServer")
'SQL Autentizace
MySQLServer.LoginSecure = False
'Ověření stavu SQL Serveru
MySQLServer.Name = getServerName.Text
If Not MySQLServer.Status = 1 Then
'Spuštění serveru
   MySQLServer.Start False, getServerName.Text
End If
'Připojení
MySQLServer.Connect ServerName:=getServerName.Text, Login:=getUserName.Text, Password:=getPassword.Text
GoTo allok

loginerror:
   If Err.Number = 18456 Then
      MsgBox "Chybné heslo pro účet " + getUserName.Text + " !", vbExclamation + vbOKOnly, "Upozornění"
      Exit Sub
   Else
      Resume Next
   End If

allok:

SQL Server má celou řadu chybových čísel identifikujících chybu, takže pokud časem při přihlašování na nějakou narazíte, tak doporučuji si její stav ošetřit příslušnou zprávou (například chyba 1722 je když nebyl SQL server nalezen).

Zpět Další

Autor: The Bozena