2011-04-29 241 views
1

我有一个运行查询的访问表单。但是,它使用vba代码运行查询,有时它会根据表单中组合框的字段来查找表格中的文本字段,有时还会查找数字字段。禁止访问中的错误消息

我留下了一个提示,如果他们希望搜索文本字段,他们必须输入双引号或代码不起作用。但是,如果用户不遵循这些指示,他们将得到一个弹出窗口,其中带有选项调试和结束的编码问题。我不希望他们看到这个消息。

有没有办法抑制这个错误信息并写我自己的?

编辑: 昏暗dbsCurrent数据库 昏暗打开qryTest作为的QueryDef

varWhere = "WHERE InclusiveParent." & Combo0.Value & "=" & Text2 

    varWhere = "select Location, IcmService, IcmScript, ThresholdVariable, PbxVdn, Domestic, FirstSecondLook, DNIS, Tollfree, Outdial, Description, Carrier, DefaultTollfree, BlockedRoute, Variable3, Variable4, Variable5, Variable9, ValueScrVdn, Cvp from InclusiveParent " & varWhere 

    'Filter frmCustomers based on search criteria 
    'Dim dbsCurrent As Database 
    'Dim qryTest As QueryDef 

    Set dbsCurrent = CurrentDb 
    Set qryTest = dbsCurrent.QueryDefs("Broaden") 
    qryTest.SQL = varWhere 


    'Close frmSearch 
    DoCmd.Close acForm, "SearchDependents" 

InclusiveParent是,我再次查询-ING和扩大是重新查询查询。 SearchDependents是表单的名称。 Combo0是一个组合框,可以让他们选择要过滤的字段。而Text2是他们输入过滤条件的文本字段。但是,并非所有字段都是数字,所以当他们选择按文本字段进行过滤时,必须输入双引号或代码失败。

+1

使用VBA文档了解“出错”或发布代码的说明部分,以增加获得详细建议的机会。 – 2011-04-29 20:42:32

+0

我已经更新了!感谢您的建议 – Zack 2011-04-29 21:08:32

+1

更改用户界面,以便用户不可能输入错误的数据类型。那么你将不必编码错误。也就是说,不要让用户犯错,你可以预见。 – 2011-04-30 19:29:32

回答

1

试试这个,取出纸条需要有引号:

varWhere = "WHERE InclusiveParent." & Combo0.Value & "=" 
If IsNumeric(Text2.Value) Then 
    varWhere = varWhere & Text2.Value 
Else 
    varWhere = varWhere & """" & Text2.Value & """" 
End If 
+0

这工作非常完美!非常感谢你! – Zack 2011-04-29 21:19:48

+0

不客气!不过,这更像是一种“快速和肮脏”的解决方案。如果用户输入一个字符串,他们应该输入一个数字,它会给出一个错误信息。正如在上面的评论中提到的,我建议寻找On Error。 – Bobort 2011-04-29 22:00:57

1

由于Combo0.Value是InclusiveParent查询字段的名称,检查该字段的数据类型。您可以使用该信息来确定是否需要将Text2.Value包装在引号中。通过了解字段的数据类型,您还可以验证Text2.Value ...确保Combo0.Value是数字字段时它是有效的数字。这也可以让你确保当用户只输入Text2.Value的数字时引用该值,但Combo0.Value是一个文本字段。

Select Case dbsCurrent.QueryDefs("InclusiveParent").Fields(Me.Combo0.Value).Type 
Case dbBigInt, dbByte, dbCurrency, dbDecimal, dbDouble, _ 
     dbFloat, dbInteger, dbLong, dbSingle 
    If Not IsNumeric(Me.Text2.Value) Then 
     '* warn user and request a valid number *' 
    Else 
     '* build WHERE clause without quotes around Text2.Value *' 
    End If 
Case dbChar, dbMemo, dbText 
    '* build WHERE clause with quotes around Text2.Value *' 
Case Else 
    '* decide what you want for field which is neither text nor numeric *' 
End Select