小编典典

语法(缺少运算符)在VBA中使用RunSQL将字符串内容保存到变量时出错

sql

我正在尝试从文本框中获取选定的文本,并将字符串保存到表中。这里只有一个行的表,和其他变量(SelectionStartSelectionLength),都能够保存到该表没有问题。

当它到达第三个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

我不确定我在这里缺少什么,因为前两个变量能够更新表而不会出现问题


阅读 200

收藏
2021-04-14

共1个答案

小编典典

使用一个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)), "'", "''")

另一种方法是使用嵌入式参数。TempVars是在SQL字符串中嵌入参数的一种方法。
另一种方法是打开一个记录集对象,然后使用“编辑”模式将字段设置为新值。

2021-04-14