Ms access 在VBA中运行SQL字符串?

Ms access 在VBA中运行SQL字符串?,ms-access,vba,Ms Access,Vba,Iv在ms access vba中创建了SQL字符串SQL,但当它运行时,会在调试窗口中打印该字符串,但实际上不会像我希望的那样运行该字符串以向表中添加记录 Public Sub EmpoyeesTable_Click() Dim sql As String sql = "INSERT INTO Employees " & _ "VALUES " & "(1, 'James', 'Dan', 'n6 indro Rd', 0943747, 30.24)

Iv在ms access vba中创建了SQL字符串SQL,但当它运行时,会在调试窗口中打印该字符串,但实际上不会像我希望的那样运行该字符串以向表中添加记录

Public Sub EmpoyeesTable_Click()

    Dim sql As String

    sql = "INSERT INTO Employees " & _
    "VALUES " & "(1, 'James', 'Dan', 'n6 indro Rd', 0943747, 30.24);"

    Debug.Print sql
End Sub

最后,我想在单击submit时使用SQL字符串从表单获取输入,并将其添加到表中?这是正确的方法吗

在VBA中运行SQL字符串的方法有很多。每种方法都有各自的优点和缺点。最常见的是:

DoCmd.RunSQL sql
像执行查询一样运行SQL。添加、删除或修改记录时会弹出窗口。您可以使用UDF和表单参数

DoCmd.SetWarnings False
DoCmd.RunSQL sql
DoCmd.SetWarnings True
禁用警告,然后像前面那样运行SQL,然后重新启用警告

CurrentDb.Execute sql
通过与当前数据库的DAO连接执行SQL。这里不能使用UDF和表单参数。不显示任何警告。它只是执行SQL

CurrentProject.Connection.Execute sql
通过与当前数据库的ADO连接执行SQL。与DAO连接非常相似,但存在细微差异。例如,您可以执行包含
Decimal
数据类型的DDL语句,并以这种方式设置
Check
约束,而其他任何方式都不允许这两种约束


您可以通过这些不同的方式阅读有关使用参数的内容。如果要插入非常量的值,则强烈建议这样做,以避免错误和SQL注入。

如果您想得简单,只需将
Debug.Print SQL
更改为
DoCmd.RunSQL(SQL)

如果您想从表单中获取值,请参考表单控件(如文本框)中的每个值。请参阅以下代码。

Private Sub Command0_Click()
Dim sql As String

    sql = "INSERT INTO Employees VALUES (" & _
    "'" & Me.Text1 & "'," & _
    "'" & Me.Text2 & "'," & _
    "'" & Me.Text3 & "'," & _
    "'" & Me.Text4 & "'," & _
    "'" & Me.Text5 & "'," & _
    "'" & Me.Text6 & "');"

    DoCmd.RunSQL (sql)
End Sub

如果字段值是数字类型,您可以从这些字段的代码中删除单引号
(')

您听说过一年前菲律宾群岛银行发生的事情吗?没有。您能解释一下吗?然后发生了什么事?如果这不是正确的方法,那么最佳实践是什么?我将更改代码作为最佳实践。嗯,他们很快就解决了问题。代码对经典的SQL注入非常开放-请看这非常危险!那么,您能否提供一些关于如何在access vba中安全地编写sql语句的链接?建议
CurrentDb.Execute sql,dbFailOnError
,这样您就可以在运行时捕获任何错误如何构建静态参数查询,然后使用它添加记录?
Private Sub Command0_Click()
Dim sql As String

    sql = "INSERT INTO Employees VALUES (" & _
    "'" & Me.Text1 & "'," & _
    "'" & Me.Text2 & "'," & _
    "'" & Me.Text3 & "'," & _
    "'" & Me.Text4 & "'," & _
    "'" & Me.Text5 & "'," & _
    "'" & Me.Text6 & "');"

    DoCmd.RunSQL (sql)
End Sub