VBA插入Access数据遇Run-time Error '3061'参数不足问题求助
解决VBA向Access插入数据时的Run-time Error '3061'(参数不足)问题
我目前还在学习阶段,在使用VBA向Access的Tbl_Mst_Lisensi表插入数据时,遇到了Run-time Error '3061'错误,提示“参数不足。预期38个”。已经排查该问题一周,检查过需加方括号的列,且通过断点跟踪确认所有参数值均已获取,仍无法找到问题原因,恳请帮助。
相关代码:
strSQL = " INSERT Into Tbl_Mst_Lisensi(Kode_Lisensi, ID_License, Jdl_BhsIndonesia, Jdl_BhsInggris, SKK, TD, FG, SP, SG, PreTest, PostTest, KT, SE, SOP, SOPQ, Format, [Note], Current_Resources, Training, Status_Del, [Group], SKK_Ver, TD_Ver, FG_Ver, SP_Ver, SG_Ver, PreTest_Ver, PostTest_Ver, KT_Ver, SE_Ver, SOP_Ver, SOPQ_Ver, [Date_Created], Id_Group, Id_SubGroup, [User_CDO], [User_Proposed], [User_Approved] )" & vbCrLf & _ " VALUES ([pKode_Lisensi], [pID_License], [pJdl_BhsIndonesia], [pJdl_BhsInggris], [pSKK], [pTD], [pFG], [pSP], [pSG], [pPreTest], [pPostTest], [pKT], [pSE], [pSOP], [pSOPQ], [pFormat], [pNote], [pCurrent_Resources], [pTraining], [pStatus_Del], [pGroup], [pSKK_Ver], [pTD_Ver], [pFG_Ver], [pSP_Ver], [pSG_Ver], [pPreTest_Ver], [pPostTest_Ver], [pKT_Ver], [pSE_Ver], [pSOP_Ver], [pSOPQ_Ver], [pDate_Created], [pId_Group], [pId_SubGroup], [pUser_CDO], [User_Proposed], [User_Approved] );" Set db = CurrentDb Set qdf = db.CreateQueryDef(vbNullString, strSQL) qdf.Parameters("pKode_Lisensi").Value = Me.txt_KodeLisensi.Value qdf.Parameters("pID_License").Value = Me.cmb_idLic.Value qdf.Parameters("pJdl_BhsIndonesia").Value = Me.txtBhsIndo.Value qdf.Parameters("pJdl_BhsInggris").Value = Me.txtBhsInggris.Value qdf.Parameters("pSKK").Value = iSKK qdf.Parameters("pTD").Value = iTD qdf.Parameters("pFG").Value = iFG qdf.Parameters("pSP").Value = iSP qdf.Parameters("pSG").Value = iSG qdf.Parameters("pPreTest").Value = iPre qdf.Parameters("pPostTest").Value = iPost qdf.Parameters("pKT").Value = iKT qdf.Parameters("pSE").Value = iSE qdf.Parameters("pSOP").Value = iSOP qdf.Parameters("pSOPQ").Value = iSOPQ qdf.Parameters("pFormat").Value = Me.txtFormat.Value qdf.Parameters("pNote").Value = Me.txtNote.Value qdf.Parameters("pCurrent_Resources").Value = Me.txtResources.Value qdf.Parameters("pTraining").Value = Me.AttcFile.Value qdf.Parameters("pStatus_Del").Value = i qdf.Parameters("pGroup").Value = del qdf.Parameters("pSKK_Ver").Value = Me.txtSKK.Value qdf.Parameters("pTD_Ver").Value = Me.txtTD.Value qdf.Parameters("pFG_Ver").Value = Me.txtFG.Value qdf.Parameters("pSP").Value = Me.txtSP.Value qdf.Parameters("pSG_Ver").Value = Me.txtSG.Value qdf.Parameters("pPreTest_Ver").Value = Me.txtPre.Value qdf.Parameters("pPostTest_Ver").Value = Me.txtPost.Value qdf.Parameters("pKT_Ver").Value = Me.txtKT.Value qdf.Parameters("pSE_Ver").Value = Me.txtSE.Value qdf.Parameters("pSOP_Ver").Value = Me.txtSOP.Value qdf.Parameters("pSOPQ_Ver").Value = Me.txtSOPQ.Value qdf.Parameters("pDate_Created").Value = Me.txt_DateTime.Value qdf.Parameters("pId_Group").Value = Me.Combo18.Value qdf.Parameters("pId_SubGroup").Value = Me.cmbSubGroup.Value qdf.Parameters("pUser_CDO").Value = Me.cmbCDO.Value qdf.Parameters("pUser_Proposed").Value = Me.txtProposed.Value qdf.Parameters("pUser_Approved").Value = Me.txtApproved.Value qdf.Execute
问题排查与解决方案
我仔细梳理了你的代码,发现了两处非常容易忽略的细节错误,这正是导致“参数不足”的原因:
参数赋值重复,遗漏
pSP_Ver:在参数赋值段,你写了qdf.Parameters("pSP").Value = Me.txtSP.Value,但前面已经给pSP赋过值(qdf.Parameters("pSP").Value = iSP)。这里的正确参数应该是pSP_Ver,这就导致pSP_Ver没有被赋值,少了一个必要参数。VALUES子句中参数名拼写错误:在SQL语句的VALUES部分,
[User_Proposed]和[User_Approved]没有加前缀p,应该改成[pUser_Proposed]和[pUser_Approved]。因为你定义的参数都是以p开头的,名字不匹配会让Access识别不到这两个参数,相当于又缺失了两个参数。
修正后的关键代码片段
' 修正后的SQL语句VALUES部分 strSQL = " INSERT Into Tbl_Mst_Lisensi(...) VALUES (... [pUser_CDO], [pUser_Proposed], [pUser_Approved] );" ' 修正后的参数赋值 qdf.Parameters("pSP_Ver").Value = Me.txtSP.Value ' 把pSP改成pSP_Ver
这两处都是细节上的命名/拼写失误,断点跟踪时可能只关注了变量是否有值,没注意参数名的对应关系,很容易漏掉。修正后应该就能正常执行插入操作了。
内容的提问来源于stack exchange,提问作者Rio Inggit Dharmawangsa
相关产品推荐
相关产品推荐

