Select Abfrage mit anschließender Select Abfrage...
Hallo Zusammen,
also richtig durchgestiegen bin ich hier noch nicht :-( und die Suchfunktion liefert mir alles mögliche, nur nicht was ich suche.
Ich habe 3 Tabellen:
Kunde -> liefert "Nr Kunde"
Akte -> suche nach "Nr Kunde" und finde x mal verschiedene "Aktennummer"
Buchung -> suche nach "Aktennummer" und wiederhole für alle vorher gefundenen Aktennummern (jo, und das tut nicht).
let p := this.'Nr Kunde';
let p1 := (select Akten where 'Nr Kunde' = p);
let p2 := (select Buchung where Aktennummer = p1.Aktennummer);
Ich erinnere mich sowas fürher über schleifen gelöst zu haben, aber wie gesagt bin ich hier nicht fündig geworden und jegliches Probieren verlief erfolglos. Kann mir bitte kurz jemand den erlösenden Tipp geben?
Vielen Dank schonmal.
9 Antworten
-
Hallo Rene,
Die Tabellen sind doch miteinander verknüpft oder? Wie heißen die Verknüpfungsfelder? wenn du nichts geändert hast dann sollten die Verknüpfungen genauso heißen wie die Tabellen. Wenn du jetzt in der Tabelle Kunde eine Ansicht über allen Buchungen haben möchtest, dann wäre die Formel für die Ansicht:
---l
et me:=this;
select Buchung where Akten.Kunde=me
---Leo
-
Hi Leo
Die sind nicht verknüpft. Also ich könnte die Tabellen an sich schon verknüpfen, aber dann funktioniert die Abfrage von dir auch nicht. Bzw, wie müsste ich genau verknüpfen?
Die Datensätze selbst (händisch) zu verknüpfen geht nicht. Die sind aus unserer Software exportiert und in Ninox imporiert. Das sind mehrere hundert Kunden, Akten und Buchungen.
-
Also zuerst, danke für die Antwort. Und PS: Ich habe die Tabellen verknüpft um die Abfrage zu testen, aber es wurde kein Ergebnis angezeigt. Nur ne leere Ansicht (mit den leeren Feldern der Buchung-Tabelle).
-
Hallo Rene,
ok, wenn die Tabellen nicht verknüpft sind:
---
let p := this.'Nr Kunde';
let p1 := select Akten where 'Nr Kunde' = p;
select Buchung
where (
let myflag := false;
for i in p1 do
if i.Aktennummer = Aktennummer then
myflag := true
end
end;
myflag = true
)---
Leo
-
Nochmals Danke, Leo.
Funktioniert leider nicht.
1. Also ich habe ein Gestaltungselement -> Ansicht erstellt und bei Funktion den Code reinkopiert. Ergebnis: Wenn ich mir p1 Anzeigen lasse, tuts. Es zeigt mir "Akten". Der Code wie er ist zeigt mir weiterhin ne leere Tabelle "Buchung".
2. Ich habe versucht den Code zu verstehen um herauszufinden warum nichts angezeigt wird. Ich will schließlich nicht ständig fragen müssen, sondern ein Verständnis für die Dinge entwickeln die ich da zusammenprogrammiere. Gibts da kein Tutorial was die ganzen Select- und Schleifenmöglichkeiten erklärt? Oder eine Liste aller möglichlichen Befehle und deren Funktion? Auch die Tabellenverkünpfungen: Bringen die auch was wenn keine Datensätze verkünpft werden? Kann man zwei Tabellen mitteilen dass eine Referenzspalte z.B. "Nr Kunde" das Bindeglied zwischen den Datensätzen ist?
Beispiel im nicht Verstehen: "select Buchung where ("...
-> was im folgenden Code ist die Bedingung? Es wird ne Variable belegt, ne If-Afbrage durchgeführt und die Variable geändert. Also kurz: "select Buchung where (myflag = true)" -> Brett vorm Kopf.
Und warum muss die select-abfrage nicht innerhalb der Schleife sein? Also: "for i in p1 do select ..."?
Solange ich nicht verstehe was du geschrieben hast, bringt das alles nix. Daher bräuchte ich zu aller erst ne Liste aller Befehle für NX sowie ne Erklärung der Syntax. Aber auch hier halfen Handbuch und Google nicht so recht weiter. Gibts da was?
LG Rene
-
Hallo Rene,
ich habe festgestellt, daß meine Formel in der Mac App funktioniert aber im Web gar nicht. Versuch mal so:
---
let p := this.'Nr Kunde';
let p1 := (select Akten where 'Nr Kunde' = p);
(select Buchung)[let myflag := false;
for i in p1 do
if i.Aktennummer = Aktennummer then
myflag := true
end
end;
myflag = true]
---
Leo
-
Jetzt aber zur Erklärung.
mit p1 grenznt man die Akten, die zu einem Kunden gehören.
dann nimmt man sich die Tabelle Buchung vor un für jeden Datensatz prüft man ob die Aktennummer der Buchung mit der irgendeiner Aktennummer aus p1 übereinstimmt. Dafür zuerst eine Variable myflag als false setzen und dann in der Schleife alle Datensätze von p1 prüfen. ist die Übereinstimmung da, wird die Variable auf true gesetzt anderfalls passiert gar nichts. am ende der Schleife schaut man auf die myflag und wenn true(also irgend eine Aktennummer übereinstimmte) dann nimmt man diesen Datensatz zur Ansicht.Leo
-
Und die Liste aller Befehle und Funktionen gibt es im Webinar-Team als 0001_Ninox_Referenz-
-
Klappt. Vielen Dank!!
Steige zwar noch nicht ganz durch, aber wenn ich ins Webinar Team aufgenommen werde und mir die Datenbank ansehen kann, wirds sicherlich besser.
Content aside
- vor 4 JahrenZuletzt aktiv
- 9Antworten
- 2092Ansichten