编译错误MS Access SQL

编译错误MS Access SQL

问题描述:

我得到一个编译错误:“参数不是可选的” 基本上在这段代码中,我试图围绕表格样式自动分配。当代码被调用时,它开始于AssignNullProjects(),当我得到的错误,GetNextAssignee是亮点中的一部分" & GetNextAssignee & "编译错误MS Access SQL

我真的不知道如何解决它,这是我下面全码:

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 SET assignedto = " & GetNextAssignee & ", assignedby = " & [Forms]![CFRRR]![assignedby] & ", Dateassigned = #" & Now & "#, actiondate = #" & Now & "#, Workername = " & _ 
           [Forms]![CFRRR]![assignedto] & ", WorkerID = " & [Forms]![CFRRR]![assignedto] & " WHERE CFRRRID = " & rs!CFRRRID 

      db.Execute strSQL, dbFailOnError 
      rs.MoveNext 
     Wend 
    End If 

    rs.Close 
    db.Close 
    Set rs = Nothing 
    Set db = Nothing 

End Function 

Public Function GetNextAssignee(program As String, Language As String) As Long 
' Returns UserID as a Long Integer with the lowest [TS] value, 
' and updates same [TS] by incremented with 1. 

    Dim db As dao.Database 
    Dim rs As dao.Recordset 
    Dim strSQL As String 

    Set db = CurrentDb 
    strSQL = "SELECT TOP 1 WorkerID FROM attendance WHERE [Programs] LIKE '*" & program & "*' AND [Language] = '" & Language & "' AND [Status] = '" & Available & "' ORDER BY TS ASC" 
    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 
    If Not rs.BOF And Not rs.EOF Then 
     'Found next assignee, update date/time stamp 
'  strSQL = "UPDATE tblUser SET TS = " & DMax("[TS]", tblUser) + 1 & " WHERE [WorkerID]= " & rs!workerid 
     strSQL = "UPDATE attendance SET TS = " & DMax("[TS]", "attendance") + 1 & " WHERE [WorkerID]= " & rs!workerid 
     db.Execute strSQL, dbFailOnError 
     GetNextAssignee = rs!workerid 
    Else 
     'Field TS has NO VALUE FOR ALL RECORDS! 
     'Code calling this function should check for a return of 0 indicating an error. 
     GetNextAssignee = 0 
    End If 

    rs.Close 
    db.Close 
    Set rs = Nothing 
    Set db = Nothing 

End Function 
+1

'GetNextAssignee'显然需要两个参数('program'和'Language'),如声明中所示;你的调用代码并不提供'&GetAssignee&')。你还希望发生什么? “为了通过邮递服务送达,你的信件需要两件事:一个送货地址和一张邮资充足的邮票,你们两个都没有提供,我们无法完成你寄送这封信的请求。” –

当你调用这个函数,你必须提供2个参数(字符串值):

Public Function GetNextAssignee(program As String, Language As String) As Long 

但构建UPDATE语句时,你叫塔没有提供所需的参数t的函数:

strSQL = "UPDATE CFRRR SET assignedto = " & GetNextAssignee & ", assignedby = " 

这样进出抱怨那些(串)参数是不可选的 - 你必须提供他们。当你给函数像这样2串代码应该编译...

strSQL = "UPDATE CFRRR SET assignedto = " & GetNextAssignee("foo", "bar") & ", assignedby = " 

尽管代码将与这些字符串编译,功能可能不会返回你所需要的结果。因此用实际值代替foobar

+0

我是否按照功能键入? ''&GetNextAssignee(程序为字符串,语言为字符串)As Long&“'但我收到一个错误,说明列表分隔符或)并且'As'突出显示。 – Lilly

+0

伟大的伎俩,现在我得到一个错误的下半部分,说太少的参数:期望2.'strSQL =“选择TOP1 WorkerID从出席在哪里[程序]像'*”&程序&“* '和[语言] =''和语言&''和[状态] =“&(”可用“)和”按顺序ASC“ Set rs = db.OpenRecordset(strSQL,dbOpenDynaset)''''虽然。 – Lilly

+0

是的,这是一个不同的问题,所以一个新的问题是要走的路。当你写这个问题时,当你遇到新的错误时,请粘贴“Debug.Print strSQL”的输出。最好向我们展示实际的失败声明,而不仅仅是创建声明的代码。 – HansUp