Domanda

Ho un campo opzionale in un database che sto estraendo usando un set di record DAO. Devo verificare se il campo è impostato o meno prima di concatenarlo con altri campi. Finora ho il seguente frammento di codice che ho provato con Is e = (questa è la sintassi ovviamente errata [[Is | =]]) senza alcun risultato. Sembra che se uso Null non comparerà correttamente con <=> e se uso <=> allora si lamenta che non sta confrontando con un oggetto.

While Not rs.EOF
    If rs.Fields("MiddleInitial") [[Is | =]] Null Then thisMiddleInitial = "" Else thisMiddleInitial = rs.Fields("MiddleInitial")
    If prettyName(myLastName, myFirstName, myMiddleInitial) = prettyName(rs.Fields("LastName"), rs.Fields("FirstName"), thisMiddleInitial) Then
        MsgBox "Yay!"
    End If
    rs.MoveNext
Wend

Se c'è un modo più semplice per farlo, ne sono totalmente aperto. prettyName prende 3 stringhe come parametri e inizialmente stavo solo provando a passare rs.Fields (" MiddleName ") direttamente ma vomitava a un valore Null. Preferirei fare qualcosa di più diretto come quello, ma questo è il migliore che ho potuto inventare.

È stato utile?

Soluzione

Che ne dici di:

IsNull(rs.Fields("MiddleInitial").Value)

Puoi anche dare un'occhiata a questo articolo che contiene alcune spiegazioni sui valori null nelle app Access VBA e su come gestirle.

Altri suggerimenti

Nell'esempio che mostri, Nz funzionerebbe:

    thisMiddleInitial = Nz(rs!MiddleInitial,"")

O semplicemente concatenando la stringa con una stringa vuota:

    thisMiddleInitial = rs!MiddleInitial & ""

Mi sembra che Remou abbia risposto alla tua domanda, ma mi viene in mente che potresti semplicemente provare a ottenere la corretta concatenazione dei campi dei nomi. In tal caso, è possibile utilizzare la propagazione Mid () e Null in VBA per ottenere il risultato.

Non utilizzo campi iniziali medi separati, quindi la mia solita formula di concatenazione dei nomi è:

Mid(("12" + LastName) & (", " + FirstName), 3)

Il " 12 " la stringa all'inizio verrà eliminata se LastName non è Null e ignorata se è null, poiché l'operatore di concatenazione + propaga Nulls

Estenderlo per includere le intime intermedie sarebbe simile al seguente:

Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3)

Supponendo che il tuo UDF non stia facendo una sorta di complicata pulizia di soprannomi / abbreviazioni / ecc., questo potrebbe sostituirlo del tutto, mi sembra.

If rst.Fields("MiddleInitial").Value = "Null" Then

Questo funziona per me. Uso il database MS SQL.

Penso che l'opzione NoMatch potrebbe funzionare in questa situazione:

Se rs.NoMatch = True Allora

Preferisco utilizzare quanto segue per tenere conto sia dei valori di stringa Null che Empty. È un buon controllo utilizzare moduli che raccolgono valori dagli utenti.

If Trim(rs.Fields("MiddleInitial") & "") = "" then
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top