使用VBA按钮创建数据录入表单时遇‘Object Required’错误求助
解决Access VBA插入数据时的“Object Required”错误
嘿,我一眼就揪出你代码里的问题了——你用Set关键字给字符串变量sSQL赋值,这就是触发“Object Required”错误的核心原因!
问题根源
Set在VBA里是专门给对象类型(比如Recordset、QueryDef这类)赋值的关键字,而你声明的sSQL是普通字符串变量,完全不需要用Set。当VBA看到Set sSQL = "INSERT..."时,会误以为sSQL是一个对象,但实际上它只是个普通字符串,自然就抛出“需要对象”的错误了。
修正后的基础代码
把Set去掉,直接给字符串赋值就行,补全你的SQL语句后大概是这样:
Private Sub Command28_Click() Dim sSQL As String ' 移除Set关键字,直接赋值SQL语句 sSQL = "INSERT INTO TEST (Carrier_Ent_ID, Row_Insert_TS, Row_Update_TS, Row_Insert_User_ID, Row_Update_User_ID) " & _ "VALUES ('" & Me.Carrier_Ent_ID.Value & "', Now(), Now(), '" & Environ("Username") & "', '" & Environ("Username") & "')" ' 执行SQL,加上dbFailOnError参数,出错时会抛出具体信息方便排查 CurrentDb.Execute sSQL, dbFailOnError MsgBox "数据插入成功!", vbInformation End Sub
更安全的进阶写法(避免SQL注入)
如果用户输入的内容可能包含特殊字符(比如单引号),直接拼接字符串容易出错甚至有安全风险,推荐用参数查询:
Private Sub Command28_Click() Dim qd As QueryDef Dim sSQL As String ' 定义带参数占位符的SQL模板 sSQL = "INSERT INTO TEST (Carrier_Ent_ID, Row_Insert_TS, Row_Update_TS, Row_Insert_User_ID, Row_Update_User_ID) " & _ "VALUES ([pCarrierID], Now(), Now(), [pUser], [pUser])" ' 创建临时查询对象 Set qd = CurrentDb.CreateQueryDef("", sSQL) ' 给参数赋值 qd.Parameters("pCarrierID") = Me.Carrier_Ent_ID.Value qd.Parameters("pUser") = Environ("Username") ' 执行查询 qd.Execute dbFailOnError ' 释放对象资源 Set qd = Nothing MsgBox "数据插入成功!", vbInformation End Sub
提示:你需要根据实际的表单控件和数据库字段,调整代码里的字段名、控件名以及参数值哦!
内容的提问来源于stack exchange,提问作者RC94
相关产品推荐
相关产品推荐

