4

我的程序有 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
4

2 回答 2

11

对于问题 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")

或者您可以使用以下文章自行设置parameterquery design view

  • 来自MSDN的参考资料:使用参数化查询
于 2012-12-30T08:53:38.773 回答
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)。txtStartDate将和的 Format 属性设置为“General Date” txtEndDate。用您的表单名称替换YourForm.

于 2012-12-30T16:46:24.193 回答