访问时的 VBA 编码

Posted

技术标签:

【中文标题】访问时的 VBA 编码【英文标题】:VBA coding on access 【发布时间】:2014-10-15 12:32:50 【问题描述】:

我正在尝试查看以下代码的问题所在。

'add data to table
CurrentDb.Execute "INSERT INTO IB Students(Student Name, Gender, IB) " & _
"VALUES (" & Me.Text6 & ",'" & Me.Combo13 & "','" & Me.Text9 & "')"

'refresh data in list on form
stdfrm.Form.Requery

每当我尝试使用 add 命令时,我都会得到Runtime Error -3134,它说INSERT INTO 语句存在语法错误。

【问题讨论】:

请在您的问题中添加更多措辞。该代码理论上应该可以工作。 每当我尝试使用 add 命令时,我都会收到“运行时错误 - 3134” 它说'INSERT INTO'语句中有语法错误 这个有SQL注入漏洞,应该参数化,看看如果在Me.Text6中放一个'会发生什么 【参考方案1】:

可能是表名需要用括号括起来,文本值必须加引号:

'add data to table
sSQL = "INSERT INTO [IB Students] ([Student Name], Gender, IB) " & _
"VALUES ('" & Me.Text6 & "','" & Me.Combo13 & "','" & Me.Text9 & "')"

'print SQL for debug
Debug.print sSQL  

'Run query
CurrentDb.Execute sSQL

'refresh data in list on form
stdfrm.Form.Requery

注意:如果Me.Text6(和其他)未绑定到数据源,那么您必须将其用作Me.Text6.Value

编辑:在运行查询之前检查长度可能是个好主意

【讨论】:

[Student Name] 同上 是的,你是对的@AlexK。我刚刚修改了我的答案...谢谢 我仍然收到相同的 3134 运行时错误,但这次调试器指向“CurrentDb.Execute sSQL” 打印出来的SQL是什么? (按 Alt+F11,然后转到即时窗口) Alt+F11 转到 VBA 窗口CTRL+G 转到 立即窗口.【参考方案2】:

当我打开即时窗口时,它会显示

    INSERT INTO [IB Students] (Student Name, Gender, IB) VALUES (Micheal,'Male','2')
INSERT INTO [IB Students] (Student Name, Gender, IB) VALUES (John,'Male','1')
INSERT INTO [IB Students] ([Student Name], Gender, IB) VALUES (,'','')
INSERT INTO [IB Students] ([Student Name], Gender, IB) VALUES (,'','')

【讨论】:

以上是关于访问时的 VBA 编码的主要内容,如果未能解决你的问题,请参考以下文章

提交表单时VBA访问新记录

如何通过 Access VBA 正确访问 Excel 文件

访问 VBA 以在不提示的情况下覆盖文件

xmlnode 代码不起作用 - 访问 vba

在 ms 访问报告 vba 中复制报告字段

访问VBA:将表单/子表单名称传递给函数?