当前位置: 首页 > 面试题库 >

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

张高澹
2023-03-14
问题内容

我正在尝试从文本框中获取选定的文本,并将字符串保存到表中。这里只有一个行的表,和其他变量(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

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


问题答案:

使用一个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字符串中嵌入参数的一种方法。复习如何在Microsoft
Access的不同上下文中在VBA中使用参数?

另一种方法是打开一个记录集对象,然后使用“编辑”模式将字段设置为新值。



 类似资料:
  • 在Julia0.4中,我有一个名为variablex的变量,其中

  • 本文向大家介绍使用VBA字符串常量,包括了使用VBA字符串常量的使用技巧和注意事项,需要的朋友参考一下 示例 VBA为特殊字符定义了许多字符串常量,例如: vbCr:回车符,与C样式语言中的“ \ r”相同。 vbLf:换行符'与C样式语言中的“ \ n”相同。 vbCrLf:回车和换行(Windows中的换行符) vbTab:制表符 vbNullString:空字符串,例如“” 您可以将这些常量

  • 我正在使用PHP执行一个带有西班牙语、英语和日语字符的MySQL更新语句。 但我无法将日语字符保存到数据库中。我应该如何进行? 数据库具有utf8\u常规\u ci排序规则。 使用我可以将撇号保存到数据库中。 使用我可以将西班牙语字符保存到数据库中。

  • 我最近读了很多关于字符串内存分配的文章,但找不到任何细节,如果在Java8中情况相同的话。 在Java8中,像这样的字符串会使用多少内存空间?我使用64位版本。

  • 因此,当我发出get()时,我得到的是一个dict,dict的“Body”成员是“StreamingBody”类型,并且根据如何使用bot3将S3对象保存到文件,我看到了如何从这个流中分块读取,但我想知道是否有更简单的方法,la boto。

  • 主要内容:算术操作符,比较运算符,逻辑运算符,连接操作符运算符可以用一个简单的表达式定义,例如:等于。这里,和称为操作数,被称为运算符。VBA支持以下类型的运算符 - 算术运算符 比较运算符 逻辑(或关系)运算符 连接运算符 算术操作符 以下是VBA支持算术运算符。 假设变量,变量,那么 - 运算符 描述 示例 两个操作数相加 两个操作数相减 两个操作数相乘 两个操作数相除 模运算符,整数除法后的余数 指数运算符 有关如何使用,请参考算术运算符示例。