2017-06-05 4 views
0

Ich bekomme einen Fehler mit dieser INSERT INTO, die ich einfach nicht herausfinden kann. Der Code durchläuft ein Dao-Recordset, um nur bestimmte Datensätze an eine Tabelle anzufügen.Problem mit ACCESS VBA INSERT IN

Dim maxDate As Variant 

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Dim sqlinsert As String 

maxDate = DMax("[Eff Date]", "400_CF_BREAK_LOG") 
Set db = CurrentDb 


Set rs = db.OpenRecordset("860_APPEND_DIFFERENCES") 
If Not rs.BOF Then 
    'populate the table 
    rs.MoveFirst 
    Do 
     If (rs![Eff Date] > maxDate Or IsNull(maxDate)) Then 
      sqlinsert = "INSERT INTO 400_CF_BREAK_LOG (Eff Date, PrimarySecurity ID Number, CUSIP(Aladdin ID), IsrName, Asset Type, Metlife Port Code, Business Unit, Principal Difference, Total PAM Principal, Total Aladdin Principal,Income Difference, Total PAM Interest,Total Aladdin Interest,Total CF Difference,Total PAM CF,PAM Coupon)" & _ 
      " VALUES ('" & rs("Eff Date") & "', '" & rs("PrimarySecurity ID Number") & "', '" & rs("CUSIP(Aladdin ID)") & "', '" & rs("IsrName") & "', '" & rs("Asset Type") & "', '" & rs("Metlife Port Code") & "', '" & rs("Business Unit") & "', '" & rs("Principal Difference") & "', '" & rs("Total PAM Principal") & "', '" & rs("Total Aladdin Principal") & "','" & rs("Income Difference") & "', '" & rs("Total PAM Interest") & "', '" & rs("Total Aladdin Interest") & "', '" & rs("Total CF Difference") & "', '" & rs("Total PAM CF") & "', '" & rs("PAM Coupon") & "') " 
      DoCmd.RunSQL (sqlinsert) 
     End If 
     rs.MoveNext 
    Loop Until rs.EOF 
End If 

Ich bekomme Syntaxfehler in INSERT INTO-Anweisung, aber ich habe es ein paar Mal überprüft.

BEARBEITEN - Erläuterung. Tags

+3

Sie schräges Leerzeichen, müssen Sie 'verwenden [Eff Datum]' –

+1

Wie @Nathan_Sav sagt, nur gibt es viel mehr Namen mit Leerzeichen in der Abfrage als '[Eff Datum]' allein, sie alle müssen in eckigen Klammern stehen. Beachten Sie auch die Variablentypen. Wenn [Datum] ein Datum und keine Zeichenfolge ist, behandeln Sie es falsch. Beachten Sie außerdem, dass der Code, den Sie oben freigegeben haben, vollständig durch eine einzige Append-Abfrage ersetzt werden kann und viel effizienter und einfacher zu debuggen ist. –

+0

@ErikvonAsmuth Leider kann ich die Append-Abfrage nicht ausführen, da dies einen Batch von Datensätzen hinzufügt, während ich jeden Datensatz überprüfen und dann hinzufügen muss. – FamousFrik

Antwort

1

Namen mit Leerzeichen oder Satzzeichen/Sonderzeichen (nur Ausnahme Unterstrich) müssen in [] eingeschlossen sein. Am besten vermeiden Sie diese in der Namenskonvention. Verweise auf die Recordset-Felder mit Anführungszeichen sollten jedoch funktionieren, ohne in [] einzuschließen. Eine alternative Syntax, die [] erfordert, lautet: rs![Eff Date].

sqlinsert = "INSERT INTO 400_CF_BREAK_LOG ([Eff Date], [PrimarySecurity ID Number], 
[CUSIP(Aladdin ID)], IsrName, [Asset Type], [Metlife Port Code], [Business Unit], 
[Principal Difference], [Total PAM Principal], [Total Aladdin Principal], 
[Income Difference], [Total PAM Interest], [Total Aladdin Interest], [Total CF Difference], 
[Total PAM CF], [PAM Coupon])" & _ 
" VALUES ('" & rs("Eff Date") & "', '" & rs("PrimarySecurity ID Number") & "', '" & 
rs("CUSIP(Aladdin ID)") & "', '" & rs("IsrName") & "', '" & rs("Asset Type") & "', '" & 
rs("Metlife Port Code") & "', '" & rs("Business Unit") & "', '" & rs("Principal Difference") & "', '" & 
rs("Total PAM Principal") & "', '" & rs("Total Aladdin Principal") & "','" & 
rs("Income Difference") & "', '" & rs("Total PAM Interest") & "', '" & 
rs("Total Aladdin Interest") & "', '" & rs("Total CF Difference") & "', '" & rs("Total PAM CF") & "', '" & 
rs("PAM Coupon") & "') " 
+0

danke. Leider verwende ich ein Legacy-System, das nicht von mir selbst entworfen wurde. – FamousFrik

+0

Außerdem habe ich gerade die Verwendung von Apostroph-Trennzeichen für Datums-/Zeit- und Zahlenfelder bemerkt. Das Apostroph soll nur für Textfelder sein. Die # ist für Datum/Uhrzeit und Nummer Typ erfordert kein Trennzeichen. Sind alle Felder vom Typ Text? – June7

+0

Nein, könnten Sie ein Beispiel geben? Eff-Daten sind ein Datum. – FamousFrik