0

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

null
    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Thosten Vielen Dank bekomme aber eine Fehlermeldung zurück. Habe es als Snapshot hochgeladen.

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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;
    [...]

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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?

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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 

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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?

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Habe es nun so gelöst.

    let my := this;
    let myDS := first(select Mitglieder where Steuernummer = my.Steuernummer).Nr;
    if myDS = null then

    alert("Kein Steuernummer vorhanden")

    else
        myDS.(Status := my.Status)
    end;
    popupRecord(myDS)

     

    Danke für den Anstoss Copytexter

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Torsten hatte deine Antwort nicht gesehn gehabt und lösste das Problem wie oben geschrieben.