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

Recently Active Members

Profile picture of vbatools
Profile picture of Karol Stilger
Profile picture of marcinmachalowski
Profile picture of Joanna Subik
Profile picture of Anorak
Profile picture of programistaaccess
Profile picture of piotrpawlik
Profile picture of Emil Wasilewski
Profile picture of kicekpicek
Profile picture of coldfusion
Profile picture of Gosia Borzęcka
Profile picture of lukaszch
Profile picture of itadministracja
Profile picture of farbenia
Profile picture of Łukasz Kałużny
Profile picture of kabzinski
Profile picture of rtynski
Profile picture of leszekbetlinski
Profile picture of Iv
Profile picture of Justyna Spychała