Beim Importieren einer Excel-Tabelle tritt die Fehlermeldung "Syntaxfehler (Komma) in Abfrageausdruck [DlrNo] ... , [Country] ... , [Country_Id] ... und [Contact_VG_Importeur] ... " auf. Ich find in meinem Code leider keine Syntaxfehler. Bei allen anderen Feldern der Tabelle funktioniert der Code anscheinend.
Hier ist mein Code:
Private Sub Import_Ansprechpartner_NSC_Importeure()
Const MsgBoxTitle As String = "Ansprechpartner NSC Importeure Import"
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSql As String
Dim intRowsToImport As Integer
Dim intRowsUpdated As Integer
' set database
Set db = CurrentDb
' update records which exists in table "Dealers"
' that records which do not exist, cannot be imported
Set rs = db.OpenRecordset("SELECT * FROM Import_Ansprechpartner_NSC_Importeure WHERE DlrNo IS NOT NULL AND CStr(Format(DlrNo, ""00000"")) IN (SELECT DlrNo FROM Dealers)")
rs.MoveLast
intRowsToImport = rs.RecordCount
rs.MoveFirst
intRowsUpdated = 0
While Not rs.EOF
strSql = "UPDATE Dealers" & vbCrLf & "SET [HC_Percent] = "
If Nz(rs.Fields("HC").Value, "") = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & rs.Fields("HC").Value / 100
End If
strSql = strSql & ", " & vbCrLf & "[Region] = "
If Nz(rs.Fields("Region").Value, "") = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("Region").Value) & "'"
End If
strSql = strSql & ", " & vbCrLf & "[Contact_Salutation] = "
If Nz(rs.Fields("Salutation").Value, "") = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("Salutation").Value) & "'"
End If
strSql = strSql & ", " & vbCrLf & "[Status] = "
If Nz(rs.Fields("Status").Value, "") = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("Status").Value) & "'"
End If
strSql = strSql & ", " & vbCrLf & "[Contact_Forename] = "
If Nz(rs.Fields("Forename").Value, "") = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("Forename").Value) & "'"
End If
strSql = strSql & ", " & vbCrLf & "[Contact_Surname] = "
If Nz(rs.Fields("Surname").Value, "") = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("Surname").Value) & "'"
End If
strSql = strSql & ", " & vbCrLf & "[Contact_E_Mail] = "
If Nz(rs.Fields("Email").Value, "") = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("Email").Value) & "'"
End If
strSql = strSql & vbCrLf & "WHERE [DlrNo] LIKE "
If Nz(rs.Fields("DlrNo").Value) = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & Format(rs.Fields("DlrNo").Value, "00000") & "'"
End If
strSql = strSql & ", " & vbCrLf & "[Country] = "
If Nz(rs.Fields("Country").Value) = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("Country").Value) & "'"
End If
strSql = strSql & ", " & vbCrLf & "[Country_Id] = "
If Nz(rs.Fields("Country_Id").Value) = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("Country_Id").Value) & "'"
End If
strSql = strSql & ", " & vbCrLf & "[Contact_VG_Importeur] = "
If Nz(rs.Fields("VG_Importeur").Value) = "" Then
strSql = strSql & "NULL"
Else
strSql = strSql & "'" & StringToSql(rs.Fields("VG_Importeur").Value) & "'"
End If
Debug.Print strSql
db.Execute strSql
If db.RecordsAffected = 1 Then
intRowsUpdated = intRowsUpdated + 1
End If
rs.MoveNext
Wend
' user message
If intRowsToImport = intRowsUpdated Then
MsgBox "All " & intRowsUpdated & " records have been updated.", vbOKOnly, MsgBoxTitle
ElseIf intRowsToImport > intRowsUpdated Then
MsgBox "Not all dealer data has been imported.", vbOKOnly + vbExclamation, MsgBoxTitle
Else
MsgBox "The import file contains different rows for the same dealer-no." & vbCrLf & _
"Please delete the unwanted row(s).", vbOKOnly + vbInformation, MsgBoxTitle
End If
Set db = Nothing
Set rs = Nothing
End Sub
Kann mir hierbei jmd helfen? Wäre unheimlich dankbar.
Viele Grüße Hanny
Hi,
du gibst den generierten Code mit Debug.Print ins Direktfenster aus, dort kannst du ihn dir anschauen um den Fehler zu entdecken oder du kannst den Code hier posten.
Vermutlich gibt es ein Dezimalfeld mit Nachkommastellen unter den Datenfeldern. Welches das sein könnte, kannst du der Tabellendefinition entnehmen. Auch sollte der komplette Wortlaut der Fehlermeldung einen Hinweis auf die Fehlerursache geben können.
BTW:
Sorry, aber in einen per VBA zur anschließenden Ausführung generierten SQL-String Zeilenumbrüche einzufügen ist ziemlich sinnfrei. ;-)
Ebenso macht der Einsatz von LIKE als Vergleichsoperator ohne den Einsatz von Suchmustern keinen Sinn.
PS:
Warum hast du diesen umständlichen Weg gewählt und erstellst eigentlich nicht gleich eine Aktualisierungsabfrage für die ganze Tabelle?
Hier steckt das Problem:
rs.Fields("HC").Value / 100
das erzeuge dann je nach Wert eine Zahl mit einem Komma und das geht in SQL gar nicht.
das Komma muss in einen Punkt umgewandelt werden.
LG Markus
Zitatdas Komma muss in einen Punkt umgewandelt werden.
und dazu könnte man die Str-Funktion einsetzen.