参数错误 MS Access SQL
Parameters Error MS Access SQL
我在这里遇到参数错误:db.Execute strSQL, dbFailOnError
说 "too few parameters, expected 1"。我不确定到底是为什么。我正在引用两个表。我也不是 100% 这写得正确 Workername = " & DLookup("username", "attendance", GetNextAssignee("program", "Language", "username"))
我希望 [Workername]
字段更新为链接到我没有得到的 GetNextAssignee("program", "Language", "username")
的工人名称,它可以连接到这个错误。
Public Function AssignNullProjects() As Long
Dim db As dao.Database
Dim rs As dao.Recordset
Dim strSQL As String
Set db = CurrentDb
strSQL = "SELECT CFRRRID, [program], [language] FROM CFRRR WHERE assignedto Is Null"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
If Not rs.BOF And Not rs.EOF Then
While Not rs.EOF
strSQL = "UPDATE CFRRR,attendance SET assignedto = " & GetNextAssignee("program", "Language", "username") & ", assignedby = " & Forms!Supervisor!NavigationSubform!assignedby.Value & ", Dateassigned = #" & Now & "#, actiondate = #" & Now & "#, Workername = " & _
DLookup("username", "attendance", GetNextAssignee("program", "Language", "username")) & ", WorkerID = " & DLookup("UserID", "attendance", GetNextAssignee("program", "Language", "username")) & " WHERE CFRRRID = " & rs!CFRRRID
Debug.Print strSQL
db.Execute strSQL, dbFailOnError
rs.MoveNext
Wend
End If
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Function
这是 Debug.Print strSQL
显示的内容:
UPDATE CFRRR,attendance
SET
assignedto = 7,
assignedby = 33,
Dateassigned = #5/16/2015 11:16:31 AM#,
actiondate = #5/16/2015 11:16:31 AM#,
Workername = Lillian,
WorkerID = 6
WHERE CFRRRID = 6
Workername 似乎是一个文本字段,您想将字符串 Lillian 存储在那里。添加引号以便数据库引擎理解 Lillian 是文字文本而不是参数名称。
UPDATE CFRRR
SET
assignedto = 7,
assignedby = 33,
Dateassigned = Now(),
actiondate = Now(),
Workername = 'Lillian',
WorkerID = 6
WHERE CFRRRID = 6
由于数据库引擎支持 Now()
函数,您可以要求它将 Now()
的值存储在您的 Dateassigned 和 actiondate 字段。这比在 VBA 中获取 Now()
的值,然后在该值周围添加 #
个字符以连接到语句文本中更简单。
我怀疑 UPDATE CFRRR,attendance
是否是正确的选择。这将是两个 table 之间的 CROSS JOIN
,Access 可能因此决定查询不可更新。我建议你 UPDATE
只是 CFRRR table.
我在这里遇到参数错误:db.Execute strSQL, dbFailOnError
说 "too few parameters, expected 1"。我不确定到底是为什么。我正在引用两个表。我也不是 100% 这写得正确 Workername = " & DLookup("username", "attendance", GetNextAssignee("program", "Language", "username"))
我希望 [Workername]
字段更新为链接到我没有得到的 GetNextAssignee("program", "Language", "username")
的工人名称,它可以连接到这个错误。
Public Function AssignNullProjects() As Long
Dim db As dao.Database
Dim rs As dao.Recordset
Dim strSQL As String
Set db = CurrentDb
strSQL = "SELECT CFRRRID, [program], [language] FROM CFRRR WHERE assignedto Is Null"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
If Not rs.BOF And Not rs.EOF Then
While Not rs.EOF
strSQL = "UPDATE CFRRR,attendance SET assignedto = " & GetNextAssignee("program", "Language", "username") & ", assignedby = " & Forms!Supervisor!NavigationSubform!assignedby.Value & ", Dateassigned = #" & Now & "#, actiondate = #" & Now & "#, Workername = " & _
DLookup("username", "attendance", GetNextAssignee("program", "Language", "username")) & ", WorkerID = " & DLookup("UserID", "attendance", GetNextAssignee("program", "Language", "username")) & " WHERE CFRRRID = " & rs!CFRRRID
Debug.Print strSQL
db.Execute strSQL, dbFailOnError
rs.MoveNext
Wend
End If
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Function
这是 Debug.Print strSQL
显示的内容:
UPDATE CFRRR,attendance
SET
assignedto = 7,
assignedby = 33,
Dateassigned = #5/16/2015 11:16:31 AM#,
actiondate = #5/16/2015 11:16:31 AM#,
Workername = Lillian,
WorkerID = 6
WHERE CFRRRID = 6
Workername 似乎是一个文本字段,您想将字符串 Lillian 存储在那里。添加引号以便数据库引擎理解 Lillian 是文字文本而不是参数名称。
UPDATE CFRRR
SET
assignedto = 7,
assignedby = 33,
Dateassigned = Now(),
actiondate = Now(),
Workername = 'Lillian',
WorkerID = 6
WHERE CFRRRID = 6
由于数据库引擎支持 Now()
函数,您可以要求它将 Now()
的值存储在您的 Dateassigned 和 actiondate 字段。这比在 VBA 中获取 Now()
的值,然后在该值周围添加 #
个字符以连接到语句文本中更简单。
我怀疑 UPDATE CFRRR,attendance
是否是正确的选择。这将是两个 table 之间的 CROSS JOIN
,Access 可能因此决定查询不可更新。我建议你 UPDATE
只是 CFRRR table.