1.5k Aufrufe
Gefragt in Datenbanken von
Ich habe ein Makro in Excel erstellt um Daten in Access zu übertragen/aktualisieren. Die
Routine läuft fehlerfrei durch. Der SQL-String zeigt die gültige Information, aber der die
Access-DB wird nicht aktualisiert.

Hat jemand eine Idee, woran das leigen kann?

Mein Makro sieht so aus:

Sub Preise()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer, lastRow As Long
Dim sqlcommand As String
Dim strText As String

On Error GoTo Fehler
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0" _
& ";Data Source
=C:\Users\richardlinssen\Documents\Sattler\Zeiten_Datenbank-1.accdb" _
& ";Mode=ReadWrite;"
cn.Open
ThisWorkbook.Worksheets("SOL").Activate
With ThisWorkbook.ActiveSheet
lastRow = .Cells(.Rows.Count, 4).End(xlUp).Row
For i = 2 To lastRow

sqlcommand = " UPDATE Zeiten SET Listenpreis = " & Cells(i, 5) & _
" WHERE Artikelnummer = '" & Cells(i, 4) & "'"

Set rs = cn.Execute(sqlcommand)

Next i
End With
' rs.Close
cn.Close

strText = " Preise aktualisiert"
MsgBox strText

Exit Sub
Fehler:
MsgBox (Err.Description)
End Sub

Leider kann ich mich nicht zurückmelden, da dieses Forum im Moment anscheinend ein
Problem hat Passwörter für neue Registrierungen zu versenden.

Vielleicht kann mir trotzdem jemand helfen.

4 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo RichardL1,

Leider kann ich das Makro nicht testen (meine Office Version = 2003), versuchs eventuell alternativ über das Kontextmenü "Tabellen verknüpfen...".

Gruß

Paul1
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Richard,

beim Lesen ist mir aufgefallen, dass innerhalb des WITH-Blockes bei
sqlcommand = " UPDATE Zeiten SET Listenpreis = " & Cells(i, 5) & _
" WHERE Artikelnummer = '" & Cells(i, 4) & "'"

die Punkte vor Cells fehlen.

Also vielleicht einfach mal mit

sqlcommand = " UPDATE Zeiten SET Listenpreis = " & .Cells(i, 5) & _
" WHERE Artikelnummer = '" & .Cells(i, 4) & "'"


probieren.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo Richard,

- kann es sein, dass Cells(i,4) die Artikelnummer nicht im gewünschten Format zurückgibt? (z.B. 1 anstatt 00001) In diesem Fall müsstest du noch eine Format-Funktion drumrum schreiben, sonst wird natürlich kein gewünschter Datensatz gefunden.

- Funktioniert denn die Abfrage, wenn du sie direkt in Access mit Beispielwerten startest? Bei mir schreibt Access vor die Feldbezeichnungen nochmal den Tabellennamen durch . getrennt
In deinem Fall also:

sqlcommand = " UPDATE Zeiten SET Zeiten.Listenpreis = " _
& Cells(i, 5) & " WHERE Zeiten.Artikelnummer = '" & Cells(i, 4) & "'"

Weiß aber nicht ob das den Unterschied macht.

Grüße
Mr. K.
0 Punkte
Beantwortet von
Übrigens setzt Access am Ende jeder Abfrage ein Semikolon.
Ersetze daher "'" durch "';"
...