Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Hanny1609 am Juli 31, 2015, 11:09:20

Titel: Syntaxfehler (Komma) in Abfrageausdruck beim Importieren einer Excel-Tbl
Beitrag von: Hanny1609 am Juli 31, 2015, 11:09:20
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
Titel: Re: Syntaxfehler (Komma) in Abfrageausdruck beim Importieren einer Excel-Tbl
Beitrag von: MaggieMay am Juli 31, 2015, 11:43:43
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?
Titel: Re: Syntaxfehler (Komma) in Abfrageausdruck beim Importieren einer Excel-Tbl
Beitrag von: markusxy am August 04, 2015, 23:19:23
 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
Titel: Re: Syntaxfehler (Komma) in Abfrageausdruck beim Importieren einer Excel-Tbl
Beitrag von: MaggieMay am August 04, 2015, 23:37:35
Zitatdas Komma muss in einen Punkt umgewandelt werden.
und dazu könnte man die Str-Funktion einsetzen.