由于括号导致MS Access抛出错误

时间:2018-11-26 18:00:43

标签: ms-access

当文本中带有括号时,我有一些导航按钮不起作用。文本来自组合框,我从中获取一个值并执行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

1 个答案:

答案 0 :(得分:3)

您滥用BuildCriteria。这并不是要清理字段,而是要复制查询构建器的行为,其中括号确实具有含义(它们调用函数)。

如果要清理字符串,则必须编写自己的字符串清理函数或使用一个预先存在的清理函数(例如Gustav's CSql)。

通常,我建议使用参数。但是,这些不适用于.FindFirst。但是,它们可用于querydefs,并且使用querydef直接查询所需的内容通常比打开记录集然后搜索该记录集要快得多。请参见here,如何在Access中使用参数。