VBA i SQL Server

U nekoliko prethodnih „recepata“ bilo je reč o tome kako povezati Excel i Microsoft SQL Server radi preuzimanja podataka u radni list. Ovo su sve bile „bezazlene“ operacije, s obzirom na to da ste mogli samo da čitate podatke iz baze, ne i da ih menjate. Ponekad je potrebno kreirati program koji obavlja kompleksnije manipulacije nad bazom, pokretanjem odgovarajućeg SQL upita, o čemu će biti reč u tekstu koji sledi.

Da bi ste mogli da pristupite bazi podataka potrebno je najpre da uključite odgovarajuću biblioteku koja sadrži odgovarajuće objekte i metode. To se postiže tako što, pomoću ALT+F11, uđete u VBA Editor. Zatim treba otvoriti meni Tools, pa izabrati opciju References. Otvoriće se prozor koji sadrži listu raspoloživih biblioteka gde je dalje potrebno uključiti biblioteku Microsoft ActiveX Data Objects 2.0.

Krećemo sa pisanjem programa! Najpre treba da se definišu tri promenljive:

Dim veza As ADODB.Connection
Dim slogovi As ADODB.Recordset
Dim konekcijas As String

Prva nam je potrebna za kreiranje veze ka bazi podataka, druga se koristi za povezivanje sa slogovima, a treća služi radi definisanje stringa konekcije koji je neophodan radi inicijalnog povezivanja sa bazom. String konekcije se razlikuje od baze do baze, a njegovom izmenom definišemo parametre povezivanja i server sa kojim želimo da se povežemo. Više informacija možete da pronađete na linku: http://www.connectionstrings.com

String za povezivanje sa bazom definišemo na sledeći način:

konekcijas = “Provider=SQLOLEDB;Data Source=EKSQL;” & _
                  “Initial Catalog=TESTDB;” & _
                  “Integrated Security=SSPI;”

Iza reči Data Source treba navesti naziv instance SQL servera, a iza Initial Catalog naziv baze podataka sa kojom želimo da se povežemo. Nakon definisanja stringa pravimo novu vezu i skup za povezivanje sa slogovima, a zatim je potrebno da izvršimo željeni SQL upit pomoću metoda Execute. Njegova sintaksa je:

Execute (<SQL upit>)

U konkretnom slučaju, ako želimo da preuzmemo sve zapise iz tabele Partneri napisaćemo:

Set slogovi=veza.Execute(“SELECT * FROM Partneri;”)

Metod Execute omogućava da pokrenete i druge SQL naredbe, neke od njih mogu menjati ili brisati zapise, pa budite veoma oprezni prilikom njegovog korišćenja.

Na kraju je još potrebno da izvršimo ispis i zatvorimo vezu ka bazi podataka, a kako se to radi možete da vidite u programu koji sledi:

Sub SQL_Connection()

    Dim veza As ADODB.Connection
    Dim slogovi As ADODB.Recordset
    Dim konekcijas As String

    konekcijas = “Provider=SQLOLEDB;Data Source=EKSQL;” & _
                  “Initial Catalog=TESTDB;” & _
                  “Integrated Security=SSPI;”

    Set veza = New ADODB.Connection
    Set slogovi = New ADODB.Recordset
    veza.Open konekcijas

    Set slogovi = veza.Execute(“SELECT * FROM Partneri;”)   

    If Not slogovi.EOF Then
        Sheets(1).Range(“A1”).CopyFromRecordset slogovi
        slogovi.Close
    Else
        MsgBox “Greška, nema podataka!”, vbCritical
    End If

    If CBool(veza.State And adStateOpen) Then veza.Close

    Set veza = Nothing
    Set slogovi = Nothing  

End Sub