我正在尝试从文本框中获取选定的文本,并将字符串保存到表中。这里只有一个行的表,和其他变量(SelectionStart,SelectionLength),都能够保存到该表没有问题。
SelectionStart
SelectionLength
当它到达第三个RunSQL命令时,出现错误:
运行时错误“ 3075”:查询表达式中的语法错误(缺少运算符)
并以所选文本结尾。
Sub ArticleTextContentBox_Click() Dim SelectionStart As String Dim SelectionLength As String Dim SelectionText As String SelectionStart = [Forms]![1CodingArticlesForm]![ArticleTextContentBox].SelStart + 1 SelectionLength = [Forms]![1CodingArticlesForm]![ArticleTextContentBox].SelLength SelectionText = Mid([Forms]![1CodingArticlesForm]![ArticleTextContentBox], SelectionStart, SelectionLength) 'Runs successfully, to show that SelectionText variable works correctly MsgBox SelectionText DoCmd.RunSQL "UPDATE TEMP_StringPosition SET TEMP_StringPosition.StartLocation = " & SelectionStart & ";" DoCmd.RunSQL "UPDATE TEMP_StringPosition SET TEMP_StringPosition.StringLength = " & SelectionLength & ";" 'This is the line that causes the error: DoCmd.RunSQL "UPDATE TEMP_StringPosition SET TEMP_StringPosition.ExtractedTextChunk = " & SelectionText & ";" End Sub
我不确定我在这里缺少什么,因为前两个变量能够更新表而不会出现问题
使用一个UPDATE语句保存所需的字段数。如果field是文本类型,请使用撇号定界符(对于日期/时间,请使用#)。我更喜欢CurrentDb.Execute来消除弹出警告。
CurrentDb.Execute "UPDATE TEMP_StringPosition SET StartLocation = " & SelectionStart & _ ", StringLength = " & SelectionLength & ", ExtractedTextChunk = '" & SelectionText & "'"
SQL将引号和撇号视为特殊字符。如果数据包含引号或撇号字符,则处理方法之一是通过将字符加倍来“转义”字符,以便SQL将其视为普通文本。使用Replace()函数: Replace(Replace(SelectionText, """", """" & """"), "'", "''") 或者如果更容易遵循: Replace(Replace(SelectionText, Chr(34), Chr(34) & Chr(34)), "'", "''")
Replace(Replace(SelectionText, """", """" & """"), "'", "''")
Replace(Replace(SelectionText, Chr(34), Chr(34) & Chr(34)), "'", "''")
另一种方法是使用嵌入式参数。TempVars是在SQL字符串中嵌入参数的一种方法。 另一种方法是打开一个记录集对象,然后使用“编辑”模式将字段设置为新值。