none
INSERT INTO Anweisung wirft Syntax-Fehler

    Frage

  • Hallo zusammen,

    ich heiße Mario und verzweifle an einer simplen INSERT INTO Anweisung! Ich greife über eine von mir geschriebene VB.NET Applikation auf eine Access 2007 Datenbank zu. Um Datensätze einzupflegen benutze ich i.d.R. folgende Methode:

       Sub insertData(ByVal sqlString As String)
       	Dim ConnString As String = _
        	"Provider=Microsoft.ACE.OLEDB.12.0;" & _
        	"Data Source = "C:\Fertigung2015.accdb"
            Dim con As New OleDb.OleDbConnection
            Try
                Dim anzahl As Integer = 0
                con.ConnectionString = ConnString
                con.Open()
                Using cmd As New OleDb.OleDbCommand(sqlString, con)
                    'System.Console.WriteLine(cmd.CommandText)
                    anzahl = cmd.ExecuteNonQuery()
                End Using
                MsgBox("Datensatz erfolgreich eingepflegt!", vbInformation)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()
            End Try
        End Sub
    

    Das funktionierte in der Vergangenheit auch prima. Nun habe ich in der Datenbank eine Tabelle 'TblAuftraege', welche sich strikt weigert Daten über die Methode anzunehmen. Übergebe ich der insertData-Methode z.B. den String

    "INSERT INTO TblAuftraege(AuftragsNr, Position, " & _
    "Jahr, Woche, KundenNr, ArtikelNr, Menge, Einheit, " & _
    "Bemerkung, Verpackung) VALUES (" & _
    "12345, 100, 2015, 15, 12345, 99999, 1500, 'kg', 'keine', 'Gitterbox');",

    wirft die Methode eine Exception "Syntaxfehler in der INSERT INTO-Anweisung.". Wenn ich denselben String in einem Modul der Datenbank mittels DoCmd.RunSql() nutze, wird der Datensatz fehlerfrei eingefügt, d.h. das der String kann keinen Syntax-Fehler enthalten. Ich stehe wirklich vor einem Rätsel! Kann mir jemand weiterhelfen?

    Gruß,

    Mario

    Dienstag, 9. Juni 2015 14:29

Antworten

  • Hallo Mario,

    ich würde erst einmal alle Spaltennamen in [...] packen. Oftmals kommt dieser Fehler, wenn man ungültige Tabellen- oder Spaltennamen angibt oder wenn man reservierte Worte wie bspw. Jahr, Woche, ggfs. auch Position als Objektname verwendet.

    Durch [...], also bspw. [Jahr], [Woche], ... kann man das umgehen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Micxas Mittwoch, 10. Juni 2015 12:30
    Dienstag, 9. Juni 2015 15:07
    Moderator
  • Am 09.06.2015 schrieb Micxas:

    "INSERT INTO TblAuftraege(AuftragsNr, Position, " & _
    "Jahr, Woche, KundenNr, ArtikelNr, Menge, Einheit, " & _
    "Bemerkung, Verpackung) VALUES (" & _
    "12345, 100, 2015, 15, 12345, 99999, 1500, 'kg', 'keine', 'Gitterbox');",

    Jahr und Woche sind keine Spaltennamen die man in einer Access-DB
    verwenden sollte. Details gibt es in der Access-FAQ:
    http://www.donkarl.com?FAQ1.5


    Servus
    Winfried

    Gruppenrichtlinien
    HowTos zum WSUS Package Publisher
    WSUS Package Publisher
    HowTos zum Local Update Publisher
    NNTP-Bridge für MS-Foren

    • Als Antwort markiert Micxas Mittwoch, 10. Juni 2015 12:29
    Dienstag, 9. Juni 2015 16:04
  • Hallo zusammen, 

    erst einmal vielen Dank für die Antworten und das ihr mich damit auf die richtige Spur gebracht habt.

    Es lag tatsächlich an der Spalte 'Position'. Nachdem ich sie umbenannt habe, konnte ich Datensätze einfügen. Unglaublich! ;)

    Gruß,

    Mario

    • Als Antwort markiert Micxas Mittwoch, 10. Juni 2015 12:29
    Mittwoch, 10. Juni 2015 12:28

Alle Antworten

  • Hallo Mario,
    den Insert den du zeigst sieht gut aus.

    Gehe bitte mal mit dem Debugger durch und prüfe, ob wirklich diese Query an die Datenbank geschickt wird.


    Viele Grüße Holger M. Rößler

    Dienstag, 9. Juni 2015 15:06
  • Hallo Mario,

    ich würde erst einmal alle Spaltennamen in [...] packen. Oftmals kommt dieser Fehler, wenn man ungültige Tabellen- oder Spaltennamen angibt oder wenn man reservierte Worte wie bspw. Jahr, Woche, ggfs. auch Position als Objektname verwendet.

    Durch [...], also bspw. [Jahr], [Woche], ... kann man das umgehen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Micxas Mittwoch, 10. Juni 2015 12:30
    Dienstag, 9. Juni 2015 15:07
    Moderator
  • Am 09.06.2015 schrieb Micxas:

    "INSERT INTO TblAuftraege(AuftragsNr, Position, " & _
    "Jahr, Woche, KundenNr, ArtikelNr, Menge, Einheit, " & _
    "Bemerkung, Verpackung) VALUES (" & _
    "12345, 100, 2015, 15, 12345, 99999, 1500, 'kg', 'keine', 'Gitterbox');",

    Jahr und Woche sind keine Spaltennamen die man in einer Access-DB
    verwenden sollte. Details gibt es in der Access-FAQ:
    http://www.donkarl.com?FAQ1.5


    Servus
    Winfried

    Gruppenrichtlinien
    HowTos zum WSUS Package Publisher
    WSUS Package Publisher
    HowTos zum Local Update Publisher
    NNTP-Bridge für MS-Foren

    • Als Antwort markiert Micxas Mittwoch, 10. Juni 2015 12:29
    Dienstag, 9. Juni 2015 16:04
  • Hallo zusammen, 

    erst einmal vielen Dank für die Antworten und das ihr mich damit auf die richtige Spur gebracht habt.

    Es lag tatsächlich an der Spalte 'Position'. Nachdem ich sie umbenannt habe, konnte ich Datensätze einfügen. Unglaublich! ;)

    Gruß,

    Mario

    • Als Antwort markiert Micxas Mittwoch, 10. Juni 2015 12:29
    Mittwoch, 10. Juni 2015 12:28