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

时间:2012-12-30 08:32:06

标签: vba ms-access 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 rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Project WHERE  ORDER BY [ProjectId] DESC")
filteredResults.Recordset = rs

2 个答案:

答案 0 :(得分:9)

问题1:

直接从查询中填充:

Me.mylistbox.rowsource = _
  db.OpenRecordset("SELECT titles FROM Project _
           WHERE title = '" & parameter & "' ORDER BY [ProjectId] DESC")

使用Recordset对象填充:

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

另一种方法:

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim strSQL As String

strSQL = "SELECT titles from Projects _
       WHERE title = '" & parameter & "' ORDER BY [ProjectId] DESC"

Set db = CurrentDb
Set qdf = CurrentDb.CreateQueryDef("", strSQL)
qdf.Connect = strConn

Set rs = qdf.OpenRecordset()

Set Me.mylistbox.Recordset = rs

问题2:

不太清楚。我假设您需要parameterized查询。通过将用户的值设置为where, and子句。

  db.OpenRecordset("SELECT titles FROM Project _ 
      WHERE title = '" & parameter & "' ORDER BY [ProjectId] DESC")

或者您可以使用以下文章在parameter中设置query design view

答案 1 :(得分:3)

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

每当您想要更新filteredResults的内容以反映用户提交的标题,开始日期和/或结束日期的更改时,您可以重新查询列表框:

Me!filteredResults.Requery

您可以从命令按钮或文本框的更新后事件触发重新查询。

注意我假设您的Project表包含名为title的文本字段和名为date_field的日期/时间字段。我为文本框创建了自己的名字(txtTitle, txtStartDate, txtEndDate)。将Format属性设置为txtStartDatetxtEndDate的“常规日期”。将表单的名称替换为YourForm