VBATools

Export danych z XL do ACC

by on Apr.19, 2017, under Excel, Porady

W Acc jest import danych do bazy, ale nie ma UPD bazy, np w przypadku kiedy chcielibyśmy dopełnić ją lub stale dopełniać danymi zmagazynowanymi w Excelu. Jak to zatem zrobić. moim ulubionym sposobem jest ADO i import prze budowanie zapytań SQL uwzględniających wszystkie potrzebne elementy takie jak nagłówki kolumn bazy pobierane z pierwszego wiersza tabeli Excela.

Od czego zacząć. 

Uruchamiamy developera Excela [Alt+F11] i wpisujemy kod, w którym odwołujemy się do konkretnego pliku bazy w której dane mają wylądować, następnie w pętli przelatujemy przez wiersze, aby budować inserty które zapełnią nam bazę: (poniżej pętla realizuje dane od początku, ale do UPD można przetrzymać nr ostatniego importowanego wiersza i rozpocząć następny export od następnego lub porównać dane aby rozpocząć od tych, których jeszcze nie mamy).

Sub export_to_ACC()
'MVP OShon from www.VBATools.pl
Const Tabela$ = "Tabela1"
Dim Pytanie_sql$
Dim tbl(): tbl = Range("A1:C4") 'Excels range

Dim c As New ADODB.Connection
Dim d As New ADODB.Recordset
Const plik$ = "C:\Temp\import.accdb" 'My file
Dim ODBC$ 'https://www.connectionstrings.com/access/
  ODBC = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & plik & ";" & _
         "Persist Security Info=False;"
         
If c.State <> 1 Then c.Open ODBC
If d.State = 1 Then d.Close

Dim x&, y&, kolumny$, wartosci$
For x = 1 To UBound(tbl)
wartosci = ""
    For y = 1 To UBound(tbl, 2)
        If x = 1 Then
            kolumny = kolumny & tbl(x, y) & ","
        Else
            If Len(tbl(x, y)) = Empty Then
                wartosci = wartosci & "Null,"
            Else
                If IsNumeric(tbl(x, y)) Then _
                    wartosci = wartosci & Replace(tbl(x, y), ",", ".") & "," Else _
                    wartosci = wartosci & "'" & tbl(x, y) & "',"
            End If
        End If
    Next
    If Len(wartosci) > 0 Then
    Pytanie_sql = "INSERT INTO " & Tabela & " (" & _
        Mid(kolumny, 1, Len(kolumny) - 1) & ") values (" & _
        Mid(wartosci, 1, Len(wartosci) - 1) & ")"
        
        d.Open Pytanie_sql, c, adOpenStatic, adLockOptimistic
    End If
Next x
End Sub

 

Aby zadziałało odwołanie się do ADODB nalezy dodać kontrolkę: Meny/Tools/References/Microsoft ActiveX Data Objects 2,x Library

Excel w tej metodzie ma automatyczny commit, a więc nie trzeba nic zatwierdzać, a plik realizuje import bez konieczności posiadania ACC. Co ważne to kopie danych mogą wykonywać się na jednostce bez Accessa.

Tak wygląda baza (mała próbka pokazowa) po napełnieniu:

 

(c) Shon Oskar – www.VBATools.pl

Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.

 

 

:, , , , ,

Leave a Reply