Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Daten per VBA in SQL Datenbank

Daten per VBA in SQL Datenbank
Jürgen
Hallo zusammen,
Habe hier ein Makro, welches Daten aus den Spalten A, B und C eines Tabellenblattes in eine SQL Datenbank schreibt. Dieses funktioniert auch tadellos. Nun würde ich aber gerne vor dem INSERT prüfen, ob der jeweilige Datensatz bereits in der Datenbank vorhanden ist, da er ansonsten immer wieder reingeschrieben wird sobald das Makro gestartet wird.
Hat jemand eine Idee wie man das Lösen könnte?
Vielen Dank!
Gruß
Jürgen
P.S: Anbei der Code

Sub Insert()
Dim conn As New Connection
Dim rec As New Recordset
Dim comm As New Command
Dim ws As Worksheet
Bereich = "Test"
Set ws = ThisWorkbook.Worksheets("Tabelle1")
conn.Open "driver={SQL Server};" & _
"server=PCJV1;database=Rupp;"
Set comm.ActiveConnection = conn
For Zeile = 2 To Range("A27").End(xlUp).Row
SQLString = "INSERT INTO Aussenbestand (" _
& "Artikel, Lager, Bestand)" _
& " VALUES " _
& "('" & Range("A" & Zeile).Value & "'," _
& " '" & Range("B" & Zeile).Value & "'," _
& " '" & Range("C" & Zeile).Value & "')"
Debug.Print SQLString
comm.CommandText = SQLString
rec.Open comm
Next Zeile
conn.Close
Meldung = MsgBox("INSERT durchgeführt!", vbOKOnly)
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Daten per VBA in SQL Datenbank
06.11.2009 10:38:12
Born
Hallo Jürgen,
auf Basis welcher Kriterien soll denn die Prüfung erfolgen? Gibt es einen Index? Dann könntest Du vor dem Insert über eine SQL-Abfrage prüfen, ob dieser Index bereits exisitert und in diesem Fall Insert-Anweisung überspringen.
Ich hoffe, dies hilft Dir schon weiter.
Gruß,
M. Born
Anzeige
AW: Daten per VBA in SQL Datenbank
06.11.2009 10:42:58
Jürgen
Hallo Born,
Index habe ich keinen, könnte ich aber noch in die Datenbank einfügen.
Deine Idee ist gut, aber ich weiß nicht wie diese Prüfung im Code aussehen könnte.
Kannst du mir einen Codeschnipsel geben welcher das greifbarer macht?
Gruß
Jürgen
AW: Daten per VBA in SQL Datenbank
06.11.2009 11:45:27
Born
Hallo Jürgen,
irgendwas in der Art von "Select Indexfeld from Tabellenname where Indexfeld = Wert"
Das Ergebnis der Abfrage muss dann in VBA mit dem jeweiligen Wert abgeglichen werden, bevor die Insert-Anweisung ausgeführt wird. Mein SQL ist nicht allzu gut, als dass ich Dir den vollständigen Code liefern könnte, aber zumidest der Weg sollte jetzt klar sein.
Gruß,
M. Born
Anzeige
AW: Daten per VBA in SQL Datenbank
06.11.2009 12:32:00
Jürgen
Hallo Born,
Danke! Der Weg ist klar.
Ev. hat ja noch jemand eine Idee wie der Code dazu aussehen könnte....?
Vielen Dank!
Jürgen
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Daten per VBA in SQL Datenbank übertragen


