当必须将包含两个点的表单中的文本字段中的数据插入 table 时,字符被截断

A character is cut off when data from a textfield in a form containing two dots has to be inserted into a table

当我想使用以下代码将表单中的数据插入 MS Access 2010 中的 table 时,我收到运行时错误“3075”。 它说:即使文本字段 "AbsErst" 包含“123.11.11”,查询表达式“123.11.1”中的语法错误。当我在 "AbsErst" 中输入不带点或只有一个点的内容时,代码运行完美并将数据插入 table。 我用相同的错误代码寻找其他问题,但没有找到相同的问题。 期待您的答案或想法 亨里克

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

如果要将文本插入 table(和 '123.11.1' 文本),则必须在SQL 声明。

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 & _
         ")"

不仅对Me.AbsErst而且对所有文本列都这样做。您必须确保对于所有这些列,要插入的值本身不包含任何单引号。他们需要用另一个单引号转义。 (提示:SQL 注入)

如果您不使用 INSERT 语句而是像这样:

,那么所有这一切可能会更容易和更安全地完成
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

这样所有的转义和单引号都会自动处理。