You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按钮点击时Requery生效,文本框Change事件时不生效问题排查

问题原因分析

两个控件事件表现不同的核心原因在于文本框值的同步时机:

  • btn_rechercher_Click事件触发时,焦点已经离开entree_recherche_nom文本框,此时文本框的.Value属性已同步为最新输入内容,Requery操作能让查询获取到新的筛选条件,子窗体正常更新。
  • entree_recherche_nom_Change事件触发时,文本框处于编辑状态,焦点仍在控件上:此时控件的.Value属性还是修改前的旧值(.Text属性是当前输入的新内容,但查询默认读取.Value),所以Requery时查询用的还是旧筛选条件,子窗体自然不会更新;直接打开查询时,因为文本框未提交新值,查询读取的也是旧值,因此没有预期结果。
解决方案

方案1:在Change事件中同步文本框的Value与Text属性

修改Change事件代码,强制将当前输入的文本同步到控件的Value属性,确保查询能获取到最新内容:

Private Sub entree_recherche_nom_Change()
    ' 同步当前输入的文本到Value属性
    Me.entree_recherche_nom.Value = Me.entree_recherche_nom.Text
    Me.SF_Liste_Patients.Requery
End Sub

方案2:修改查询语句,明确引用文本框的Text属性

假设主窗体的实际名称为主窗体名称,修改查询语句,直接指定从主窗体文本框的Text属性取值(Change事件触发时文本框处于焦点状态,Text属性可正常访问):

SELECT Patients.num_dossier, Patients.nom, Patients.nom_naissance, Patients.prenom, Patients.date_naissance 
FROM Patients 
WHERE Patients.nom Like Forms!主窗体名称!entree_recherche_nom.Text & "*";

可选优化:减少频繁Requery的性能消耗

如果输入频率高,可添加输入长度判断,避免每次按键都触发Requery:

Private Sub entree_recherche_nom_Change()
    ' 输入至少1个字符时再执行查询更新
    If Len(Me.entree_recherche_nom.Text) >= 1 Then
        Me.entree_recherche_nom.Value = Me.entree_recherche_nom.Text
        Me.SF_Liste_Patients.Requery
    End If
End Sub

内容的提问来源于stack exchange,提问作者Indeblion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:12:23