其他分享
首页 > 其他分享> > Access:如何接收文本框作为查询条件,并实时刷新查询

Access:如何接收文本框作为查询条件,并实时刷新查询

作者:互联网

今天,想设计一个窗体,窗体中有个文本框,然后按文本框的条件实时更新查询清单。

在上图输入时间

查询结果就实时刷新,这个不是在窗体中刷新,而是直接刷新Access默认的查询。

方法一:

代码部分:

1,删除旧的查询(我不知道这个是不是很好,但是只有删除旧的,才能使用CreateQueryDef

Dim qryname, sql As String
Dim Qry1 As QueryDef
For Each Qry1 In CurrentDb.QueryDefs
If Qry1.Name = "按日期查询" Then
CurrentDb.QueryDefs.Delete Qry1.Name
Exit For
End If
Next

2,刷新项目清单中的Query,因为新建Query很快会被执行,所有基本感觉不到被删除了。

CurrentDb.QueryDefs.Refresh

3,新建一个和之前名字一样的Query:

sql = "select * from 日记账表 where 日期= #" & Text0.Value & "#"
qryname = "按日期查询"
CurrentDb.CreateQueryDef qryname, sql

4,判断指定的Query是否被打开,如果打开状态,我们就关闭它。

为什么呢?

查询的清单我不知道怎么实时刷新?但是我知道关闭查询,再打开查询,查询结果就会被刷新了。因为速度很快,基本感觉不到关闭>重新打开的这个过程。

On Error Resume Next
If SysCmd(acSysCmdGetObjectState, acQuery, Qry1.Name) <> 0 Then
DoCmd.Close acQuery, Qry1.Name
End If

5,重新执行查询,并重新打开:

DoCmd.OpenQuery Qry1.Name

第二种方法:

1,直接在QBE中设计(直接以某个控件的值为条件)

SQL代码等于:

SELECT 日记账表.*
FROM 账户列表 INNER JOIN 日记账表 ON 账户列表.账户编号 = 日记账表.账户编号
WHERE (((日记账表.日期)=[Forms]![Form1]![Text0]));

2,在VBE中输入代码:

Tips:ADODB那几句连接数据库不需要写的!放在这个仅做强化记忆用!

Private Sub Command2_Click()

'Dim str
'Dim rs As New ADODB.Recordset
'Set rs = New ADODB.Recordset
'str = "select * from 日记账表"
'rs.Open str, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
On Error Resume Next
If SysCmd(acSysCmdGetObjectState, acQuery, "Q1") <> 0 Then
    DoCmd.Close acQuery, "Q1"
End If
DoCmd.OpenQuery "Q1"

End Sub

小结:

1,方法一是使用VBA和SQL新建一个查询

2,方法二是直接使用Access的查询设计已有的查询。

个人偏好,还是喜欢方法一,可以代码一路撸到底。

标签:Dim,Name,文本框,查询,Access,刷新,日记账,Qry1
来源: https://blog.csdn.net/bosney/article/details/118328445