identischen Wert suchen und dann Felder kopieren
Habe 2 Tabellen (Neues Mitglied sowie Mitglieder) Felder sind identisch bei beiden Tabellen (Namen, Steuernummer, Email etc). Würde gerne Feld "Steuernummer " unter "Neues Mitglied" vergleichen und sobald auf beiden Tabellen die gleiche "Steuernummer" aufscheint sollte es mir die fehlenden Daten (Name Email) in der Tabelle Mitglieder aus der Tabelle "Neues Mitglied" herüberkopieren und ergänzen bei der bestehenden Steuernummer. Würde es per Knopfdruck ausführen. Vielleicht kann mir dabei jemand behilflich sein kriege es alleine nicht hin. Es wird immer alles in eine neue Zeile kopiert. Vielen Dank im Voraus für Eure Hilfe.
let myStNr := Steuernummer;
let myCount := cnt(select Mitglieder where Steuernummer = myStNr);
if myCount = 1 then
let c := (create Mitglieder);
let myText1 := Status;
let myText2 := Geburtsdatum;
let myText3 := Telefonnummer;
let myText4 := EMail;
c.(Status := myText1);
c.(seit := myText7);
c.(Telefon := myText3);
c.(Email := myText4);
c.(Geburtsort := myText5);
else
""
end
12 Antworten
-
Hallo Claus,
in Deinem Skript zählst Du die Mitglieder, die dieselbe Steuernummer haben. Wenn Ninox 1 solches Mitglied findet, legst Du mit create ein neues an - das macht IMHO keinen Sinn.
let my := this;
let myCount := cnt(select Mitglieder where Steuernummer = my.Steuernummer);
let c := if myCount = 1 then
first(select Mitglieder where Steuernummer = my.Steuernummer) else (create Mitglieder)
end;
c.(Status := my.Status);
c.(seit := my.seit);
c.(Telefon := my.Telefonnummer);
c.(Email := my.EMail);
c.(Geburtsort := my.Geburtsort):
popupRecord(c)
sollte wie gewünscht funktionieren. Die zu übertragenden Felder musst Du halt noch anpassen, aber das sollte verständlich sein...
lg, Torsten
-
Thosten Vielen Dank bekomme aber eine Fehlermeldung zurück. Habe es als Snapshot hochgeladen.
-
Moin Claus,
doof, dann wird der Code etwas länger...
let my := this;
let myCount := cnt(select Mitglieder where Steuernummer = my.Steuernummer);
if myCount = 0 then
let c:= (create Mitglieder)
c.(Status := my.Status);
c.(seit := my.seit);
c.(Telefon := my.Telefonnummer);
c.(Email := my.EMail);
c.(Geburtsort := my.Geburtsort)
else
let c := first(select Mitglieder where Steuernummer = my.Steuernummer)
c.Status := my.Status;
c.seit := my.seit;
c.Telefon := my.Telefonnummer;
c.Email := my.EMail;
c.Geburtsort := my.Geburtsort
end
popupRecord(c)
lg, Torsten
-
Hallo, das Problem mit den unterschiedlichen Datentypen ließe sich möglicherweise vermeiden, in dem man der Variable "c" bei "if" und "else" die jeweilige Datensatz-'Nr' zuweist. Dann könnte auch der kürzere Code funktionieren
[...]
let c := if myCount > 0 then first(select Mitglieder where Steuernummer = my.Steuernummer).Nr else (create Mitglieder).Nr end;
[...]
-
Vielen Dank Euch beiden es funktionieren nun beide Varianten. Herzlichen Dank
Hätte noch eine Zusatzfragen. Kann ich eine Kontrolle einbauen dass der Datensatz nur kopiert wird wenn die Steuernummer (unter Mitgliedertabelle)gefunden wird! Jetzt kopiert er mir die Daten als neues Mitglied ohne Steuernummer rüber.
Vielen Dank und schönen Karfreitag aus der Quarantäne!
lg Claus
-
Du müsstest neben Status, Telefonnummer usw. halt auch die Steuernummer mit übertragen. Also nach dem "create" eine weitere Zeile einfügen:
c.(Steuernummer := my.Steuernummer)
Davon abgesehen stellt sich halt die grundsätzliche Frage, ob in beiden Fällen dieselben Daten übertragen werden sollen. Denn bei vorhandenen Mitgliedern werden die Daten natürlich mit denen der Tabelle 'Neues Mitglied' überschrieben. Wenn das nicht so sein soll, müsste man zwei verschiedene Zuweisungen vornehmen.
Konkret: Welche Daten aus der Tabelle 'Neues Mitglied' sollen übertragen werden, wenn die Steuernummer (das Mitglied) in der Tabelle 'Mitglieder' bereits vorhanden ist? Und welche sollen übertragen werden, wenn die Steuernummer nicht vorhanden ist und ein neuer Datensatz angelegt wird?
-
Danke Copytexter Sorry nicht gut ausgedrückt. Jetzt mache ich ja einen Check ob die Steuernummer existiert in beiden Tabellen (Neues Mitglied und Mitglied)
Mein Problem ist nun, würde ich den Knopf drücken spielt er mir alles rüber ohne zu kontrollieren ob es einen Datensatz mit der Steuernummer (in der Tabelle Mitglieder) gibt. Ich will es erst übertragen wenn ich von offiziller Seite die Daten in die Mitgliederseite importiert habe und dann meine Daten dazu spielen. Nicht eben vorher meine Daten so habe ich zugleich eine Kontrolle ob die Daten von der VW Seiten richtig eingeben sind und erst dann möchte ich den Rest einspielen. Dazu müsste vor den Kopieren nochmal kontrolliert werden ob die Steuernummer fehlt oder nicht und erst bei existieren kopieren. Ansonsten nix machen.
Hoffe konnte mich nun besser ausdrücken. Vielen Dank für Eure Unterstützung. lg Claus
-
Puh. Sorry, Claus, aber ich blicke noch nicht so ganz durch. Noch mal ein etwas anderer Ansatz:
let my := this;
let myDS := first(select Mitglieder where Steuernummer = my.Steuernummer).Nr;
if myDS = null then
myDS := (create Mitglieder).Nr;
myDS.(Steuernummer := my.Steuernummer)
else
myDS.(Status := my.Status)
end;
popupRecord(myDS)
Das heißt: Wenn in der Tabelle 'Mitglieder' noch kein Datensatz mit dieser Steuernummer existiert ("if myDS = null then"), dann lege einen neuen (leeren) Datensatz an und übertrage das Feld 'Steuernummer'. Falls aber doch ein Datensatz mit dieser Steuernummer existiert ("... else"), dann übertrage das Feld 'Status' in diesen Datensatz.
Das ließe sich natürlich in beiden if-Zweigen um zusätzliche Datenfelder erweitern, aber es geht ja erst mal ums Prinzip. Deshalb habe ich hier beispielhaft nur das Feld 'Steuernummer' bzw. 'Status' übertragen.
Vielleicht willst du aber auch ganz was anderes und wir reden komplett aneinander vorbei?
-
Sorry die Verspätung Herr Copy
Das heißt: Wenn in der Tabelle 'Mitglieder' noch kein Datensatz mit dieser Steuernummer existiert ("if myDS = null then"), dann lege keinen neuen (leeren) Datensatz an. (Das möchte ich eigentlich machen einfach nix wenn nicht beide übereinstimmen ) Falls aber doch ein Datensatz mit dieser Steuernummer existiert ("... else"), dann übertrage das Feld 'Status' in diesen Datensatz.
Hoffe konnte nun Klarheit in meiner Frage von vorher bringen. Vielen Dank für die Mühe und Hilfe. mfg Claus
-
Hallo Claus,
let my := this;
let myCount := cnt(select Mitglieder where Steuernummer = my.Steuernummer);
if myCount > 0 then
let c := first(select Mitglieder where Steuernummer = my.Steuernummer)
c.Status := my.Status;
end
popupRecord(c)
lg, Torsten
-
Habe es nun so gelöst.
let my := this;
let myDS := first(select Mitglieder where Steuernummer = my.Steuernummer).Nr;
if myDS = null thenalert("Kein Steuernummer vorhanden")
else
myDS.(Status := my.Status)
end;
popupRecord(myDS)Danke für den Anstoss Copytexter
-
Danke Torsten hatte deine Antwort nicht gesehn gehabt und lösste das Problem wie oben geschrieben.
Content aside
- vor 4 JahrenZuletzt aktiv
- 12Antworten
- 1717Ansichten