按钮点击时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
相关产品推荐
相关产品推荐

