Ms access 用记录集填充列表框并比较日期

Ms access 用记录集填充列表框并比较日期,ms-access,vba,Ms Access,Vba,我的程序有3个字段,即标题、开始日期和结束日期供用户输入。我希望用结果填充名为“filteredResults”的列表框,这些结果包含平铺等于用户输入的平铺或属于日期范围的记录 请问: 1) 如何使用从查询中获得的记录集填充列表框 2) 如何比较查询中的日期 非常感谢 Private Sub FilterProj_Click() Dim title As String, startDate As Date, endDate As Date Dim db As DAO.Database Dim r

我的程序有3个字段,即标题、开始日期和结束日期供用户输入。我希望用结果填充名为“filteredResults”的列表框,这些结果包含平铺等于用户输入的平铺或属于日期范围的记录

请问:

1) 如何使用从查询中获得的记录集填充列表框

2) 如何比较查询中的日期

非常感谢

Private Sub FilterProj_Click()
Dim title As String, startDate As Date, endDate As Date
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Project WHERE  ORDER BY [ProjectId] DESC")
filteredResults.Recordset = rs
关于问题1:

直接从查询中填充:

Me.mylistbox.rowsource = _
  db.OpenRecordset("SELECT titles FROM Project _
           WHERE title = '" & parameter & "' ORDER BY [ProjectId] DESC")
使用记录集对象填充:

If (rs.RecordCount <> 0) Then 
   Do While Not rs.EOF
      mylistbox.Items.Add(rs.Fields(0).Value)
      rs.MoveNext()
   Loop
End IF
问题2:

不太清楚。我假设您需要一个
参数化的
查询。通过将用户值设置为
where和
子句

  db.OpenRecordset("SELECT titles FROM Project _ 
      WHERE title = '" & parameter & "' ORDER BY [ProjectId] DESC")
或者您可以使用下面的文章在
查询设计视图
本身中设置
参数

  • 参考自

filteredResults
列表框的行源属性设置为使用类似策略的查询

SELECT p.ProjectId, p.title, p.date_field
FROM [Project] AS p
WHERE
    p.title = Forms![YourForm]![txtTitle]
    OR
        (
                p.date_field >= Forms![YourForm]![txtStartDate]
            AND p.date_field <= Forms![YourForm]![txtEndDate]
        )
ORDER BY p.ProjectId DESC
您可以通过命令按钮或文本框的更新后事件触发重新查询


注意:我假设您的
项目
表包含一个名为
title
的文本字段和一个名为
日期\字段
的日期/时间字段。我为文本框编了自己的名字(
txtitle、txtStartDate、txtEndDate
)。将
txtStartDate
txtEndDate
的格式属性设置为“常规日期”。将您的表单名称替换为
您的表单

您好,谢谢您的详细解释!在我的表中有一个StartDate和EndDate列以及一个Title列。在我的表单中,我使用ActiveX控件时间和日期选择器(SP6)获取用户输入的日期。我提出了下面的查询,但每当我打开表单时,它都会给我一个“缺少操作员警告”。错了吗?谢谢从[Project]中选择p.StartDate、p、p.Title、p.endDate作为p,其中p.Title=表单!按项目搜索!ProjTitle或(p.StartDate=Forms!按项目搜索!ProjStartDate)按p.projectd DESCHi订购,感谢您的明确指示和指导!我已将[按项目搜索]包括在其中。但是现在表单提示我输入p的值,Forms!按项目搜索!项目,表格!按项目搜索!项目开始日期,表格!按项目搜索!每次我打开时,都会在弹出框中显示ProjEndDate!使用
表单查询SQL![按项目搜索]!ProjTitle
,我找不到任何方法让Access请求
表单!按项目搜索!ProjTitle
作为参数。您好,感谢您的帮助。我将发布另一个关于参数弹出框的问题。你的回答对我帮助很大。谢谢您好,我可以知道以下表达式对于SQL语句是否正确吗?请按p.projectd Description的顺序选择p.projectd、p.Title、p.Description、p.Client、p.StartDate、p.EndDate、p.DateCreated、p.Status、p.ProjectLead FROM Project作为p,其中p.Title='“&pjtName&'”或(p.StartDate='&EndDate&');在没有日期比较的情况下,它可以正常工作,但使用它会引发“运行时错误'3464”:条件表达式中的数据类型不匹配“留言。startDate是microsoft日期/时间选择器控件,p.startDate是我的数据库中的一个日期列。您需要使用
包装日期。请为这两个日期参数尝试此选项
p.StartDate@Laughy请检查这个,啊,我正在将Microsoft日期/时间选择器控件值与表中的日期进行比较。我已经完成了:startDate=Format(Me.ProjStartDate.Value,“Short Date”),以确保它们的格式已经相同。我已将我的查询更改为:strSQL=“选择p.projectd,p.Title,p.Description,p.Client,p.StartDate,p.EndDate,p.DateCreated,p.Status,p.ProjectLead FROM Project作为p,其中p.Title='”&pjtName&“或(p.StartDate=#'”&EndDate&“)ORDER BY p.projectd DESC;”但它在查询表达式中给出了一个日期语法错误。“怎么了?”可笑的是,如果你使用的是日期选择器,那么你真的没什么好担心的。在这里查看我的帖子。顺便说一句,
表示字符串参数,
#
表示日期。等我到了机器前面,我会试一试的。
SELECT p.ProjectId, p.title, p.date_field
FROM [Project] AS p
WHERE
    p.title = Forms![YourForm]![txtTitle]
    OR
        (
                p.date_field >= Forms![YourForm]![txtStartDate]
            AND p.date_field <= Forms![YourForm]![txtEndDate]
        )
ORDER BY p.ProjectId DESC
Me!filteredResults.Requery