ms 访问表单条件帮助错误

ms access form criteria help error

我正在尝试打开带有条件的表单。

我遇到错误的标准。

strCriteria = "WorkID = 3 And 
               OptOut= -1 And 
               AppointmentDate = (Last(AppointmentDate))>DateSerial(Year(Date()),Month(Date())-3,1) And 
                                 (Last(AppointmentDate))<DateSerial(Year(Date()),Month(Date())-2,0)"

我这样放是为了方便阅读。

我的错误号是 3096。

谢谢。

====更新我放弃======= 到目前为止我的代码。

strSQL = "SELECT tblAppointment.WorkID," & _
        "tblCustomer.OptOut," & _
        "Last(tblAppointment.AppointmentDate) AS LastAppointmentDate," & _
        "tblAppointment.CustomerID," & _
        "tblCustomer.Surname," & _
        "tblCustomer.Name," & _
        "tblCustomer.FatherName," & _
        "Last(tblAppointment.AppointmentMemo) AS LastAppointmentMemo" & _
"FROM tblCustomer INNER JOIN tblAppointment ON tblCustomer.CustomerID = tblAppointment.CustomerID " & _
"GROUP BY tblAppointment.WorkID," & _
    "tblCustomer.OptOut," & _
    "tblAppointment.CustomerID," & _
    "tblCustomer.Surname," & _
    "tblCustomer.Name," & _
    "tblCustomer.FatherName " & _
"HAVING (((tblAppointment.WorkID) = 3) And ((tblCustomer.OptOut) = -1) And " & _
       "(LastAppointmentDate > DateSerial(Year(Date()), Month(Date()) - 3, 1) And " & _
       "LastAppointmentDate < DateSerial(Year(Date()), Month(Date()) - 2, 0)))" & _
"ORDER BY LastAppointmentDate, " & _
    "tblCustomer.Surname," & _
    "tblCustomer.Name," & _
    "tblCustomer.FatherName;"

你的问题没有太多信息可以解决,但我会尝试一下。

我假设您正在尝试使用以下代码打开表单:

docmd.openform "FormName",acnormal,,strcriteria

如果是这种情况,您的变量正在寻找尚未确定或发现的最后约会日期。基本上,您为尚未加载的表单上的字段设置条件,因此无法使用任何信息。

您可以尝试一种不同的方法,它多次为我伸张正义,我今天继续使用这种方法。

private sub Eventtrigger()
dim frm as form
dim strSQL as string

strsql = "SELECT * " & _
         "FROM TableName " & _
         "WHERE (((TableName.workID) = 3 AND (TableName.OptOut) = -1 AND (TableName.AppointmentDate) > DateSerial(year(date()),Month(Date())-3,1) AND (TableName.AppointmentDate) < DateSerial(year(date()),Month(date())-2,0)));"
'Edited since I missed 2 closing parenthesis

Docmd.openform "FormName",acnormal
set frm = [forms]![FormName] 'New form opened
frm.recordsource = strsql

EndCode:
if not frm is nothing then
set frm = nothing
end if
end sub

以上代码将允许您将表单的记录源设置为新创建的查询。查询将为您过滤结果。

或者,要修复您的变量,只需按如下方式设置您的变量:

strcriteria = "WorkID = 3 AND OptOut = -1 AND " & _
              "AppointmentDate > DateSerial(Year(date()),Month(date())-3,1) AND " & _
              "AppointmentDate < DateSerial(Year(date()),Month(date())-2,0)"

如果您需要最后,请在 AppointmentDate 使用最后:

Last(AppointmentDate) > DateSerial(Year(date()),Month(Date())-3,1) AND " & _
Last(AppointmentDate) < DateSerial(Year(date()),Month(Date())-2,0)

如果这些 methods/repairs 中的任何一个不起作用,请告诉我,我会进行更多挖掘。

我看你还是有问题。让我们看看您给我们的代码。

您的 having 语句正在查找 table 上不存在的字段。您目前拥有:

Having (((tblAppointment.WorkID) = 3) And ((tblCustomer.OptOut) = -1) And " & _
"(LastAppointmentDate > DateSerial(Year(Date()), Month(Date()) - 3, 1) And " & _
"LastAppointmentDate < DateSerial(Year(Date()), Month(Date()) - 2, 0)))" & _

您的 having 子句正在查找 table 上的 LastAppointmentDate。该字段不存在,因为字段名称是 AppointmentDate。在您的 having 语句中更改您的字段名称以匹配字段名称,它应该可以工作。您还缺少括号。

Having (((tblAppointment.WorkID) = 3) AND ((tblCustomer.optout) = -1) AND " & _
"((tblAppointment.AppointmentDate) > DateSerial(Year(Date()), Month(Date()),-3,1)) AND " & _
"((tblAppointment.AppointmentDate) < DateSerial(Year(Date()), Month(Date()),-2,0))) " & _

尝试使用此解决方案来解决您的 having 语句。如果它不起作用,请告诉我,我会做更多的挖掘工作。