Szukaj na tym blogu

Zapytania sql w vba, arkusz jako tabela. Sql query in vba, worksheet as a table


Często zdarza mi się korzystać z zapytań sql w vba, w niektórych wypadkach taka metoda jest dużo szybsza niż korzystanie z pętli. Przykładowy kod podaję poniżej i wyjaśniam.


Sub vSelect()
Dim cConStr As String
Dim oRst As ADODB.Recordset
Dim oCon As ADODB.Connection

ThisWorkbook.Worksheets("wynik").Cells.ClearContents
ThisWorkbook.Worksheets("wynik").Range("A1").Value = "Pracownik"
ThisWorkbook.Worksheets("wynik").Range("B1").Value = "Miasto"

cConStr = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & _
ThisWorkbook.FullName
Set oCon = New ADODB.Connection
Set oRst = New ADODB.Recordset
oCon.Open cConStr

If oCon.State = adStateOpen Then

      oRst.Open "SELECT a.nazwa, b.nazwa FROM [miasta$] b inner join [pracownicy$] a on" & _
       "(b.id = a.id_miasto and b.nazwa = 'Warszawa') order by a.id", oCon
       ThisWorkbook.Worksheets("wynik").Cells(2, 1).CopyFromRecordset oRst
      oRst.Close

    oCon.Close

End If
Set oRst = Nothing
Set oCon = Nothing
End Sub


W pliku mamy trzy zakładki: pracownicy, miasta, wynik
Arkusz pracownicy wygląda tak:
id nazwa id_miasto
1 Pracownik1 1
2 Pracownik2 2
3 Pracownik3 4
4 Pracownik4 3
5 Pracownik5 2
6 Pracownik6 4
7 Pracownik7 3
8 Pracownik8 1
9 Pracownik9 1
10 Pracownik10 2
11 Pracownik11 3
12 Pracownik12 4
13 Pracownik13 2
14 Pracownik14 1
Arkusz miasta wygląda tak
id nazwa
1 Warszawa
2 Kraków
3 Wrocław
4 Poznań
Wynikiem procedury będzie w Arkuszu wynik
Pracownik Miasto
Pracownik1 Warszawa
Pracownik8 Warszawa
Pracownik9 Warszawa
Pracownik14 Warszawa

Czasem żeby zadziałało trzeba dodać referencje w Tools => References
https://msdn.microsoft.com/en-us/library/ms677497%28v=vs.85%29.aspx

Brak komentarzy:

Prześlij komentarz