Schritt-für-Schritt-Anleitung

  1. Datenbankverbindung herstellen: Zuerst musst Du eine Verbindung zu Deiner SQL-Datenbank herstellen. Verwende dafür den folgenden Code:

    Dim conn As New Connection
    conn.Open "driver={SQL Server};server=DEIN_SERVER;database=DEINE_DATENBANK;"
  2. Daten aus Excel lesen: Definiere den Bereich, aus dem die Daten gelesen werden sollen. Zum Beispiel:

    Set ws = ThisWorkbook.Worksheets("Tabelle1")
  3. Daten prüfen und einfügen: Vor dem Einfügen der Daten musst Du sicherstellen, dass der Datensatz nicht bereits vorhanden ist. Verwende dazu eine SQL-Abfrage:

    Dim sqlCheck As String
    sqlCheck = "SELECT COUNT(*) FROM Aussenbestand WHERE Artikel = '" & Range("A" & Zeile).Value & "'"

    Wenn der Datensatz nicht vorhanden ist, kannst Du den INSERT-Befehl ausführen:

    If rec.Fields(0).Value = 0 Then
       SQLString = "INSERT INTO Aussenbestand (Artikel, Lager, Bestand) VALUES ('" & Range("A" & Zeile).Value & "', '" & Range("B" & Zeile).Value & "', '" & Range("C" & Zeile).Value & "')"
       comm.CommandText = SQLString
       comm.Execute
    End If
  4. Verbindung schließen: Am Ende solltest Du die Verbindung zur Datenbank schließen:

    conn.Close

Häufige Fehler und Lösungen

  • Fehler: Verbindung zur SQL-Datenbank kann nicht hergestellt werden
    Lösung: Überprüfe, ob Dein SQL Server läuft und die Verbindungsdaten korrekt sind.

  • Fehler: Datensatz kann nicht eingefügt werden
    Lösung: Stelle sicher, dass die SQL-Abfrage zur Überprüfung des Datensatzes korrekt ist.

  • Fehler: VBA-Fehlermeldung
    Lösung: Prüfe die Syntax Deiner SQL-Befehle und stelle sicher, dass alle Variablen korrekt deklariert sind.


Alternative Methoden

Eine alternative Methode zur Datenübertragung ist die Verwendung von Excel Power Query. Hierbei kannst Du Daten aus Excel einfach in eine SQL-Datenbank importieren, ohne viel VBA-Code schreiben zu müssen. Gehe dazu auf Daten > Abrufen und transformieren > Aus Datenbank.


Praktische Beispiele

Beispiel 1: Daten prüfen und einfügen
Hier ist ein vollständiges Beispiel, wie Du Daten aus Excel in eine SQL-Datenbank einfügen kannst, während Du prüfst, ob der Datensatz bereits vorhanden ist:

Sub InsertData()
    Dim conn As New Connection
    Dim rec As New Recordset
    Dim comm As New Command
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Tabelle1")
    conn.Open "driver={SQL Server};server=DEIN_SERVER;database=DEINE_DATENBANK;"

    For Zeile = 2 To ws.Range("A27").End(xlUp).Row
        Dim sqlCheck As String
        sqlCheck = "SELECT COUNT(*) FROM Aussenbestand WHERE Artikel = '" & ws.Range("A" & Zeile).Value & "'"
        rec.Open sqlCheck, conn

        If rec.Fields(0).Value = 0 Then
            Dim SQLString As String
            SQLString = "INSERT INTO Aussenbestand (Artikel, Lager, Bestand) VALUES ('" & ws.Range("A" & Zeile).Value & "', '" & ws.Range("B" & Zeile).Value & "', '" & ws.Range("C" & Zeile).Value & "')"
            comm.CommandText = SQLString
            comm.Execute
        End If
        rec.Close
    Next Zeile
    conn.Close
End Sub

Tipps für Profis

  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um Probleme bei der Verbindung oder der SQL-Abfrage zu erkennen.

  • Optimierung der SQL-Abfragen: Verwende Indizes in Deiner SQL-Datenbank, um die Leistung der Abfragen zu verbessern.

  • Modularer Code: Halte Deinen Code modular, indem Du wiederverwendbare Funktionen erstellst, z.B. eine Funktion, um die Verbindung zur Datenbank herzustellen.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Datensätze gleichzeitig einfügen?
Du kannst eine Schleife verwenden, um mehrere Datensätze nacheinander zu prüfen und einzufügen.

2. Was, wenn ich eine Fehlermeldung erhalte?
Überprüfe die SQL-Abfragen auf Syntaxfehler und stelle sicher, dass die Datenbankverbindung korrekt ist.

3. Kann ich auch Daten aus einer SQL-Datenbank in Excel abrufen?
Ja, mit VBA kannst Du auch SQL-Abfragen durchführen, um Daten aus einer SQL-Datenbank in Excel zu importieren. Verwende dazu SELECT-Anfragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige