在Access中保留单引号

时间:2013-04-02 19:09:55

标签: ms-access

我在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中使用的代码时,它使用单引号,访问无法识别。我想如果我尝试在插入表单的代码中编写一些东西来帮助将单引号转换为双引号,那么将它们重新转换回单引号将有助于解决问题。我只是想弄清楚如何做到这一点并且可以真正使用一些帮助。

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用参数查询来避免插入文本中包含的引号出现问题。

考虑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()如何适应。

答案 1 :(得分:0)

我使用一个处理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) & "');"