Clever-Excel-Forum

Normale Version: Update von Excel nach Access nur beim ersten UPDATE
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community,

ich möchte via VBA Daten aus Excel in eine Access Datenbank schreiben.

Code:
Sub DatenAktualisieren()

Dim rngZ As Range
Dim SQL As String
Dim DatenBankPfad As String
DatenBankPfad = "Y:\data.accdb"
Dim db As dao.Database

Set db = OpenDatabase(DatenBankPfad)

For Each rngZ In Range("EingabeAbfrage").SpecialCells(xlCellTypeVisible).Rows
  
    SQL = "UPDATE data SET "
    SQL = SQL & "external_effort=" & IstLeer(Cells(rngZ.Cells(1).Row, 7).Value) & "," 'Personal Aufwand / external_effort
    SQL = SQL & "external_cost=" & IstLeer(Cells(rngZ.Cells(1).Row, 8).Value) & "," 'Personal Kosten / external_cost
    SQL = SQL & "travelexternal_effort=" & IstLeer(Cells(rngZ.Cells(1).Row, 9).Value) & "," 'Externe Reiseaufwand / travelexternal_effort
    SQL = SQL & "travelexternal_cost=" & IstLeer(Cells(rngZ.Cells(1).Row, 10).Value) & "," 'Externe Reisekosten / travelexternal_cost
    SQL = SQL & "travel_cost=" & IstLeer(Cells(rngZ.Cells(1).Row, 11).Value) & "," 'Reisespesen / travel_cost
    SQL = SQL & "license_cost=" & IstLeer(Cells(rngZ.Cells(1).Row, 12).Value) & "," 'Software / license_cost
    SQL = SQL & "hardware_cost=" & IstLeer(Cells(rngZ.Cells(1).Row, 13).Value) & ","
    SQL = SQL & "comment=""" & Cells(rngZ.Cells(1).Row, 14).Value & """ " 'Kommentar / comment
    SQL = SQL & "WHERE "
    SQL = SQL & "projectphase=" & Cells(rngZ.Cells(1).Row, 3).Value
    SQL = SQL & " AND vendor=""" & Cells(rngZ.Cells(1).Row, 4).Value & """"
    SQL = SQL & " AND year_month=#" & Format(Cells(rngZ.Cells(1).Row, 6).Value, "dd-mm-yyyy") & "#"
    SQL = SQL & " AND plan_actual=""" & Cells(rngZ.Cells(1).Row, 5).Value & """ ;"
    MsgBox SQL

    db.Execute SQL
    If dao.Errors.Count > 0 Then
        temp = MsgBox("Bei der Speicherung in die MS-Access Datenbank ist ein Fehler aufgetreten", vbCritical)
        End
    End If
Next

temp = MsgBox("Speicherung erfolgreich", vbInformation)

db.Close
Set db = Nothing

End Sub

Das Zusammenfügen des UPDATE Strings funktioniert einwandfrei, allerdings werden nur beim ersten Durchlauf der Each Next Schleife die Daten in MS-Access tatsächlich geändert. Ab dem zweiten Durchlauf wird nichts mehr geändert.
Habe ich hier irgendeine Codezeile vergessen?

Vielen Dank!
   Michael
Hallo Michael,

mal ungetestet, füge vor dem Next

Code:
SQL = ""

ein.
Hallo,
danke, aber das Verhalten bleibt gleich.
Hallöchen,

ich denke, Du hast nix vergessen. Die Frage ist, ob bei den weiteren Durchläufen etwas zu ändern ist. Gib dazu mal Deinen SQL-String aus und

- Vergleiche den ersten mit dem zweiten, würden dadurch andere Datensätze geändert oder die gleichen

- Prüfe die Bedingungen, eventuell kannst Du im Access oder Excel mal mit einem SELECT * FROM ... WHERE ... prüfen, was mit Deinen Bedingungen angezeigt wird.