Brauche Hilfe bei einer Schleife
Liebe Ninox Freunde! Leider komme ich nicht weiter und brauche Hilfe bei einer verschachtelten Schleife.
let me := this;
if 'DIM-BRENNPUNKT ERHALTEN' = true then
for i in select KONTAKT where 'ID NUMMER' = me do
let ii := first(select ANSCHRIFT where Kontakte);
let iii := first(select KONTAKT where Ehepartner);
let new := (create 'BRENNPUNKT-LISTE');
new.(Vorname := i.Vorname);
new.(Nachname := i.Nachname);
new.(Strasse := ii.Strasse);
new.(Hausnummer := ii.Hausnummer);
new.(PLZ := ii.PLZ);
new.(Ort := ii.Ort);
new.(Land := ii.Land);
new.(Ehepartner := iii.Vorname)
end
end
Ich möchte gerne das er mir in dem neun Datensatz in der Tabelle 'BRENNPUNKT-LISTE' die Anschrift und den Ehepartner richtig zuordnet. Momentan ordnet er den ersten aus der Tabelle zu durch den Befehl first(). Was muss ich bei dem select ergänzen?
Die Verknüpfung ist folgende die Tabelle "KONTAKT" ist mit der Tabelle "ANSCHRIFT" 1:N und Tabelle "KONTAKT" ist mit sich selbst N:1 verknüpft "Ehepartner)
9 Antworten
-
Eine kleine Hilfe brauche ich noch!
Ich habe alles soweit hinbekommen, dass er mir die Datensätze anlegt mit den passenden Verknüpfungen. Ich möchte jetzt aber wenn ich auf false umstelle dass er mit nicht die beiden Datensätze löscht sondern nur den letzten der beiden.
Was muss ich da tun?
Mit den löscht er mir die beiden Datensätze:
let me := this;
if 'DIM-BRENNPUNKT ERHALTEN' = true then
for i in select KONTAKT where 'ID NUMMER' = me do
let ii := first(select ANSCHRIFT where Strasse = i.Anschrift.Strasse);
let iii := first(select KONTAKT where Vorname = i.Ehepartner.Vorname);
let new := (create 'BRENNPUNKT-LISTE');
new.(Vorname := i.Vorname);
new.(Nachname := i.Nachname);
new.(Strasse := ii.Strasse);
new.(Hausnummer := ii.Hausnummer);
new.(PLZ := ii.PLZ);
new.(Ort := ii.Ort);
new.(Land := ii.Land);
new.(Ehepartner := iii.Vorname);
new.('MPE PROZESS' := me)
end
else
if 'DIM-BRENNPUNKT ERHALTEN' = false then
for b in select 'BRENNPUNKT-LISTE' where 'MPE PROZESS' = me do
delete b
end
end
endVielen dank!
-
Hallo
Ich verstehe noch nicht ganz was du genau mit dem machst, aber gewisse Dinge sind mir mal aufgefallen.
Ich kenne deine Datenstruktur nicht genau, aber ich denke diese zwei selects brauchst du eigentlich nicht:
let ii := first(select ANSCHRIFT where Strasse = i.Anschrift.Strasse); let iii := first(select KONTAKT where Vorname = i.Ehepartner.Vorname);
Und um nur den letzten Datensatz löscht, kannst du last() verwenden.
Hier so wie ich mir denke das es funktionieren könnte:
let prozess := this; if 'DIM-BRENNPUNKT ERHALTEN' = true then for i in select KONTAKT where 'ID NUMMER' = prozess do let neueListe := (create 'BRENNPUNKT-LISTE'); neueListe.( Vorname := i.Vorname; Nachname := i.Nachname; Strasse := i.Anschrift.Strasse; Hausnummer := i.Anschrift.Hausnummer; PLZ := i.Anschrift.PLZ; Ort := i.Anschrift.Ort; Land := i.Anschrift.Land; Ehepartner := i.Ehepartner; 'MPE PROZESS' := prozess ) end else if 'DIM-BRENNPUNKT ERHALTEN' = false then delete last((select 'BRENNPUNKT-LISTE' where 'MPE PROZESS' = prozess) order by _cd) end end
Gibt es überhaupt mehrere Kontakte mit der selben 'ID NUMMER'? Wenn nicht, dann müsstest du nichtmals eine Schleife machen.
Falls das nicht dem entspricht, was du machen willst, dann gerne nochmals melden.
-
Schau mal, vielleicht so. Mirko
... else if 'DIM-BRENNPUNKT ERHALTEN' = false then delete last((select 'BRENNPUNKT-LISTE' order by number(Nr))['MPE PROZESS' = me]) end ...
-
Vielen Dank für eure Hilfe! Es hat Super funktioniert.
Durch die Beispiele habe ich endlich die Schleifen besser verstanden. Tatsächlich gibt es zwei Kontakte zu der ID NUMMER und ich möchte nur 1 Kontakt von der ID NUMMER stehen haben. Aus der Liste sollen dann die Versandetiketten gedruckt werden.
Noch eine Verständnis Frage: Was bedeutet das Order by _cd. Wo wird dieses cd hergeholt?
Vielen Dank nochmals für die Hilfe!
delete last((select 'BRENNPUNKT-LISTE' where 'MPE PROZESS' = prozess) order by _cd)
Content aside
- Status Answered
- vor 1 JahrZuletzt aktiv
- 9Antworten
- 102Ansichten
-
4
Folge bereits