Żenimy Excela z MS SQL Server przez VBA
luty 18th, 2010. Brak komentarzy.
Kategorie: SQL, Software, Zabawy z kodem.
“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 |