当文本中带有括号时,我有一些导航按钮不起作用。文本来自组合框,我从中获取一个值并执行findfirst。直到我用括号括起数值,这一直很好。例如3D-1(A)-461将引发2423错误。
最初,我要使用recordset.movenext,但是我有三个子窗体必须重新查询,并认为这是最好的方法。
感谢您的帮助。
If TCTOfilt.ListIndex <> TCTOfilt.ListIndex - 1 Then
TCTOfilt.ListIndex = TCTOfilt.ListIndex + 1
Forms!frmMasterDashboard.Requery
Forms!frmMasterDashboard!subFrmApplicNotes.Form.Requery
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset(Name:="ACbyTCTO", Type:=RecordsetTypeEnum.dbOpenDynaset)
rst.FindFirst Criteria:=BuildCriteria(Field:="[TCTO Number]", FieldType:=dbText, Expression:=Me.TCTOfilt)
If Not rst.NoMatch Then
Me!subFrmOEMNOI.Form.Requery
Else
Exit Sub
End If
Else
TCTOfilt.ListIndex = TCTOfilt.ListCount + 1
Forms!frmMasterDashboard.Requery
Forms!frmMasterDashboard!subFrmApplicNotes.Form.Requery
Set rst = CurrentDb.OpenRecordset(Name:="ACbyTCTO", Type:=RecordsetTypeEnum.dbOpenDynaset)
rst.FindFirst Criteria:=BuildCriteria(Field:="[TCTO Number]", FieldType:=dbText, Expression:=Me.TCTOfilt)
If Not rst.NoMatch Then
Me!subFrmOEMNOI.Form.Requery
Else
Exit Sub
End If
End If
答案 0 :(得分:3)
您滥用BuildCriteria
。这并不是要清理字段,而是要复制查询构建器的行为,其中括号确实具有含义(它们调用函数)。
如果要清理字符串,则必须编写自己的字符串清理函数或使用一个预先存在的清理函数(例如Gustav's CSql)。
通常,我建议使用参数。但是,这些不适用于.FindFirst
。但是,它们可用于querydefs,并且使用querydef直接查询所需的内容通常比打开记录集然后搜索该记录集要快得多。请参见here,如何在Access中使用参数。