2013-06-27 39 views
1

我有一种情况,我试图从描述字段拉状态值。但是,我需要根据状态更改一些列。因此,这里是我VBA/SQL:如何在WHERE子句中使用Function来构建SQL?

说明示例:管理执行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 

沿着这些线的东西。对新手而言很抱歉。任何帮助表示赞赏!

回答

2

我想创建一个函数调用isValidState()返回一个布尔值

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

另一种方式可以是让所有的状态代码表(我们称之为MyStateTable

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 

所以您的查询看起来像

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

对不起 - 我怎么会把这个到SQL查询,我需要将发票标志更改为真?我想我的问题是,我怎么结合运行SQL查询中的函数? – user2296381

+0

非常好,谢谢! – user2296381

+0

对不起,有最后一个问题:因为我没有运行一个函数 - 我不知道什么需要引用,并在Access中。我不断收到一个错误:“编译错误:期望的表达式”...不知道我需要报价和执行“更新处理”&_ “SET [注释] ='查看所有采购订单行。状态无法确定',[发票标志] = True“&_ ”WHERE“&isValidState(getState(&”[Inv Description]“)) – user2296381