3

ここに非常に単純な SQL クエリがあります。ポイントは、請求書の説明を調べて、有効な状態でない場合に請求書にフラグを立てることです。以下は私のコードと関数です:

クエリ:

CurrentDb.Execute "UPDATE Processing " & _
"SET [Invoice Flag] = True " & _
"WHERE isValidState(getState([Inv Description])) = False"

請求書の説明から請求書の説明の分割文字列への getState

Public 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 = " "
    End If
End Function

IsValidState 有効な状態かどうかをブール値で返す

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

手がかりや助けをいただければ幸いです。日付に関しては、このエラーが頻繁に発生するようですが、ここではそうではありません。データ レコードには null の行が含まれている可能性があります。いずれにせよ、私はそれらの空の説明について何もできません-また、それがどのように役割を果たすべきかについてもわかりません. IF/ELSE ステートメントがあるため、単純にブール値を返し、請求書にフラグを立てる必要があります。

4

2 に答える 2

2

[Inv Description] ができる場合Null、関数を次のように宣言することはできません

Public Function getState(description As String) As String

次のように宣言する必要があります

Public Function getState(description As Variant) As String

そして、次のようなものを使用してNullケースを処理します

If IsNull(description) Then
    getState = ""  ' or whatever
Else
    ' remaining code as before
于 2013-06-27T17:16:46.103 に答える
2

SELECT文ではなく文で開始して、SQL エラーをトラブルシューティングしますUPDATE。新しいクエリを作成し、SQL ビューに切り替えて、次の SQL を貼り付けます。

SELECT
    *,
    getState(Nz([Inv Description],'')) AS state_code
FROM Processing
WHERE
    isValidState(getState(Nz([Inv Description],''))) = False

その式は、関数で要求される文字列にNz()Null を変換します。(null は文字列ではありません。)[Inv Description]getState()

エラーが発生しない場合は、同じ句 UPDATEを使用するようにクエリを修正してください。WHERE

于 2013-06-27T17:46:25.610 に答える