简体   繁体   English

MS Access运行时错误“ 3061”,预期参数太少2

[英]MS Access runtime error '3061' too few parameters expected 2

I have been playing about with this vba/sql code for a while now and I cant figure out why I keep getting the error 'MS Access runtime error '3061' too few parameters expected 2', Is there something I am missing?. 我一直在玩这个vba / sql代码已有一段时间了,我无法弄清楚为什么我总是收到错误消息“ MS Access运行时错误'3061'预期参数2太少”,我缺少什么吗? I am trying to count how many records are in reviews_programme table with a schedule of 'B' (Which is part of a joined table that is BFMA_Tasklist and joined on the task field), which is between 2 dates which are input from a form. 我试图计算在带有“ B”计划的“ reviews_programme”表中有多少条记录(这是BFMA_Tasklist的联接表的一部分,并在任务字段上联接),该表介于2个从表单输入的日期之间。 The result will then be displayed in a textbox on the form. 结果将显示在表单上的文本框中。

Private Sub cmdstats_Click()
Dim sSQL As String
Dim db As Database
Dim rs As DAO.Recordset

sSQL = "SELECT Count(*) AS [CountOfScheduleB] " & _
"FROM [BFMA_TaskList] INNER JOIN [Reviews_Programme] ON [BFMA_TaskList].[Task] = [Reviews_Programme].[Task] " & _
"WHERE [BFMA_TaskList].[Schedule]=""B"" AND [Reviews_Programme].[Planned_Date] Between Me![txtstatsfrom] And Me![txtstatsto];"


Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)


If rs.RecordCount > 0 Then
   Me.Text2 = rs![CountOfScheduleB]
Else
   Me.Text2 = "N/A"
End If

Set rs = Nothing
Set db = Nothing


End Sub

Any help will be greatly appreciated. 任何帮助将不胜感激。 Thank you. 谢谢。

Try this: 尝试这个:

sSQL = "SELECT Count(*) AS [CountOfScheduleB] " & _
"FROM [BFMA_TaskList] INNER JOIN [Reviews_Programme] ON [BFMA_TaskList].[Task] = [Reviews_Programme].[Task] " & _
"WHERE [BFMA_TaskList].[Schedule]=""B"" AND [Reviews_Programme].[Planned_Date] Between #" & Format(Me![txtstatsfrom],"mm\/dd\/yyy") & "# And #" & Format(Me![txtstatsto],"mm\/dd\/yyy") & "#;"

1st of all, where is currentDB? 首先,currentDB在哪里? u need make db connection for this before call its table. 您需要为此建立数据库连接,然后再调用它的表。

2nd i think is 'B' is enough no need ""B"" 第二我认为“ B”就足够了,不需要““ B””

3th u need to used '#' as date parameter. 第三,您需要使用“#”作为日期参数。 and format the text cos we all know all text is string. 并格式化文本cos,我们都知道所有文本都是字符串。 u need to convert it. 您需要将其转换。 like format(data,"format as") and remember it will better if this format same as database. 例如format(data,“ format as”),请记住,如果此格式与数据库相同,则效果会更好。

so the code should like be: 因此代码应为:

Private Sub cmdstats_Click()
Dim sSQL As String
Dim db As Database
Dim rs As DAO.Recordset

sSQL = "SELECT Count(*) AS [CountOfScheduleB] " & _
"FROM [BFMA_TaskList] INNER JOIN [Reviews_Programme] ON [BFMA_TaskList].[Task] = [Reviews_Programme].[Task] " & _
"WHERE [BFMA_TaskList].[Schedule]='B' AND [Reviews_Programme].[Planned_Date] Between #' & format(Me![txtstatsfrom],"dd/mm/yyyy") & '# And  #' & format(Me![txtstatsto],"dd/mm/yyyy") & #';"


'Set db = CurrentDb
 Set db = OpenDatabase("Your database)
 Set rs = db.OpenRecordset(sSQL)


If rs.RecordCount > 0 Then
   Me.Text2 = rs![CountOfScheduleB]
Else
   Me.Text2 = "N/A"
End If

Set rs = Nothing
Set db = Nothing


End Sub

or 要么

Private Sub cmdstats_Click()
Dim sSQL As String
Dim db As Database
Dim rs As DAO.Recordset

sSQL = "SELECT Count(*) AS [CountOfScheduleB] " & _
"FROM [BFMA_TaskList] INNER JOIN [Reviews_Programme] ON [BFMA_TaskList].[Task] = [Reviews_Programme].[Task] " & _
"WHERE [BFMA_TaskList].[Schedule]='B' AND [Reviews_Programme].[Planned_Date] Between '" & format(Me![txtstatsfrom],"dd/mm/yyyy") & "' And  '" & format(Me![txtstatsto],"dd/mm/yyyy") & "';"


'Set db = CurrentDb
 Set db = OpenDatabase("Your database)
 Set rs = db.OpenRecordset(sSQL)


If rs.RecordCount > 0 Then
   Me.Text2 = rs![CountOfScheduleB]
Else
   Me.Text2 = "N/A"
End If

Set rs = Nothing
Set db = Nothing


End Sub

If you sure of what you done, u can remove "Me." 如果您确定自己做了什么,则可以删除“我”。 cos me is form as its. 因为我是形式。 sometimes we need "Me" sometimes Not. 有时我们需要“我”,有时则不需要。

Happy Coding. 编码愉快。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM