2016-05-06 10 views
0

Wenn ich Daten aus einem Formular in eine Tabelle in MS Access 2010 mit dem folgenden Code einfügen möchte, erhalte ich eine Laufzeit Fehler '3075'. Es heißt: Syntaxfehler in der Abfrage '123.11.1', obwohl das Textfeld "AbsErst" "123.11.11" enthielt. Wenn ich etwas ohne Punkte oder mit nur einem Punkt in "AbsErst" eingebe, läuft der Code einwandfrei und fügt die Daten in die Tabelle ein. Ich suchte nach anderen Fragen mit dem gleichen Fehlercode, fand aber dort nicht das gleiche Problem. für Ihre Antworten und Anregungen Wir freuen uns HenrikEin Zeichen wird abgeschnitten, wenn Daten aus einem Textfeld in einem Formular mit zwei Punkten in eine Tabelle eingefügt werden müssen

Private Sub cmdStore_Click() 
    CurrentDb.Execute "INSERT INTO tblAbschnitt(INST_F,GDE_F,ABT_F,RW_F,Erst,Stand) " & " VALUES(" & _ 
          Me.cboInst & "," & Me.cboGem & "," & Me.cboAbt & "," & Me.cboRW & "," & Me.AbsErst & "," & Me.absStan & ")"  
End Sub 
+0

Und achten Sie auf SQL-Injektion. Lesen Sie http://stackoverflow.com/questions/512174/non-web-sql-injection und http://stackoverflow.com/a/36454773/3820271 – Andre

Antwort

1

Wenn Sie Text in eine Tabelle eingefügt werden soll (und ‚123.11.1‘ ist Text), dann haben Sie es mit einfachen Anführungszeichen in der einzuschließen SQL-Anweisung

CurrentDb.Execute "INSERT INTO tblAbschnitt" & _ 
    "(INST_F,GDE_F,ABT_F,RW_F,Erst,Stand) " & _ 
    " VALUES(" & Me.cboInst & _ 
     "," & Me.cboGem & _ 
     "," & Me.cboAbt & _ 
     "," & Me.cboRW & _ 
     ",'" & Me.AbsErst & "'" & _ 
     "," & Me.absStan & _ 
     ")" 

das nicht nur mit Me.AbsErst sondern mit allen Textspalten. Sie müssen für alle diese Spalten sicherstellen, dass der einzufügende Wert selbst keine einzelnen Anführungszeichen enthält. Sie müssten von einem anderen einfachen Zitat entkleidet werden. (Stichwort: SQL Injection)

All dies wahrscheinlich viel leichter getan werden könnte und sicherer, wenn Sie eine INSERT Aussage aber so etwas wie dieses nicht verwenden:

With CurrentDb.OpenRecordset("tblAbschnitt") 
    .AddNew 
    .Fields("INST_F") = Me.cboInst 
    .Fields("GDE_F") = Me.cboGem 
    .Fields("ABT_F") = Me.cboAbt 
    .Fields("RW_F") = Me.cboRW 
    .Fields("Erst") = Me.AbsErst 
    .Fields("Stand") = Me.absStan 
    .Update 
End With 

Auf diese Weise alle Entkommen und einfache Anführungszeichen behandelt werden automatisch.