3

クエリに次の列があります。

iif(Len([Field1])=0,0,Asc(Mid([Field1] & "",Len([Field1]))))

アイデアは、文字列フィールドの最後の文字の ASCII 値を返す必要があるということです。問題は、Field1 が空白の場合、ステートメント エラーで次のメッセージが表示されることです。「プロシージャ コールまたは引数が無効です (エラー 5)」。フィールドが空白の場合、0 が返されます。

4

2 に答える 2

2

ぜひ、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

注:これは長期的には役立つと思います:)アクセスクエリ入門書

于 2012-12-26T21:58:45.563 に答える