2013-06-27 1 views
1

설명 필드에서 상태 값을 가져 오려고하는 경우가 있습니다. 그러나 상태에 따라 일부 열을 변경해야합니다. 그래서 여기 내가VBA/SQL : WHERE 절에서 Function을 사용하여 SQL을 작성하는 방법은 무엇입니까?

설명 예제이 무엇인가 : 관리 EXECUTIVE CTJACKSONVILLE.FL.32216-4041

Function getState(description As String) As String 
    Dim s() As String 
    s = Split(description, ".") 
    getState = s(UBound(s) - 1) 
End Function 

나는 그것이 올바른 국가 약어를 반환 여부를 경우에 따라 일부 열을 변경하고 싶습니다. 값이 유효한 상태를 반환하지 않으면 송장에 플래그를 지정하고 싶습니다. 이렇게 뭔가가 ...

UPDATE tblInvoices 
SET [Invoice Flag] = True 
Where getState(description) <> ValidStates.Abbreviation 

그 라인을 따라 뭔가. 초심자를 유감스럽게 생각합니다. 어떤 도움을 주셔서 감사합니다!

내가 함수가 될 수있는 부울

Function isValidState(st As String) As Boolean 
    Select Case st 
     Case "AL", "FL", "NY" ... 
      isValidState = True 
     Case Else 
      isValidState = False 
    End Select 
End Function 

또 다른 방법은 모든 상태 코드와 테이블을 가지고있다 반환 isValidState()라는 만들 것

답변

2

그래서

Function isValidState(st As String) As Boolean 
    Dim db As Database 
    Dim rs As Recordset 
    Set db = CurrentDb 
    Set rs = db.OpenRecordset("MyStateTable") 
    rs.FindFirst ("StateFieldName = '" & st & "'") 
    If rs.NoMatch Then 
     isValidState = False 
    Else 
     isValidState = True 
    End If 
    rs.Close 
End Function 

(의이 MyStateTable를 호출하자) 검색어는 다음과 같습니다.

UPDATE tblInvoices 
SET [Invoice Flag] = True 
Where isValidState(getState(description)) = True 

편집 :

Function getState(description As String) As String 
    Dim s() As String 
    s = Split(description, ".") 
    If (UBound(s) > 1) then 
     getState = s(UBound(s) - 1) 
    Else 
     getState = vbNullString 'Or change this to "" or something else that makes sense for your usage' 
    End if 
End Function 
+0

죄송합니다 - 어떻게 내가 이것을 Invoice Flag를 True로 변경해야하는 SQL 쿼리에 넣을 수 있습니까? 내 질문에 것 같아요, SQL 쿼리 내에서 함수를 실행하는 결합 할 수 있습니까? – user2296381

+0

우수, 감사합니다! – user2296381

+0

죄송합니다. 마지막 문제가 하나 있습니다. 함수를 실행하지 않았으므로 Access에서 따옴표를 붙일 필요가 있는지 모르겠습니다. 계속 오류가 발생합니다. "컴파일 오류 : 예상 식"... 따옴표가 필요한 위치를 모르겠다. & CurrentDb.Execute "UPDATE Processing"& _ "SET [Comments] = '모든 PO 회선을 검토하십시오. [Invoice Flag] = True "& _ "WHERE "& isValidState (getState (&"[Inv Description] "&)) – user2296381

관련 문제