クエリに次の列があります。
iif(Len([Field1])=0,0,Asc(Mid([Field1] & "",Len([Field1]))))
アイデアは、文字列フィールドの最後の文字の ASCII 値を返す必要があるということです。問題は、Field1 が空白の場合、ステートメント エラーで次のメッセージが表示されることです。「プロシージャ コールまたは引数が無効です (エラー 5)」。フィールドが空白の場合、0 が返されます。
クエリに次の列があります。
iif(Len([Field1])=0,0,Asc(Mid([Field1] & "",Len([Field1]))))
アイデアは、文字列フィールドの最後の文字の ASCII 値を返す必要があるということです。問題は、Field1 が空白の場合、ステートメント エラーで次のメッセージが表示されることです。「プロシージャ コールまたは引数が無効です (エラー 5)」。フィールドが空白の場合、0 が返されます。
ぜひ、HansUpの答えがあります。:)
..このクエリの航海のどの時点でも、クエリIIF
は非常に長くなります...;)ここでは、UDfunction
を使用するで先頭に立って開始しますREGEX
。あなたの場合、最も重要な側面は入力を検証することです-値を取得することはあまりありませんASCII
。主に最後に関心があるのでcharacter
、Field1にalphanumeric
値が含まれていて、最後の文字が。digit
ではspecial character
なく、である場合はどうなりますかString
。さて、念のために、にのみStrings
応答する次の関数でそれを検証できます。もう1つの利点は、データベース内でこの関数を再利用できることです。
おそらくこれは本当にあなたのプロセスを複雑にしている:D
Option Compare Database
Option Explicit
Public Function GetASCII(strField1 As String) As Integer
Dim regex As Object
Dim strTemp As String
Set regex = CreateObject("vbscript.regexp")
'--assume strField1 = "hola", you may enter different types
'-- of values to test e.g. "hola1, hola$ , hola;
With regex
.IgnoreCase = True
.Global = True
.Pattern = "[a-zA-Z]+"
'--check for null
Select Case IsNull(strField1) '-- validates any other datatype than String
Case True
GetASCII = 0
Case Else
Select Case IsError(strField1)
Case True
GetASCII = 0
Case Else
Select Case IsEmpty(strField1)
Case True
GetASCII = 0
'--check if entire string is String
'--only (no special characters, digits)
'--you may change this to only check the
'----last character if your Field1 is alphanumeric
Case Else
Select Case .Test(strField1)
Case True
strTemp = Mid(strField1, Len(strField1), 1)
GetASCII = Asc(strTemp)
Case Else
GetASCII = 0
End Select
End Select
End Select
End Select
End With
Set regex = Nothing
End Function
注:これは長期的には役立つと思います:)アクセスクエリ入門書。