使用SQL添加撇号的更好方法? - 访问VBA

时间:2013-05-14 11:11:57

标签: ms-access access-vba

我正在为Access创建一个记事本应用程序 - 只是为了保持敏锐。我已经创建了用于存放记事本的表单和用于各种功能的多个按钮。记事本将保存到名为tblContents的表中Memo - 这是因为文本中找到了255个字符的限制。

我从SO中复制了大量文本,并意识到了撇号问题。您看到将文本保存到表时我运行的SQL语句在添加撇号时需要具有某种语法(此时我不记得)才能运行。

要准确维护用户输入的内容,撇号和所有内容,有没有办法使用相同的SQL添加它?我不想循环输入并删除所有撇号。

这是我添加用户输入内容的代码:

'Save the memo
Public Sub SaveMemo()

    'Examine the memo object
With Forms!frmNotepad!memo

    'Set focus to memo in order to get length
    .SetFocus

    If Len(.Text) > 0 Then

        'Save to table
        Dim memoContents As String
        memoContents = .Text

        Dim strSQL As String
        strSQL = "INSERT INTO tblContents (Contents)" & _
                 "VALUES ( '" & memoContents & "' ); "

        'Set the database and execute the SQL
        Dim db As Database
        Set db = CurrentDb

        db.Execute strSQL, dbFailOnError

    Else

        MsgBox ("Nothing to save!")

    End If

End With


End Sub

2 个答案:

答案 0 :(得分:3)

如果您一直在这里(以及其他地方)寻找示例代码,那么您可能会遇到术语 SQL Injection 。这是一种机制,其中包含撇号(和其他有趣的业务)的用户输入可能具有令人惊讶的,有时严重的副作用。

如果您在Access中运行,那么使用Recordset更新表可以省去一些麻烦。您可以使用

而不是运行INSERT语句
Dim cdb As DAO.Database, rst As DAO.Recordset
Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("tblContents", dbOpenDynaset)
rst.AddNew
rst!Contents = memoContents
rst.Update
rst.Close
Set rst = Nothing
Set cdb = Nothing

这样你就不必担心转义字符或被SQL注入绊倒了。

答案 1 :(得分:2)

您可以使用Replace()函数

memoContents = .Text
memoContents  = Replace(memoContents ,"'","''")