# Excel Tabelle an Access Tabelle anfügen



## starbug (13. Oktober 2011)

Hallo,

mal wieder ne Frage. Wie kann ich eine Excel Tabelle an eine bestehende Access Tabelle anfügen. Ich weiss das es diese Insert Into Anweisung gibt aber ich hab die jetzt Immer nur mit einzelnen Datensätzen gesehen und nich mit einer ganzen Tabelle. Und man muss ja auch die Transferspreadsheet Methode nutzen oder?


----------



## Yaslaw (13. Oktober 2011)

Mit Transferspreadsheet in eine Temporäre Tabelle schreiben und dann mittels Append-Query an die andere hinzufügen
Append-Query: Eine Abfrage zusammenstellen und dann den Type Append-Query Auswählen (Ist das Icon mit dem +!). Dann noch die Zeiltabelle Auswählen und bei jedem Feld das Zielfeld angeben.
Dieses kann man dann speichern und aus dem Script aufrufen


```
tempTableName = "temp"
'Import
DoCmd.Transferspreadsheet(...)
'Kopieren
CurrentDb.execute("MyAppendQuery")
'Bereinigen
CurrentDb.Execute("DROP TABLE " & tempTableName)
```


----------



## starbug (13. Oktober 2011)

Moin,

ich hatte mich oben falsch ausgedrückt. Ich lade eine Excel Tabelle in die DB und nenne die die Tabelle dann Upload. Jetzt möchte ich die Upload Tabelle an eine andere bestehende Access Tabelle anfügen. Sowas kann man doch auch irgendwie mit SQL machen oder? z.B:


```
INSERT INTO bestehende Tabelle
SLECT * FROM Upload
```


----------



## Yaslaw (13. Oktober 2011)

Yaslaw hat gesagt.:


> Append-Query: Eine Abfrage zusammenstellen und dann den Type Append-Query Auswählen (Ist das Icon mit dem +!). Dann noch die Zeiltabelle Auswählen und bei jedem Feld das Zielfeld angeben.
> Dieses kann man dann speichern und aus dem Script aufrufen


 
Das ergibt dann ein SQL in der Art

```
INSERT INTO [myTabelle] ([Feld 1], [Feld 2])
SELECT [Feld A], [Feld B]
FROM Uploud
```


----------



## starbug (13. Oktober 2011)

He he da haste recht stimmt. Das finktioniert auch soweit ganz gut aber jetzt würde ich gerne noch Datensätze suchen und ersetzen. Also ich hab in meiner Access Tabelle z.B. Städtenamen. Ich würde gerne sowas machen wie z.B. suche alle Datensätze in denen Berlin steht und ersetze diese mit den neuen in denen Berlin steht also in etwa so:

```
INSERT INTO Tabelle
SELSCT * FROM Upload
WHERE Stadt = Berlin
```

Allerdings kommt dann bei mir immer ein Eingabefenster dem ich einen Parameter übergeben muss also in diesem Fall Berlin. Aber dann werden die neuen Datensätze nicht ersetzt sondern nur angefügt.


----------



## Yaslaw (13. Oktober 2011)

Klar, er kennt das Feld Berlin nicht Berlin muss in "" gesetzt werden.
Zudem ersetzt ein INSERT nie, der fügt hinzu. Ersetzen geht mit Update. Oder mit einem DELETE zuerst und dann ein INSERT.


----------



## starbug (13. Oktober 2011)

Hmm da haste recht. Hier ist mal mein Code zum anfügen:


```
Sub DatenAnfuegen()

    Dim sql As String
    
    sql = "INSERT INTO Tabelle SELECT * FROM Upload WHERE Stadt= 'Berlin'"
    DoCmd.RunSQL sql

End Sub
```

Das geht jetzt.

Hier der Update Code:


```
Sub Update()

    Dim sql As String
    sql = UPDATE TabelleSELECT * FROM Uplload WHERE Stadt= 'Berlin'"

End Sub
```

Hier kommt aber immer die Fehlermeldung: Fehler beim kompilieren. Erwartet Anweisungsende.

Kann ich den Code überhaupt so verwenden?


----------



## Yaslaw (13. Oktober 2011)

*item: *Musst du das SQL in "" setzen.

*item: * Muss nach Tabelle eh ein Leerzeichen, egal ob das dahinter völlig falsch ist oder nicht.

*item: *Bitte mach mir den Gefallen und informiere dich mal wie ein UPDATE-Query aussehen soll. Einfach den Befehl INSERT durch UPDATE ersetzen ist nicht. Access bietet dir sogar ein Query-Editor an mit dem du ein Updatequery zusammenklicken kannst und Anschliessend in der SQL-Ansicht den Code Rauskopieren kannst.


----------



## starbug (14. Oktober 2011)

Hallo,

klingt ganz gut was du mir das sagt. Hab jetzt aber noch ne andere Lösung angewendet.
Kann einfach eine bestimmte Tabelle löschen und die andere dann anfügen, das reicht für mich
schon aus


----------

