在 Access 中保留单引号
Posted
技术标签:
【中文标题】在 Access 中保留单引号【英文标题】:Preserving Single Quotes in Access 【发布时间】:2013-04-02 19:09:54 【问题描述】:我在 Access 2010 中创建了一个用于将数据插入现有表的表单。该表包含一个关键字字段、源组合框和一个代码文本框,我在其中编写要插入的数据,并且有一个用于执行查询的按钮。表格的代码是:
Private Sub cmd_go_Click()
Dim insertstring As String
insertstring = "INSERT INTO KWTable (KW, Source, Code) VALUES('" & text_key.Value & "','" & combo_source.Value & "','" & txt_code.Value & "');"
DoCmd.RunSQL insertstring
End Sub
代码很简单,它将数据输入到表中,以便我可以参考它以备将来使用。现在我遇到的问题是,当我尝试添加我在 SQL Server 中使用的长代码时,我得到一个语法缺失表达式错误,我假设它来自单引号,因为代码来自 SQL。我收到错误是因为当我尝试存储我在 SQL Server 中使用的代码时,它使用访问无法识别的单引号。我想如果我尝试在插入表单的代码中编写一些东西来帮助将单引号转换为双引号,然后将它们重新转换回单引号将有助于解决问题。我只是不知道该怎么做,真的需要一些帮助。
谢谢
【问题讨论】:
能否请您发布错误消息?另外(一种愚蠢但可能且经常出现的情况)debug.print
您的 SQL 语句:缺少空格会引起很多麻烦
我真的很困惑;我的直觉是说“通过用两个撇号替换单个撇号来逃避撇号”,但我不确定Sub JoinCells
或您的第二个查询与您的问题有什么关系。我不太确定您的总体问题是什么。
代码函数与我的问题无关,问题是在主代码中编写用于插入目的以用双引号替换单引号,然后在插入访问时用单引号重新替换它们。错误消息是 RUN-TIME ERROR '3075' SYNTAX ERROR (MISSING OPERATOR) IN QUERY EXPRESSION .....
Escaping ' in Access SQL的可能重复
【参考方案1】:
您可以通过使用参数查询来避免插入文本中包含引号的问题。
为cmd_go_Click()
考虑这样的方法。
Dim strInsert As String
Dim db As DAO.database
Dim qdf As DAO.QueryDef
strInsert = "PARAMETERS pKW TEXT(255), pSource TEXT(255), pCode TEXT(255);" & vbCrLf & _
"INSERT INTO KWTable (KW, Source, Code) VALUES (pKW, pSource, pCode);"
'Debug.Print strInsert
Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strInsert)
qdf.Parameters("pKW") = Me.text_key.value
qdf.Parameters("pSource") = Me.combo_source.value
qdf.Parameters("pCode") = Me.txt_code.value
qdf.Execute dbFailOnError
Set qdf = Nothing
Set db = Nothing
但是,我不明白 JoinCells()
是如何适应的。
【讨论】:
那段代码不起作用,连接单元代码只是一个示例。我遇到的问题是引号 失败时的错误信息是什么?调试模式下突出显示哪一行? 我提供的代码中没有DoCmd.RunSQL insertstring
。
哦,在你的代码中,当我尝试运行它时,什么也没发生,代码没有执行,也没有弹出错误消息。什么都没发生
确保表单的代码模块在其声明部分包含Option Explicit
。然后从 VB 编辑器的主菜单运行 Debug->Compile。它抱怨什么编译错误?【参考方案2】:
我使用一个函数来处理 Null 值,并在直接创建 SQL 语句时转义单引号(通过将它们转换为两个单引号):
Function SafeSQL(ByVal pvarSQL As Variant) As String
SafeSQL2 = Replace(Nz(pvarSQL, ""), "'", "''")
End Function
那么在你的日常生活中你会:
insertstring = "INSERT INTO KWTable (KW, Source, Code) VALUES('" & SafeSQL(text_key.Value) & "','" & SafeSQL(combo_source.Value) & "','" & SafeSQL(txt_code.Value) & "');"
【讨论】:
以上是关于在 Access 中保留单引号的主要内容,如果未能解决你的问题,请参考以下文章