我的程序有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
答案 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属性设置为txtStartDate
和txtEndDate
的“常规日期”。将表单的名称替换为YourForm
。