Wie 2 Tabellen durchsuchen und Werte ändern?
Guten Abend, vermutlich SEHR einfach, aber ich komme nicht weiter:
Tabelle A, Feld A1 (Textfeld)
Tabelle B, Feld B1 (Textfeld)
Eintrag aus Tabelle A (A1) nehmen und in Tabelle B (B1) suchen.
Wenn identisch, dann Wert in Tabelle B, Feld B2 um 1 erhöhen.
Also Tabelle A, Feld A1 enthält Text „Druckwalze_11“
Wenn in Tabelle B, Feld B1, „Druckwalze_11“ steht, den Zahlenwert in B2 um 1 erhöhen.
Die Tabelle A soll komplett durchlaufen werden, ebenso die Tabelle B.
Für einen Vorschlag / Tip wäre ich sehr dankbar.
15 Antworten
-
Die Tabellen nsind nicht verknüpft und die Aktion soll über eine Schaltfläche aus einem "externen" Formular erfolgen.
Das vielleicht noch zu Erläuterung. -
Hallo Holzi,
das sollte es tun:
for i in select 'Tabelle A' where 'A1' != null do
let myA1 := i.'A1';
for p in select 'Tabelle B' where 'B1' = myA1 do
let myB2 := p.'B2'+1;
p.'B2' := myB2
end
end
lg, Torsten
-
Hallo Torsten,
besten Dank für den Code. Ich habe ihn angepasstDie Tabelle "Scans" mit dem Feld "Codecontent" und die Tabelle "Geraete" mit den Feldern "QRText" und "Bestand".
Keine Fehlermeldung, aber leider passiert auch nichts (!), d.h. der Bestand wird nicht erhöht.for i in select Scans where Codecontent != null do
let myCodecontent := i.Codecontent;
for p in select Geraete where QRText = myCodecontent do
let myBestand := p.Bestand + 1;
p.(Bestand := myBestand)
end
endVielleicht kannst Du ja nochmal draufsehen; ich finde den Fehler einfach nicht.
Vielen Dank
-
Hallo Holzi, hallo Torsten
---
for i in (select Scans)[Codecontent] do
(select Geraete)[Text = i.Codecontent].(Bestand := Bestand + 1)
end---
Leo
-
Guten Abend an Euch. @Leo: Beeindruckend kurzer Code, aber leider gleiches Ergebnis: Keine Fehlermeldung, aber auch keine Erhöhung des Bestands. Wegen des Codes: Die Tabellen sind nicht verknüpft.
vielleicht gibt‘s ja doch noch eine Lösung? Ich bin mit meinem Latein am Ende.
-
Hallo Holzi,
Ich vermute, es stimmt etwas nicht bei dir. Ich habe mir dein Datenmodel nachgebaut und es funktioniert. Prüf bitte ob die Texte wirklich exakt gleich sind (keine leerzeiche am Anfang un Ende)
Leo
-
Hallo Leo,
Danke für die schnelle Antwort. Ja, ich habe hier noch irgendwo den "Wurm" drin. Ich melde mich wieder, sobald ich ihn habe (den Wurm). -
Hallo Torsten, Hallo Leo,
Eure Codes funktionieren einwandfrei. Der "Wurm" bei mir: Ich habe einen Artikelbezeichnung in einen QR-Code-tauglichen Text (Codecontent) umgewandelt dabei habe ich in der einen Tabelle einen Unterstrich (für Leerzeichen) doppelt eingesetzt. Beim Vergleich konnte der Code natürlich nicht passendes finden und daher auch keine Bestandserhöhung. So einen blöden Fehler muss man erst mal finden.Mit einer zweiten Schaltfläche verringere ich den Bestaand jeweils um -1. Wie könnte ich in Euren Code (an welcher Stelle sinnvollerweise) einen Dialog einbauen, der warnt / fragt , wenn der Bestand unter 1 zu gehen droht?
Auf jeden Fall schon einmal vielen Dank für die Hilfe.
-
Hallo Holzi!
for i in select Scans where Codecontent != null do
let myCodecontent := i.Codecontent;
for p in select Geraete where QRText = myCodecontent do
let myBestand := p.Bestand + 1;
if myBestand <= 0 then
let myChoice := dialog("Achtung!","Bestand verringert sich auf "+myBestand+"!",["Okay","Bloß nicht!"]);
if myChoice = "Okay" thenp.(Bestand := myBestand)
end
endend
end
lg, Torsten
-
örgs,
let myBestand := p.Bestand + 1;
muss natürlich
let myBestand := p.Bestand - 1;
heißen!
-
Guten Morgen Torste,
vielen Dank für die schnelle Antwort. Ich werde die Ergänzung gleich ausprobieren. Diese Forum ist einfach Gold wert und ich bewundere das Engegement und die Geduld der "Profis", wie z.B. auch Leo. Ich habe immer noch Probleme mit der Syntax von NINOX, da nirgends wirklich komplett beschrieben. Und manchmal kann ich __ nicht von _ unterscheiden :)
-
Torsten natürlich
-
@Torsten: Da habe ich mich etwas zu früh gefreut:
Bei Deiner Konstruktion wird die Bestandsreduzierung nur dann durchgeführt, wenn vorher der Dialog ausgeführt wurde.
Der wird aber nur aufgerufen, wenn der Bestand <0 ist. = Die Katze beißt sich in den ....
Ich habe folgendes versucht, führt aber zu einer Endlosschleife.
Hast Du eine Idee?for i in select Scans where Codecontent != null do
let myCodecontent := i.Codecontent;
for p in select Geraete where QRText = myCodecontent do
let myBestand := p.Bestand - 1;
p.(Bestand := myBestand);
if myBestand <= 0 then
let myChoice := dialog("Achtung!", "Bestand verringert sich auf " + myBestand + "!", ["Okay", "Nein!"]);
if myChoice = "Nein!" then
let myBestand := p.Bestand + 1;
p.(Bestand := myBestand)
end
end
end
end -
Hallo Holzi,
ja, den Bug hab ich extra für Dich versteckt, dachte Du bekommst es selbst raus. ;-)
Nein, Spass beiseite, natürlich hab ich's an der Stelle verpennt, sorry!
for i in select Scans where Codecontent != null do
let myCodecontent := i.Codecontent;
for p in select Geraete where QRText = myCodecontent do
let myBestand := p.Bestand - 1;
if myBestand <= 0 then
let myChoice := dialog("Achtung!","Bestand verringert sich auf "+myBestand+"!",["Okay","Bloß nicht!"]);
if myChoice = "Okay" then
p.(Bestand := myBestand)
end
else
p.(Bestand := myBestand)end
end
end
lg, Torsten
-
Halo Torsten, funktioniert wie erwartet. Danke nochmals!
Ich habe's noch ein wenig "aufgehübscht".for i in select Scans where Codecontent != null do
let myCodecontent := i.Codecontent;
for p in select Geraete where QRText = myCodecontent do
let myBestand := p.Bestand - 1;
if myBestand <= 0 then
let myChoice := dialog("Achtung!", "Bestandsprüfung für : " + p.QRText + "
Bestand verringert sich auf " + myBestand + " !" + "
Wollen Sie das wirklich ?", ["Ja", "Nein!"]);
if myChoice = "Ja" then
p.(Bestand := myBestand)
end
else
p.(Bestand := myBestand)
end
end
end
Content aside
- vor 5 JahrenZuletzt aktiv
- 15Antworten
- 2522Ansichten