PDA

Vollständige Version anzeigen : Null oder nicht Null ??


Bernie0815
23.06.2001, 23:27
Hallo

Ich möchte gern ein Feld im Hauptformular aus dem Unterformular heraus abfragen ob es Leer ist.

Nur muß ich da wohl etwas grundlegend falsch machen. :

Dim tpm

Me.Kunde_Firma = Forms!Hauptformular!Firma
If Forms!Hauptformular!Mitarbeiter = Null Then GoTo 2 Else
Me.Mitarbeiter = Forms!Hauptformular!Mitarbeiter

If Me.Mitarbeiterprovisionssatz <= 1 Then GoTo 1 Else
GoTo 2

1:
Me.Mitarbeiterprovisionssatz = DLookup("[Provisionssatz]", "Mitarbeiter", "[Mitarbeiter]= Nachname")
2:
Me.Kunde_Name = Forms!Hauptformular!Titel & " " & Forms!Hauptformular!Vorname & " " & Forms!Hauptformular!Nachname

usw.


Die Abfrage ob das Feld Mitarbeiter welches ein Kombinationsfeld ist leer ist funktioniert nicht so wie sie soll. Obwohl das Feld Mitarbeiter im Hauptformular Leer, also Null ist, wird der Sprung nach 2 nicht ausgeführt, sondern er arbeitet nach Else weiter ab.
Was mache ich falsch ???

Bernie

Nockenwelle
24.06.2001, 01:48
Hi,

es gibt kein
Mitarbeiter = Null
nur ein
isnull(Mitarbeiter)
Mit irgentwas=Null bekommst du niemals ein True heraus

Die Funktion isnull ist ein boolean und gibt dir ein true zurück, wenn dein Feld Null ist

Cu
PS:

Frage auch mal nach "" (ist zwar das gleiche bei Textfeldern, aber manchmal anscheinend nicht)
Bin auch schon öfter drauf reingefallen

Nockenwelle
24.06.2001, 02:01
Hi,
ich nochmal. Mir sind deine GOTO Befehle aufgefallen.
Tu dir selbst einen gefallen und lass die Finger davon!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Der einzige sinnige GOTO Befehl ist
on error goto fehlerabfangen

Benutze besser die select case Methode oder sonstige logigalgorithmen

Cu

Bernie0815
24.06.2001, 18:35
Hallo
Danke für den Tip, jetzt funktioniert es.

Das mit den If Then Anweisungen kommt noch aus meiner Zeit mit dem C64 nenne es einfach Faulheit. (Bin natürlich Anfänger, und If Then ist mir halt bekannt)Ich werde mir daher die Sache mit select case mal ansehen. Gibt es Probleme mit If Then Anweisungen ??

Bernie

A.S.
25.06.2001, 05:43
Hallo Bernie,

nein, mit If-Then-Anweisungen gibt es keine Probleme. Aber die Programmierung mit GoTo-Anweisungen wird auch Spagetti-Code-Programming genannt, da man damit so schöne gordische Knoten ins Coding bekommt und ein anderer als der erstellende Programmierer sich meist nicht mit dem Coding zurechtfindet ;)

Besser ist es da, zum Beispiel Dein Coding wie folgt aufzubauen:
Me.Kunde_Firma = Forms!Hauptformular!Firma
If IsNull(Forms!Hauptformular!Mitarbeiter) Then
Me.Kunde_Name = Forms!Hauptformular!Titel & " " & _
Forms!Hauptformular!Vorname & " " & Forms!Hauptformular!Nachname
Else
Me.Mitarbeiter = Forms!Hauptformular!Mitarbeiter
End If

If Me.Mitarbeiterprovisionssatz <= 1 Then
Me.Mitarbeiterprovisionssatz = DLookup("[Provisionssatz]", _
"Mitarbeiter", "[Mitarbeiter]= Nachname")
Else
Me.Kunde_Name = Forms!Hauptformular!Titel & " " & _
Forms!Hauptformular!Vorname & " " & Forms!Hauptformular!Nachname
End If


Das ist z.B. das Ergebnis Deines Codes für mich. Wenn er nicht dem von Dir gewünschten Entspricht, dann wg. Spagetti-Coding ;)


------------------
HTH

Arno

Bernie0815
25.06.2001, 14:02
Hallo,

Stimmt ist wirklich übersichtlicher ohne GOTO. Ich werde das Ding also etwas umbauen. Ganz ohne GOTO gehts aber wohl nicht, da ich einige Sprungmarken eingebaut habe welche in jedem Falle ausgefürt werden müssen, nur ebend bei manchen Bedingungen in anderer Reihenfolge. Aber ich denke das ich sicherlich etwa 50 GOTO´s (Schähm) ausmerzen kann.

Bernie

Birgit Dannenberg
26.06.2001, 07:17
Sieh Dir dazu mal den Befehl GoSub an. Ist eine interessante Alternative!

Gruss Birgit

A.S.
26.06.2001, 08:00
Hallo Bernie,

oder die allgemeingültigen Codingteile in eigene Subs oder Functions aufteilen und als "normalen" Befehl aufrufen.

Gruß

Arno