Как отфильтровать нулевые элементы массива в MS Access - PullRequest
2 голосов
/ 25 ноября 2008

Я генерирую заголовки из нескольких других полей и хочу "правильный" способ сделать:

Me.Title.Value = Join(Array([Conference], [Speaker], partstr), " - ")

За исключением того, что любой из [conference], [speaker] или partstr может иметь значение null, и я не хочу лишних "-". Есть ли функции, которые сделают эту работу простой?

Ответы [ 2 ]

3 голосов
/ 25 ноября 2008

Нет - вам придется проверить каждый из них, а затем очистить в конце

Dim Temp As String

If Not IsNull([Conference]) Then
  Temp = Temp & [Conference] & " - "
End If

If Not IsNull([Speaker]) Then
  Temp = Temp & [Speaker] & " - "
End If

If Not IsNull(partstr) Then
  Temp = Temp & partstr & " - "
End If

If Temp > "" then
  Me.Title.Value = Left(Temp, Len(Temp) - 3)
Else
  Me.Title.Value = Null
End If

Пересмотрен с общей функцией:

Public Function JoinEx(ByVal pArray As Variant, ByVal pDelimiter As String) As String

  Dim sTemp As String
  Dim iCtr As Integer

  For iCtr = 0 To UBound(pArray)
    If Not IsNull(pArray(iCtr)) Then
      sTemp = sTemp & pArray(iCtr) & pDelimiter
    End If
  Next

  If sTemp > "" Then
   JoinEx = Left(sTemp, Len(sTemp) - Len(pDelimiter))
  End If

End Function

Пример вызова:

 JoinEx(Array("one","two","three"), " - ")  'Returns "One - Two - Three"
 JoinEx(Array(null,"two","three"), " - ")  'Returns "Two - Three"
0 голосов
/ 25 ноября 2008

Полное переписывание, и на этот раз должным образом проверено:

 IIf(IsNull(Partstr), IIf(IsNull(Conference), Speaker, Conference & " - " + Speaker), Conference + " - " & Speaker + " - " & Partstr)
...