Domino 9 und frühere Versionen > ND7: Entwicklung
ForAll-Schleife wird nicht ausgeführt
Dubidu:
Codeblock wird nicht ausgeführtby Dubidu
Hi an alle!
Ich habe momentan das Problem, dass bei mir eine Funktion bzw. die ForAll-Schleife nicht ausgeführt wird, alles vor der Schleife jedoch schon!
Global initialisiert:
--- Code: ---Public computerWorkerList List As workerComputer ' Used by function generateWorkerComputer
--- Ende Code ---
--- Code: ---Property Get compareWorker(newWorker As String) As Boolean
Print "Hallo Welt!" ' Wird ausgeführt!!!
Forall worker In computerWorkerList
Print "Hello World!" ' Wird nicht ausgeführt!
If worker.GetWorker = newWorker$ Then
msg$ = "Mitarbeiter " & newWorker$ & " wurde schon einem Computer zugeordnet"
Messagebox msg$
compareWorker = False
Else
compareWorker = True
End If
End Forall
End Property
--- Ende Code ---
Es gibt zwei seltsame Verhaltensweisen:
* Das erste "Hallo Welt" wird ausgegeben. Das in der Schleife jedoch nicht!
* Wenn ich den Inhalt der Get-Funktion in die Funktion kopiere, in der sie aufgerufen wird, wird der vollständige Code ausgeführt!
Hier die Funktion, die die Get-Funktion oben aufruft:
--- Code: ---Sub generateWorkerComputer
newWorker$ = Inputbox$("Bitte Mitarbeiter eingeben")
If (compareWorker(newWorker$)) = False Then ' Controlls if worker is already stored
Exit Sub
End If
...
...
End Sub
--- Ende Code ---
Liebe Grüße
Dubidu :)
ata:
... ist in deiner Liste von Objekten den etwas enthalten - ich nehme an es handelt sich bei "computerWorkerList" um ein Objekt oder Array?
Sollte es eine Liste sein, dann muß nur mit ...
IsElement( computerWorkerList( "newWorker" ) )
... geprüft werden.
Bei der Parameterübergabe dimensionierst du "newWorker" als String - im Verlauf des Codes verwendest du dann die implizite Deklaration zusätzlich - völlig unnötig.
Verwende auf jeden Fall "Option Declare" oder "Option Explicit" in den Global Declarations - das ist sauberer - und du brauchst weniger Sonderzeichen zu tippen... ;D ;)
Toni
PS: Hast du auch einen regulären Vornamen? Es würde es persönlicher machen...
koehlerbv:
--- Zitat von: ata am 14.03.08 - 20:00:24 ---PS: Hast du auch einen regulären Vornamen? Es würde es persönlicher machen...
--- Ende Zitat ---
Zustimmung. Das "Dubidu" klingt nur gaga und motiviert nicht zum Antworten. Manche kapieren einfach nicht, dass hinter Forumsregeln auch kluge Gedanken und lange Erfahrungen stecken.
Bernhard
Dubidu:
Hi ata,
danke, für deine Antwort!
--- Zitat von: ata am 14.03.08 - 20:00:24 ---... ist in deiner Liste von Objekten den etwas enthalten - ich nehme an es handelt sich bei "computerWorkerList" um ein Objekt oder Array?
--- Ende Zitat ---
computerWorkerList ist eine Liste, wie ganz oben im Quellcode erkenntlich ist. Hast du vermutlich übersehen(?).
--- Zitat ---Sollte es eine Liste sein, dann muß nur mit ...
IsElement( computerWorkerList( "newWorker" ) )
... geprüft werden.
--- Ende Zitat ---
Stimmt, das ist auch möglich, nur habe ich dann das Problem, dass ich dann nicht mehr ohne weiteres die Möglichkeit habe, Vor- und Nachname zu kontrollieren, falls sich jemand beim Vor- oder Nachnamen vertippt hat. Dann wäre es nämlich noch möglich nachzufragen, ob das der Mitarbeiter ist, den man anlegen wollte.
--- Zitat ---Bei der Parameterübergabe dimensionierst du "newWorker" als String - im Verlauf des Codes verwendest du dann die implizite Deklaration zusätzlich - völlig unnötig.
--- Ende Zitat ---
Ja, stimmt. Danke für den Hinweis.
--- Zitat ---Verwende auf jeden Fall "Option Declare" oder "Option Explicit" in den Global Declarations - das ist sauberer - und du brauchst weniger Sonderzeichen zu tippen... ;D ;)
--- Ende Zitat ---
Das hat den Nachteil, dass ich nicht auf den ersten Blick sehen kann, um welche Variable es sich handelt.
Zu meine Problem nochmal:
Wenn ich die ForAll-Schleife in die generateWorkerComputer-Methode einfüge, dann funktioniert alles einwandfrei. Wenn ich daraus jedoch eine eigene Methode mache, dann wird die Schleife anscheinend erst gar nicht ausgeführt!
--- Zitat ---PS: Hast du auch einen regulären Vornamen? Es würde es persönlicher machen...
--- Ende Zitat ---
Ist es ok, wenn ich mich Giordano nenne? Das ist zwar nicht mein richtiger Vorname, aber das sagt schon etwas über meine Herkunft aus.
Eine gewisse Anonymität ist mir zu Zeiten wie diese einfach wichtig.
Liebe Grüße
Giordano
Dubidu:
Den Fehler habe ich nun gefunden.
Wenn die Liste computerWorkerList leer ist, dann springt der Interpreter erst gar nicht in die Forall-Schleife rein.
In der Forall-Schleife habe ich jedoch compareWorker auf True initialisiert, falls der Mitarbeiter nicht schon angelegt angelegt wurde. Da der Interpreter jedoch nicht in die Schleife reinspringt, wird die Variable niemals auf true gesetzt und so muss ich sicherstellen, dass ich vorher die Variable auf true setze und später in der Schleife ggf. wieder auf false, wenn der Mitarbeiter schon existiert;
--- Code: ---Property Get compareWorker(newWorker As String) As Boolean
compareWorker = True
Forall worker In computerWorkerList
If worker.GetWorker = newWorker$ Then
msg$ = "Mitarbeiter " & newWorker$ & " wurde schon einem Computer zugeordnet"
Messagebox msg$
compareWorker = False
'Else
' compareWorker = True
End If
End Forall
End Property
--- Ende Code ---
Liebe Grüße
Giordano
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln