Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS Access运行时错误“3061”预期参数太少2_Sql_Vba_Ms Access_Count - Fatal编程技术网

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

Sql MS Access运行时错误“3061”预期参数太少2,sql,vba,ms-access,count,Sql,Vba,Ms Access,Count,我一直在玩这个vba/sql代码有一段时间了,我不明白为什么我总是收到错误“MS Access运行时错误”3061“预期参数太少2”,我缺少什么吗?。我试图计算进度表为“B”的reviews\u Program表中有多少条记录,B是BFMA\u任务列表的联接表的一部分,并在任务字段上联接,任务字段介于从表单输入的两个日期之间。结果将显示在表单上的文本框中 Private Sub cmdstats_Click() Dim sSQL As String Dim db As Database Dim

我一直在玩这个vba/sql代码有一段时间了,我不明白为什么我总是收到错误“MS Access运行时错误”3061“预期参数太少2”,我缺少什么吗?。我试图计算进度表为“B”的reviews\u Program表中有多少条记录,B是BFMA\u任务列表的联接表的一部分,并在任务字段上联接,任务字段介于从表单输入的两个日期之间。结果将显示在表单上的文本框中

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
任何帮助都将不胜感激。谢谢。

试试这个:

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") & "#;"

首先,currentDB在哪里?在调用其表之前,您需要为此建立db连接

第二,我认为“B”就足够了,不需要B

3th u需要用作日期参数。格式化文本,因为我们都知道所有文本都是字符串。你需要转换它。和formatdata一样,格式化为并记住,如果此格式与数据库相同,则会更好

因此,代码应该是:

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

如果你确定你做了什么,你可以开除我。因为我是它的形式。有时我们需要我,有时不需要


愉快的编码。

当您遇到SQL问题时,使用Debug.Print ssql将SQL复制/粘贴到SQL模式下的空白查询编辑器中,显然这样会更容易找到问题。缺少参数通常意味着您指定了一些您可能认为是表中某个字段的名称的内容,等等,而数据库无法识别这些内容。输入错误等。在本例中为两个。此外,您可以替换单引号,而不是在SQL查询中使用双引号。无论哪种方式,都要先让查询在Access查询中工作,然后将SQL复制/粘贴到VBA。
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