Solved

Run-time error '3061' Too few parameters. Expected1 using Access VBA

Posted on 2009-05-06
11
275 Views
Last Modified: 2012-05-06
I have a Function which passes in values from a form and then uses them to insert into a table. The table I am inserting into has 4 fields  
Master_Project_ID, SDLC_ID and PERCENT are numeric and Project_ID is a text field.
Function SDLC_Build(Master_Project_ID As Integer, PROJECT_ID, Project_Planning, Requirements, Design, Development, Testing, Implementation As String)
 
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sSQL As String
 
    Dim SDLC1 As Integer
    SDLC1 = 1
    Dim Percent As Integer
    Percent = 0
    
     
    Set db = DBEngine(0)(0)
    
    If Project_Planning = "Yes" Then
    
    sSQL = "INSERT INTO TBL_SDLC (MASTER_PROJECT_ID,PROJECT_ID,SDLC_ID,[PERCENT]) VALUES ( " & Master_Project_ID & ", " & PROJECT_ID & ", " & SDLC1 & ", " & Percent & ");"
            
         
    db.Execute sSQL
    
    End If

Open in new window

0
Comment
Question by:jamsan92011
  • 4
  • 3
  • 3
  • +1
11 Comments
 
LVL 84

Accepted Solution

by:
Scott McDaniel (Microsoft Access MVP - EE MVE ) earned 125 total points
ID: 24316349
"Too few parameters" means you've misspelled something, generally.

However, your "percent" variable is the most likely culprit. "Percent" is a reserved word - change your variable to something like "vPercent", and change your SQL string to reflect this as well.
0
 
LVL 57
ID: 24316374
You have SDLC_ID in the SQL statement and SDLC in the procedure.
Access doesn't know what to use for SDLC_ID
JimD.
0
 
LVL 57
ID: 24316382
<<You have SDLC_ID in the SQL statement and SDLC in the procedure.>>
I meant SDLC1
JimD.
0
The Eight Noble Truths of Backup and Recovery

How can IT departments tackle the challenges of a Big Data world? This white paper provides a roadmap to success and helps companies ensure that all their data is safe and secure, no matter if it resides on-premise with physical or virtual machines or in the cloud.

 
LVL 84
ID: 24316391
Also, you function declaration:

Function SDLC_Build(Master_Project_ID As Integer, PROJECT_ID, Project_Planning, Requirements, Design, Development, Testing, Implementation As String)

isn't built using normal programming techniques. Master_Project_ID is declared as an Integer, and Implementation is declared as a String, but your other input parameters are all declared as a variant. this typically won't cause much trouble, but can if you're dealing with Null values (which Variants can handle, but your tables may not be able to). If you intend for your other input parameters to be String, you must declare EACH of those as a String:

Function SDLC_Build(Master_Project_ID As Integer, PROJECT_ID As String, Project_Planning As String etc etc

0
 
LVL 57
ID: 24316394
scratch that.  I was looking at it wrong.  LSM is most likely correct that it is percent that is causing the problem.
JimD.
0
 
LVL 13

Expert Comment

by:Brian Withun
ID: 24316401
Which call is producing this '3061' error?

In your SDLC_Build() function you should be typing each parameter, though that is almost certainly not the cause of your error.


Function SDLC_Build( Master_Project_ID As Integer _
                   , PROJECT_ID As <what?> _
                   , Project_Planning As <what?> _
                   , Requirements As <what?> _
                   , Design As <what?> _
                   , Development As <what?>
                   , Testing As <what?>
                   , Implementation As String )

Open in new window

0
 
LVL 84
ID: 24316420
JD: I think SDLC1 is the variable, and SDLC_ID is the column name.
0
 

Author Comment

by:jamsan92011
ID: 24316823
I've changed each parameter in the function as recommended and changed the Percent to vPercent.  In my table the Percent field is a Decimal and Field Size double.  Could this be the problem?  Technically I guess I don't even need to put this into my insert statement as the default will always be 0%.  I can try taking the Percent out completely and re-run.
0
 

Author Comment

by:jamsan92011
ID: 24316885
I removed the Percent as a variable and from the Insert statement but now I am getting a syntax erro in Insert Into statement.  Attached are my changes.  Could I be missing a " somewhere?
Function SDLC_Build(Master_Project_ID As Integer, PROJECT_ID As String, Project_Planning As String, Requirements As String, Design As String, Development As String, Testing As String, Implementation As String)
 
    Dim db As DAO.Database           ' Current database
    Dim rs As DAO.Recordset
    Dim sSQL As String
    
    Dim SDLC1 As Integer
    SDLC1 = 1
     
    Set db = DBEngine(0)(0)
    
    If Project_Planning = "Yes" Then
    
    sSQL = "INSERT INTO TBL_SDLC (MASTER_PROJECT_ID,PROJECT_ID,SDLC_ID,) VALUES ( " & Master_Project_ID & ", " & PROJECT_ID & ", " & SDLC1 & ");"
            
         
    db.Execute sSQL
    
    End If

Open in new window

0
 
LVL 84
ID: 24316966
If PROJECT_ID is a string:

sSQL = "INSERT INTO TBL_SDLC (MASTER_PROJECT_ID,PROJECT_ID,SDLC_ID,) VALUES ( " & Master_Project_ID & ", '" & PROJECT_ID & "', " & SDLC1 & ");"
0
 

Author Comment

by:jamsan92011
ID: 24317057
I figure out the issue with my Insert (missing single quote before and after double quotes) and by removing the Percent it worked just fine.  Thank each of you for all the help
    sSQL = "INSERT INTO TBL_SDLC ( MASTER_PROJECT_ID, PROJECT_ID, SDLC_ID)" & _
    "Values ('" & Master_Project_ID & "','" & PROJECT_ID & "','" & SDLC1 & "');"

Open in new window

0

Featured Post

Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A simple tool to export all objects of two Access files as text and compare it with Meld, a free diff tool.
It’s been over a month into 2017, and there is already a sophisticated Gmail phishing email making it rounds. New techniques and tactics, have given hackers a way to authentically impersonate your contacts.How it Works The attack works by targeti…
The viewer will learn how to use the =DISCRINV command to create a discrete random variable, use this command to model a set of probabilities and outcomes in a Monte Carlo simulation, and learn how to find the standard deviation of a set of probabil…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

810 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question