ms-access - 用 SQL 添加撇号的更好方法? - Access VBA

标签 ms-access vba

我正在为 Access 创建一个记事本应用程序 - 只是为了保持敏锐。我创建了用于容纳记事本的表单和用于各种功能的几个按钮。记事本作为 Memo 保存到名为 tblContents 的表中 - 这是因为文本的字符数限制为 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

最佳答案

如果您一直在此处(和其他地方)挖掘示例代码,那么您可能遇到过术语“SQL 注入(inject)”。通过这种机制,包含撇号(以及其他有趣的事情)的用户输入可能会产生令人惊讶的、有时严重的副作用。

如果您在 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 注入(inject)绊倒。

关于ms-access - 用 SQL 添加撇号的更好方法? - Access VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16541682/

相关文章:

excel - 将具有条件的列中的值相加

ms-access - 组合框设置默认值

sharepoint - 使用 XMLHTTP 删除 Sharepoint 文件

excel - Mac 版不显示在 Excel VBA 中插入用户窗体的选项

c# - C#中的数据库连接 Access

mysql - 我可以在一张表的复合主键中有太多列吗

java - 从 MS Access 文件中获取值

excel - 如何通过vba在excel中插入文本

ms-access - ms access 无法编辑字段,因为我必须删除关系但没有要删除的关系

vba - 控制ms以连续形式 Access 滚动条