2011-04-29 5 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 내가 다시 쿼리는 - 보내고 및 폭을 확대한다는 다시 쿼리입니다 해요 쿼리만큼. SearchDependents는 양식의 이름입니다. Combo0은 필터링 할 필드를 선택할 수있는 콤보 상자입니다. Text2는 필터 조건을 입력하는 텍스트 필드입니다. 그러나 모든 필드가 숫자가 아니므로 텍스트 필드로 필터링하도록 선택하면 큰 따옴표를 입력해야합니다. 그렇지 않으면 코드가 실패합니다.

+1

"오류 발생"에 대해 알아 보거나 코드의 설명 부분을 게시하여 자세한 조언을 얻을 기회를 늘리십시오. –

+0

업데이트했습니다. 제안 해 주셔서 감사합니다. – Zack

+1

사용자가 잘못된 데이터 유형을 넣을 수 없도록 UI를 변경하십시오. 그러면 오류를 코드 작성하지 않아도됩니다. 즉, 사용자가 예상 할 수있는 실수를하지 않도록하십시오. –

답변

1

따옴표를 요구하는이 시도하고 메모를 제거 :

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

완벽하게 작동했습니다! 정말 고마워요! – Zack

+0

당신을 진심으로 환영합니다! 그래도이 방법은 "빠르고 더러운"솔루션입니다. 사용자가 숫자를 입력해야하는 문자열을 입력하면 오류 메시지가 표시됩니다. 위의 설명에서 언급했듯이 On Error를 살펴 보는 것이 좋습니다. – Bobort

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 
관련 문제