2009-03-19 12 views
12

Ich habe ein optionales Feld in einer Datenbank, die ich ein DAO Record Set bin mit herausziehen. Ich muss überprüfen, ob das Feld festgelegt ist, bevor ich es mit anderen Feldern verkette. Bisher habe ich den folgenden Code-Schnipsel, die ich versucht habe, mit dem beide Is und = (das ist die offensichtlich falsche Syntax [[Is | =]]) ohne Erfolg. Es scheint, dass, wenn ich = verwenden Sie es nicht richtig mit Null zu vergleichen, und wenn ich Is verwenden dann klagt er, dass es nicht mit einem Objekt zu vergleichen.Wie können Sie in einem VBA-DAO-Datensatz auf Null überprüfen?

Wenn es einen einfacheren Weg gibt, bin ich völlig offen dafür. prettyName dauert 3 Strings als Parameter und anfangs war ich versuche nur rs.Fields („Middle“) direkt zu übergeben, aber es warf einen Nullwert auf. Ich würde es vorziehen, etwas direkter zu machen, aber das ist das Beste, was ich mir vorstellen kann.

Antwort

27

Wie wäre:

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

Sie auch einen Blick auf this article haben könnte, die eine Erklärung über Null-Werte in Access VBA-Anwendungen hat und wie sie zu behandeln.

7

Für das Beispiel Sie zeigen, würde Nz arbeiten:

thisMiddleInitial = Nz(rs!MiddleInitial,"") 

Oder einfach die Zeichenfolge mit einem leeren String verketten:

thisMiddleInitial = rs!MiddleInitial & "" 
2

Ihre Frage nach Remou beantwortet wurde, scheint mir, aber es kommt mir vor, dass Sie nur versuchen, richtige Verkettung der Namensfelder zu bekommen. In diesem Fall könnten Sie Mid() und Null Propagation in VBA verwenden, um das Ergebnis zu erhalten.

ich nicht getrennte mittlere Initiale Felder nicht verwenden, so meine übliche Name Verkettung Formel lautet:

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

Die „12“ String am Anfang weg geworfen werden wird, wenn Name nicht Null ist und ignoriert wenn es ist null, weil der + Verkettungsoperator Nulls ausbreitet.

Um dies zu verlängern Mitte intials enthalten würde wie folgt aussehen:

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

Angenommen, Ihre UDF von komplizierter Bereinigung nicht von Spitznamen/Abkürzungen/etc zu tun, eine Art, das es ganz, scheinen ersetzen könnten. mich.

+0

Clever Trick, aber zwischen der + auf diesen eher obskuren Unterschied zu verlassen und & Betreiber ist riskant, imo. Wenn jemand später zurückgeht und versucht, den Code aufzuräumen, kann er aus Gründen der Konsistenz entscheiden, alle + mit & zu ersetzen, oder umgekehrt, ohne zu merken, dass er das Verhalten ändert. –

+0

Ich mache mir nicht allzu viele Gedanken über die Möglichkeit, dass jemand, der die Grundlagen der Verkettungsoperatoren von Jet SQL nicht versteht, Dinge vermasselt. Sie könnten ebenso eine UDF, die für den gleichen Zweck erstellt wurde, einfach so vermasseln, weil sie nicht versteht, wie sie funktioniert. –

+0

Einverstanden, zu wissen, wie Betreiber arbeiten, ist ziemlich grundlegende Sachen. – onedaywhen

0

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

Dies funktioniert für mich. Ich benutze MS SQL Datenbank.