2016-05-13 9 views
0

Ein wenig stecken. Ich habe eine Excel-Tabelle mit beispielsweise den folgenden Spalten [Datum], [Name], [PostCode], [Stadt]Excel Einfügen in Access-Tabelle aus Excel definiert Tabelle mit einer Where-Klausel

Und eine Zugriffstabelle mit den gleichen Spaltennamen.

Ich versuche, die Excel-Datentabelle in die Access-Tabelle einzufügen, aber eine WHERE-Klausel anzuwenden, so dass es Daten bereits in der Zugriffstabelle ignoriert.

Ich kann gerne alle Daten in die Access-Tabelle einfügen, aber kann nicht eine WHERE-Klausel erfolgreich ignorieren die vorhandenen Daten. Und ärgerlicherweise kann ich den tatsächlichen Tabellennamen nicht korrekt referenzieren, also referenziere ich das Blatt (aber funktioniert gut).

Dies ist der Code ich bis jetzt haben:

Sub TestInsert() 

    Dim cnn As ADODB.Connection 

    Dim dbPath As String 
    Dim xlPath As String 
    Dim uSQL As String 

    dbPath = "C:\Test\TestDB.accdb" 
    xlPath = "C:\Test\TestXL.xlsm" 

    'Set Connection string 
    Set cnn = New Connection 
    cnnstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath 

    'Open connection to db 
    cnn.Open cnnstr 

     uSQL = "INSERT INTO tbl_ApolloBrochurewareReportTEST " _ 
      & "SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & xlPath & "].[Sheet1$]" 


     cnn.Execute uSQL 

    cnn.Close 

End Sub 

Jede Eingabe oder Wissen wäre toll, danke.

+0

Wenn Sie einen eindeutigen Index für das Datumsfeld platzieren dann doppelte Datensätze werden einfach weggeworfen werden. Es sollte diesen Index sowieso geben, wenn es keine Duplikate geben sollte, aber ein Datumsfeld wird selten als eindeutiges Feld verwendet - Daten sind für diesen Zweck nicht zuverlässig, jedes vorhandene Zeitelement wird diese * anscheinend * doppelten Datensätze erlauben. –

Antwort

1

sollten Sie in der Lage sein, den SQL-Ausdruck zu erweitern:

uSQL = "INSERT INTO tbl_ApolloBrochurewareReportTEST " _ 
     & "SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & xlPath & "].[Sheet1$] As T " & _ 
     "WHERE T.Date NOT IN (SELECT [Date] FROM tbl_ApolloBrochurewareReportTEST)" 
+0

Danke @gustav Ich gebe das gehen. –

+0

Arbeitete ein Leckerbissen, danke. Ich glaube nicht, dass ich es verpasst habe, der Excel-Tabelle einen Alias ​​zu geben. Ich habe zu viel über die VBA nachgedacht und nicht über den SQL-Teil. Vielen Dank. –

Verwandte Themen