Ms access 在access窗体中使用sql查询时询问参数的弹出框

Ms access 在access窗体中使用sql查询时询问参数的弹出框,ms-access,vba,Ms Access,Vba,我有一个表格,其中有3项内容供我的用户填写: 名为ProjectName 两个ActiveX控件对象(Microsoft Time和Date picker control 6.0)分别称为ProjStartDate和ProjEndDate 在我的用户输入以上任一项后,他们可以单击一个按钮,该按钮将调用表单中列表框对象的重新查询,该表单将显示过滤结果 我已经将listbox的行源类型设置为“Table/Query”,其行源设置为下面的SQL查询: SELECT p.Title FROM Proje

我有一个表格,其中有3项内容供我的用户填写:

  • 名为
    ProjectName

  • 两个ActiveX控件对象(Microsoft Time和Date picker control 6.0)分别称为
    ProjStartDate
    ProjEndDate

  • 在我的用户输入以上任一项后,他们可以单击一个按钮,该按钮将调用表单中列表框对象的重新查询,该表单将显示过滤结果

    我已经将listbox的行源类型设置为“Table/Query”,其行源设置为下面的SQL查询:

    SELECT p.Title
    FROM Project AS p
    WHERE
      p.Title = [Forms]![Search by project]![ProjectName] 
      OR (p.StartDate <= [Forms]![Search by project]![ProjStartDate]
          AND p.EndDate >= [Forms]![Search by project]![ProjEndDate])
    ORDER BY
      p.ProjectId DESC; 
    
    选择p.标题
    从项目作为p
    哪里
    p、 标题=[表格]![按项目搜索]![项目名称]
    或者(p.StartDate=[Forms]![Search by project]![ProjEndDate])
    订购人
    p、 投影描述;
    
    但是,每次我输入表单时,它都会弹出一个框提示我输入名为
    Forms的参数!按项目搜索!项目名称
    表单!按项目搜索!ProjStartDate
    表单!按项目搜索!ProjEndDate
    。如果我输入的参数正确,比如说项目名称,列表框将显示正确的筛选结果


    此外,即使我在
    ProjectName
    文本框中输入正确的关键字并重新查询,参数弹出框仍然会出现。有人知道如何解决这个问题吗?提前多谢

    我第一次写这个答案是基于所有控件都包含在一个表单中的假设。但是,如果列表框位于子窗体上,则在子窗体首次打开时,父窗体的控件(例如
    [Forms]![Search by project]![ProjectName]
    )尚不可用。如果是这种情况,您可以将列表框行源属性保留为空,并等待父窗体的表单加载事件将
    SELECT
    语句分配给列表框行源。或者在用户单击命令按钮之前,将列表框的行源保留为空

    这个答案的其余部分是关于诊断命名问题。由于您在注释中指出,查询在特定时间运行时可以工作,因此我认为根本不涉及命名,但将保留它,以防对其他人有所帮助

    打开即时窗口(Ctrl+g)并调查db引擎找不到这些参数的原因

    在表单视图中打开“按项目搜索”表单后,只需检查其
    .Name
    属性即可验证Access是否看到了您期望的名称。如果您和Access都同意表单的名称,您将得到此

    ? Forms![Search by project].Name
    Search by project
    
    OTOH,如果Access认为表单具有不同的名称,则该尝试将触发错误。如果出现这种情况,请检查Access看到的表单名称。这将为您提供所有打开表单的名称:

    for each f in Forms : ? f.Name : next
    
    最后,检查这些表单控件的值。假设“按项目搜索”确实是正确的表单名称

    ? Forms![Search by project]!ProjectName
    ? Forms![Search by project]!ProjStartDate
    ? Forms![Search by project]!ProjEndDate
    

    某物命名错误或拼写错误。如果您使用的是Access 2010,您可以在查询设计窗口中使用intellisense,如果不是,请检查表单上的名称。特别是,检查[按项目搜索],它似乎是可能的罪魁祸首。假设您在运行此操作时打开了表单?如果我在表单视图中测试查询,则查询在没有任何参数弹出框的情况下工作。但是,如果我在启动表单时运行它来测试它,它会再次给我弹出框。这可能与我使用包含有问题表单的选项卡的主页有关吗?嗨,我在哪里运行这些命令?对不起,我是新手。不管怎样,我发现我的表单确实被命名为[按项目搜索]…很抱歉我走错了方向。请参阅更新。另一方面,我认为您应该学习使用即时窗口,因为它对于故障排除非常有用,并且您可以在这里查看
    Debug.Print
    语句的输出。您可以使用Ctrl+g打开即时窗口,然后键入
    ?形式![按项目搜索]!ProjectName
    并按Enter键。啊,这非常有帮助。谢谢