0

IBM Notesという名前の Access テーブルからNotes First NameNotes Middle NameNotes Surnameフィールドを連結するヘルパー関数があります。

ヘルパー自体は正常に動作しますが、前述のフィールドのいずれかに空のエントリがある行でそれを呼び出そうとすると、ヘルパーは呼び出されません。

ヘルパーの呼び出しに使用される SQL を修正して、パラメーターとして使用されるフィールドが空であるかどうかに関係なく結果を返すようにするにはどうすればよいですか?

ヘルパーを呼び出すために使用される SQL は次のとおりです (DBに設定されていますCurrentDb) -

DB.Execute "UPDATE [IBM Notes] SET [Notes Full Name] = NotesFullName([Notes First Name], [Notes Middle Name], [Notes Surname])"

そして、ここにヘルパー自体があります-

Function NotesFullName(Optional ByVal firstName As String = "", _
                       Optional ByVal middleName As String = "", _
                       Optional ByVal surname As String = "") As String

    NotesFullName = Trim( _
        IIf(Not firstName = "", firstName & " ", "") & _
        IIf(Not middleName = "", middleName & " ", "") & _
        IIf(Not surname = "", surname, "") _
    )

End Function
4

2 に答える 2

1

これは、空のフィールドがNullであるためです。これを試して:

Function NotesFullName(Optional ByVal firstName As Variant = Null, _
                       Optional ByVal middleName As Variant = Null, _
                       Optional ByVal surName As Variant = Null) As Variant

    If IsNull(firstName & middleName & surName) Then
        NotesFullName = Null
    Else
        NotesFullName = Trim( _
            IIf(Not IsNull(firstName), firstName & " ", "") & _
            IIf(Not IsNull(middleName), middleName & " ", "") & _
            IIf(Not IsNull(surName), surName, "") _
        )
    End If

End Function
于 2016-03-10T11:49:13.020 に答える
1

このクエリは、ヘルパー関数を必要とせずに同じことを行いますか?

UPDATE [IBM Notes] 
SET [IBM Notes].[Notes Full Name] = 
    TRIM(Replace(Nz([Notes First Name],"") & " " & 
    Nz([Notes Middle Name],"") & " " & 
    Nz([Notes Surname],""),"  "," "))

注意: Replace 関数は、ダブル スペースをシングル スペースに置き換えます。

編集: この例NZでは、Null フィールドを空の文字列に置き換えています。

于 2016-03-10T11:59:40.930 に答える