Żenimy Excela z MS SQL Server przez VBA

1 Comment

“W życiu żółwia przychodzi taka chwila, że musi komuś dać w mordę”. Tak samo w życiu niektórych ludzi przychodzi taki moment, kiedy muszą zacząć programować w Visual Basicu, żeby zmusić Excela do wykonania określonych działań. Smutne to, ale prawdziwe.

Czasem pojawia się konieczność połączenia z bazą danych, pobrania czegoś z bazy danych, lub wykonania jakiejś innej barbarzyńskiej na niej operacji. Ta opowieść będzie o tym, jak to zrobić…

To proste. Za pomocą MSDNu oraz Connection Strings dochodzimy do wniosku, że makro powinno wyglądać mniej-więcej tak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
   'zmienne identyfikujace
   Dim login  As String
   Dim passwd As String
   Dim host   As String
   Dim dbname As String
 
   'zmienne polaczenia i zestawu rekordow
   Dim conn As ADODB.Connection
   Dim rcrds As ADODB.Recordset
 
   'zmienna dla zapytania SQL
   Dim SQLstr As String
 
   'pobranie zmiennych do polaczenia z baza danych
   login  = "myUser"
   passwd = "myPassword"
   host   = "myHost"
   dbname = "myDatabase"
 
   'konfiguracja i inicjalizacja polaczenia
   Set conn = New ADODB.Connection
   With conn
       .ConnectionString = "driver={sql server};Server=" + host + _
                           ";Database=" + dbname + _
                           ";User ID=" + login + _
                           ";Password=" + passwd + _
                           ";Trusted_Connection=False;"
       .Open
   End With
 
   'przykladowe zapytanie
   SQLstr = "SELECT a, b, c AS d FROM e ORDER BY f"
 
   'wykonanie zapytania i przypisanie wyniku do zmiennej rekordow
   Set rcrds = conn.Execute(SQLstr)
 
   i = 1
   Sheets("Arkusz").Select
   'zapisywanie wyniku zapytania w arkuszu - iteracja zestawu rekordow
   Do While Not rcrds.EOF
       Cells(i, 1) = rcrds("a")
       Cells(i, 2) = rcrds("b")
       Cells(i, 3) = rcrds("d")
       rcrds.MoveNext
       i = i + 1
   Loop
 
   'zakonczenie polaczenia
   rcrds.Close
   conn.Close
   Set rcrds = Nothing

One thought on “Żenimy Excela z MS SQL Server przez VBA”

  1. A co jeśli byśmy chcieli korzystać z domenowego połączenia do bazy danych. Chodzi tylko o to by nie wprowadzać jawnie hasła do zapytania VBA?

Leave a Reply

Your email address will not be published. Required fields are marked *