2011-04-29 88 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