0
Trigger
Hallo,
erstmal vielen Dank für das tolle Produkt. Nun habe ich eine Frage: Ich hab es zwar hinbekommen einen Trigger für ein Feld einzurichten aber kann ich einen Trigger so einrichten, dass er sich auf mehr als ein Feld auswirkt?
Z. B.: wenn Feld A »Ja« dann Felder B UND C ändern
Vielen Dank im Voraus!
erstmal vielen Dank für das tolle Produkt. Nun habe ich eine Frage: Ich hab es zwar hinbekommen einen Trigger für ein Feld einzurichten aber kann ich einen Trigger so einrichten, dass er sich auf mehr als ein Feld auswirkt?
Z. B.: wenn Feld A »Ja« dann Felder B UND C ändern
Vielen Dank im Voraus!
193 Antworten
-
Hallo,
ich würde gerne über einen Trigger eine Untertabelle mit allen Einträgen kopieren und an anderer Stelle einfügen. Ist das möglich? -
Jawohl, dies is möglich.
Mittelscreate 'Tabellenname'
können Sie neue Datensätze erzeugen, mittelsfor i from 1 to 100 do ... end
durch alle aktuellen Untertabelleneinträge iterieren und die Daten in die neuen Datensätze übetragen. abschließend können Sie mitdelete()
die nicht mehr benötigten Datensätze löschen.
Birger - Ninox Support -
Danke für die Information, leider komme ich nicht weiter...
Ich habe bei einem Kontakt eine Untertabelle namens "Anträge"
Nun will ich bei einem Projekt welches diesen Kontakt betrifft, dass alle Einträge in der Untertabelle "Anträge" auch in einer Untertabelle im Projekt angezeigt wird. -
Ohne Datenbank ist es schwer. Wenn ein Kunde mehrere Projekte hat und jedes mahl die Anträge kopiert werden sollten, würde ich zur m:n Beziehung raten. Erstell eine Tabelle "Projektanträge", dort fügst du die Tabellen "Projekte" und "Anträge" als Beziehung (Komposition).
Jetzt kannst du in der Tabelle "Projekte" einen Trigger nach Änderung bei der Tabelle "Kontakt" schreiben:
---
let myContact:=Kontakt;
let myProject:=Projekt;
for ii in Kontakt.'Anträge' do
let newRec:=create 'Projektanträge';
newRec.Projekte:=myProjekt;
newRec.'Anträge':=ii.Nr
end
Natürlich muss du noch die Spalten formatieren, damit die Untertabelle in Projekten auch richtige Daten anzeigt.
Grüße
Leo -
Hallo,
Ich habe Tabelle A und Tabelle B.
Wenn ein Eintrag in Tabelle A geändert wird, soll ein neuer Eintrag in B erzeugt werden und Daten aus dem geänderten Eintrag in den Neuen übernommen werden.
Wie müsste dazu der Befehl aussehen? -
Hallo Ahrberg,
wenn die Tabellen nicht miteinander verknüpft sind, würde ich als Trigger nach Änderung in dem Eintragsfeld so schreiben:
---
let myEINTR:=EintragsfeldA;
let newB:=create TabelleB;
newB.EintragsfeldB:=myEINTR
---
Die Felder EintragsfeldA und EintragsfeldB natürlich umbenennen.
Grüße
Leo -
Hallo Leo,
vielen Dank für die schnelle Antwort.
So klappt es hervorragend.
Grüße
Ahrberg -
Hallo Leo,
in einem Beispiel hier in Forum habe folgenden Code gefunden, (den ich leicht geändert habe: openRecord anstatt popupRecord)
(Tabelle 'Kontakte' mit Feldern 'Name' und 'Vorname' sind vorhanden):
let VN := Vorname;
let NN := Nachname;
let NT := (create Kontakte);
NT.(Vorname := VN);
NT.(Nachname := NN);
let SP := number(NT.Nr);
openRecord(record(Kontakte,SP))
Was mich dabei -für meine Zwecke- stört ist, dass die Daten des vorherigen Datensatzes in den neuen Datensatz kopiert werden.
Wie kann man das gleiche bewerkstelligen also
- vorheriges Formular schliessen
- in der gleichen Tabelle neuen Datensatz anlegen
aber dabei ohne den vorherigen zu kopieren?
Vielen Dank
Gruß Georg_0815 -
Hallo Georg_0815,
---let NT := (create Kontakte);
let SP := number(NT.Nr);
openRecord(record(Kontakte,SP))
---
grüße
Leo -
Danke !
Gruss Georg08_0815 -
Heißt die Übersetzung des Codes in "Sprachdeutsch":
erstelle eine Variable mit dem Namen NT die, die Datenfelder der Tabelle 'Kontakte' aufnimmt,
erstelle eine Variable mit dem Namen SP die, die Datensatznummer des neu zu erstellenden Datensatzes NT.Nr aufnimmt ,
öffne überschreibbar den Datensatz der durch die "flüchtigen" Variablen NT und SP definiert/erstellt wurde?
Oder liege ich meilenweit daneben?
Ich versuche als Anfänger die Codes zu verstehen und nicht nur zu kopieren.
Gruß Georg_0815 -
Ich würde so vorschlagen:
Erstell einen neuen Datensatz in der Tabelle Kontakte und lass alle Datenfelder in diesem Datensatz mit NT anfangen.
Leg eine Konstante namens SP fest und gib dieser Konstante den Wert des Feldes "Nr" von den neuen Datensatz der Tabelle Kontakt (NT.Nr) als Zahl (die IDs werden bei Ninox nicht als Zahl angelegt).
Schließe alle Tabellen und Formulare.
Öffne die Tabelle Kontakte.
Öffne den Datensatz der Tabelle Kontakte mit der ID, deren Zahlenanzeige gleich SP ist.
grüße
Leo -
Hallo,
habe mit einer Formel ein Problem. Seit dem ich diese in meiner Datenbank einsetze, ist diese beim öffnen der Tabelle, in der sich die Formel befindet sehr langsam, besonders auf dem iPad macht sich das sehr bemerkbar, teilweise beim bearbeiten Wartezeiten bis zu 4-5 Sekunden, bis ich die nächste Aktion ausführen kann.
Hier die Formel:
let myPLZ := PLZ;
first(select Postleitzahlen where PLZ = myPLZ).Ort
Die Formel sucht mir aus einer Tabelle mit Postleitzahlen nach Eingabe der PLZ in ein Feld automatisch den dazugehörigen Ort heraus und trägt diesen in das Feld Ort ein.
Nun bin ich am überlegen, ob nicht ein Trigger vielleicht Abhilfe schaffen kann, so dass eine Berechnung erst oder nur statt findet, wenn in das Feld PLZ etwas eingetragen wird?
Ich weiß leider nicht, wie ich diesen Trigger formulieren sollte, wenn das überhaupt Sinn macht. Und in welchem Feld, bei der PLZ oder doch eher auf Tabellenebene?
Hat da vielleicht einer einen Tip für mich?
Grüße
Mirko -
Ok,
zu früh gefragt, habs grad selber heraus gefunden!
Diesen Code jetzt auf Tabellenebene "nach Änderung ausführen" hinterlegt und es funktioniert.
let myPLZ := PLZ;
Ort := first(select Postleitzahlen where PLZ = myPLZ).Ort -
Hallo,
aber nun doch noch ein Problem, wie bekomme ich die Werte aus dem berechneten Feld in das neue Textfeld Ort, über Massendatenänderung habe ich das nicht hinbekommen? Über 1000 Datensätze per Hand zu aktualisieren wäre echt hart.
Grüße
Mirko -
Hallo Mirko,
wenn die Massendatenänderung nicht klappt (warum auch immer),
kannst du in deiner Tabelle eine Befehlsschaltfläche einbauen.Die Formel:
---for ii in select DeineTabelle do
let myPLZ := ii.PLZ;
ii.Ort := first(select Postleitzahlen where PLZ = myPLZ).Ort
end
---
Grüße
Leo -
Hallo Leo,
vielen Dank mal wieder, hat super geklappt!
Die Massendatenänderung hat wahrscheinlich deswegen nicht geklappt, weil ich einfach nicht die richtige Formel zur Hand hatte...die Sprache erschließt sich mir noch immer noch nicht so richtig, aber es wird langsam besser! :-)
Grüße
Mirko -
Hallo,
wenn ich mit first () den ersten Eintrag auswählen kann, wie wähle ich den zweiten bzw. dritten etc.? -
Wählen Sie Datensätze aus und sortieren Sie diese nach dem Sortierkriterium:
–––let myChoice := (select 'Tabellenname' order by 'Sortierkriterium')
–––
Anschließend können Sie das zweite Element raussuchen:–––
Achtung: Die Zählung beginnt mit 0
let myElement := item(myChoice, 1)
–––
Birger - Ninox Support -
Hallo zusammen,
kann man in Trigger-/Formelzeilen Kommentare hinterlassen (zur Beschreibung was sie bewirken) ? Wen ja wie ?
Gruß Georg_0815 -
z.B. so:
–––
let myComment := "Dies ist ein Kommentar."
–––
Birger - Ninox Support -
Hallo Birger,
verstehe ich es richtig, dass Kommentare in einer Variablen gespeichert werden müssen? und nicht als "reiner" Text z.B. zwischen Sonderzeichen geschrieben werden können?
Gruß Georg_0815 -
"Müssen"... Aber ja, du verstehst es richtig. Bisher ist in der Scriptsprache noch keine Konvention vorhanden, Kommentare einzubinden :-(
Birger - Ninox Support -
Eine Möglichkeit zum Kommentieren (auch Auskommentieren von Codeteilen) würde das Scripten und die Fehlersuche zweifellos sehr erleichtern. Wollte ich bei der Gelegenheit einfach mal erwähnt haben. Aber das "noch" lässt ja hoffen. ;)
-
Hallo,
stehe irgendwie auf dem Schlauch.
Habe zwei Tabellen über eine Verknüpfungstabelle miteinander verbunden, Tab_Strassen mit Tab_Touren über Tab_Strassen-Touren.
In der Tab_Strassen gibt es das Feld Sortierung, dass in der Tab_Touren genutzt wird zum sortieren der Tabelle.
Die Strassen werden über die Tab_Touren der Tour über eine Hilfstabelle mittels Feld zugeordnet(Leos Idee, funktioniert super!).
Nun will ich die Tour über die das Feld Sortierung in die richtige Reihenfolge bringen.
Dazu muss ich in der angezeigten Tabelle im Formular klicken auf den jeweiligen Datensatz und dann in der Verknüpfungstabelle noch mal auf die Verknüpfung zu den Strassen, um dann das Feld Sortierung zu beschreiben.
Das soll nun schneller von statten gehen, in der Verknüpfungstabelle ein Feld Sortierung, das nach Eingabe der Nummer dann automatisch das Feld Sortierung in der Tab_Strassen füllt. So spart man sich einige Klicks.
Ich habe schon mit ein paar Formel herum probiert, aber irgendwie habe ich immer die falsche zur Hand, entweder ändere ich bei allen Strassen die Nummern oder es passiert gar nichts?
Hat da jemand eine Formel für mich?
Grüße
Mirko
Content aside
- vor 6 JahrenZuletzt aktiv
- 193Antworten
- 58180Ansichten