0
Funktions- und Sprachreferenz
Hallo, ich habe zwei Frage:
1) Ich würde gerne zu einer bestehenden Uhrzeit eine gewisse Anzahl Stunden und Minuten addieren. Leider schaffe ich das nur indem ich zwei Datenfelder von Typ Uhrzeit addiere, aber ich hätte erwartet, dass man auch z.B. Begin := Begin + "07:00" oder wie auch immer angeben kann. Ich habe schon alle möglichen Varianten probiert, komme aber nicht auf eine Lösung. Ist es überhaupt möglich Zeiten auf diese Weise zu addieren?
2) es gibt bei Rechnen die Funktion Prozent %, allerdings finde ich dazu keine Beschreibung und bekomme auch keine sinnvollen Werte raus. Wo finde ich dazu eine Erklärung/Beispiel?
Noch zwei Anregungen:
- generell fände ich es gut, wenn einzelnen Funktionen durchgehend mit ein oder zwei aussagekräftigen Beispielen beschrieben wären, das würde viel Zeit ersparen.
- will man eine Funktion als Text eingeben, werden im Editor zwar Zeilennummern angezeigt, aber leider keine Spaltennummern. Die Fehlerhinweise erscheinen aber mit Spaltennummer! Dann beginnt das fleissige Zählen....
Besten Dank Klaus
1) Ich würde gerne zu einer bestehenden Uhrzeit eine gewisse Anzahl Stunden und Minuten addieren. Leider schaffe ich das nur indem ich zwei Datenfelder von Typ Uhrzeit addiere, aber ich hätte erwartet, dass man auch z.B. Begin := Begin + "07:00" oder wie auch immer angeben kann. Ich habe schon alle möglichen Varianten probiert, komme aber nicht auf eine Lösung. Ist es überhaupt möglich Zeiten auf diese Weise zu addieren?
2) es gibt bei Rechnen die Funktion Prozent %, allerdings finde ich dazu keine Beschreibung und bekomme auch keine sinnvollen Werte raus. Wo finde ich dazu eine Erklärung/Beispiel?
Noch zwei Anregungen:
- generell fände ich es gut, wenn einzelnen Funktionen durchgehend mit ein oder zwei aussagekräftigen Beispielen beschrieben wären, das würde viel Zeit ersparen.
- will man eine Funktion als Text eingeben, werden im Editor zwar Zeilennummern angezeigt, aber leider keine Spaltennummern. Die Fehlerhinweise erscheinen aber mit Spaltennummer! Dann beginnt das fleissige Zählen....
Besten Dank Klaus
493 Antworten
-
Hallo Christoph
Hallo Frank
danke, eine nützliche Funktion ist das ;)
Ich möchte damit die Eingabe neuer Kunden in der Tabelle Kunden überprüfen.
Beim erstellen eines neuen Datensatzes habe ich ja die Kundennumner noch nicht eingegeben,
daher setze ich die Funktion bei "Änderung eines Datensatzes" ein.
Funktionierte soweit bis zum "else"
danach wurde mir das Feld Name immer geleert "" ;)
Dann habe ich folgende Änderung vorgenommen:
else
(Name := Name)
So geht das ;)
Und damit mein Feld "Name" auch wieder fein leer ist,
nach dem ändern des Datensatzes in eine "neue" Nummer,
noch ein wenn dann ;)
let n := Kundennummer;
let n := cnt(select Kunden where Kundennummer = n);
if n > 1 then
(Name := "Doppelte Kundennummer!")
else
if Name = "Doppelte Kundennummer!" then
(Name := "")
else
(Name := Name)
Danke an Alle hier im Forum für die hilfreichen Beiträge! -
Wobei du so uU leere Datensätze erzeugst?
Da ich eh im Anschluß (bei einer Doublette) manuell löschen muß, habe ich auf das Leeren der Einträge verzichtet.
Dein Problem ließe sich völlig umgehen, wenn Du die Kundennummer zu Beginn vergeben läßt. Also in der Tabelle unter "bei neuem Datensatz folgendes Skript ausführen".
Christoph -
Hallo, auch von mir mal eine Problembeschreibung: Habe eine Buchungstabelle und eine Budgettabelle in der die Summen pro Kategorie und Zeitraum (JahrMonat) gezeigt werden sollen. Durch eine Schlatfläche löse ich ein Script aus.
---------------------------------------
let Soll := JahrMonat_Soll;
for BG in (select Budget) (
let Kat := BG.Kategorie;
BG.(Aktivitaet := sum((select Buchungen)[(Kategorie = Kat and JahrMonat = Soll)].Buchungswert_Kategorie))
)
--------------------------------------
Leider werden nur Nullen in das Summenfeld geschrieben. Erwarte ich zuviel? -
Hallo Rudi,
Soweit ich weiß werden die Eckklammer nur bei verknüpften Tabellen eingesetzt. Wenn du aber "select" benutzt, ist die Bedingung mit "where" zu schreiben.
etwa so:
let Soll := JahrMonat_Soll;
for BG in (select Budget) (
let Kat := BG.Kategorie;
BG.Aktivitaet := sum((select Buchungen where Kategorie = Kat and JahrMonat = Soll).Buchungswert_Kategorie)
)
Gruß Leo -
Hallo Leo,
Danke für den Tipp. Mein Hauptfehler war, dass ich um auf den Wert der Kategorie zuzugreifen, nicht bedacht habe, dass das eine N:1 Verbindung zur Tabelle Kategorie ist. Also musste ich 'b.Kategorie.Kategorie '(und nicht nur b.Kategorie) nehmen.
Letztendlich habe ich aber die summewenn-Funktion selber gebaut.
So funktioniert es für mich. Vielleicht kann hier jemand einen Tip geben, wie man das mit [ ] bzw. 'select where löst'
----------------------------
let Soll := JahrMonat_Soll;
for g in (select Budget) (
let Kat := g.Kategorie;
g.(Aktivitaet := 0);
for b in (select Buchungen) (
if g.JahrMonat = Soll and b.Kategorie.Kategorie = Kat then
g.(Aktivitaet := g.Aktivitaet + b.Buchungswert_Kategorie)
else
void
)
)
--------------------------------- -
Guten Morgen,
Ich habe die Löschfunktion in der Anleitung nicht gefunden. Diese gibt es aber. Bei mir funktioniert sie wie folgt:
delete select Tabelle where Datensatz=Wert
Bitte noch einpflegen.
Gruß
Leo -
Hi Leo!
Da würde ich noch ein etwas abwarten, habe heute Ninox durch den Einsatz dieses Befehls in einer Befehlskette erstmals zum Absturz gebracht.
Wenn du delete kombinierst mit popup oder openRecord dann schließt sich Ninox!
kann ich dich auch per mail kontaktieren?
Lg -
Hallo René,
Danke für die Warnung, habe bis jetzt nur mit Befehlsschaltfläche ausprobiert.
Meine Mail : leo.semik@gmail.com
Gruß
Leo -
Hallo Rene,
könntest Du die problematische Formel an support@ninoxdb.de senden, damit wir das analysieren können?
Lieben Dank
Frank -
Ist jetzt mit drin im Kapitel "Delete Records"
Viele Grüße
Frank -
super danke! Formel habe ich per email versandt. da ist jetzt glaube ich ein kleiner fehler in der formatierung im kapitel formatierung. zumindest im safari browser schaut das etwas komisch aus. lg
-
ups. ich meinte natürlich im kapitel html...
-
Danke! Ist behoben.
-
Guten Tag,
kann man in der neuen Version den Datensatz per Skript duplizieren?
Gruß
Leo -
Hallo Leo,
das geht leider noch nicht.
Viele Grüße
Frank -
Guten Tag
Ich habe versucht aus dem Auswahlfeld Geschlecht in dem Textfeld Briefanrede die richtige Briefauswahl zu bestimmen:
if Geschlecht = "Männlich" then
Briefanrede = "Sehr geehrter Herr"
else
Briefanrede = "Sehr geehrte Frau"
Aber das Feld Briefanrede bleibt leer. Was muss ich tun.
Gruss Markus -
Guten Tag
Kann das Feld Standort auch für eine Adresse verwendet werden? Gibt es dazu eine Funktion? Ich habe versucht eine Adresszeile einzufügen, aber das geht nicht.
Beste Grüsse
Markus -
Hallo Markus,
Geschlecht ist ein Auswahlfeld. Wenn bei dir "Männlich" mit Nummer 1 angelegt ist und "Weiblich" mit 2 dann:
Briefanrede:=if Geschlecht=1
then “Sehr geehrter Herr”
else “Sehr geehrte Frau”
Gruß
Leo -
Hallo Markus,
aktuell können Längen- und Breitengrade aus dem location Feld extrahiert werden. Adresse oder Titel nehmen wir mit auf die Anforderungsliste.
VG, Alex -
Hallo Leo
Danke für Deine rasche Antwort. Das habe ich nun so versucht. Aber ich bekomme immer die folgende Meldung beim Speichern: "Diese Funktion darf keine Datenänderung vornehmen". Daraus ortete ich meinen Fehler, dass ich vielleicht das falsche Datenformat des Zielfeldes "Briefanrede" verwendet habe. Nach dem ich ein normales Textfeld als Zielfeld versucht habe, habe ich es noch mit einem Auswahl Feld versucht. Aber das ging auch nicht. Was mache ich falsch?
Beste Grüsse
Markus -
Hallo Markus,
Diese Fehlermeldung erscheint, wenn du mit berechnetem Feld andere Felder manipulieren möchtest.
Angenommen dein Feld "Briefanrede" von Datenart eine f(x)Berechnung ist. Dann lautet die Formel bei Funktion:
if Geschlecht=1
then “Sehr geehrter Herr”
else “Sehr geehrte Frau”
Wenn "Biefanrede" dagegen ein Textfeld ist, dann musst du Die Formel:
Briefanrede:=if Geschlecht=1
then “Sehr geehrter Herr”
else “Sehr geehrte Frau”
bei dem Auswahlfeld "Geschlecht" im Bereich "Nach Änderungen folgendes Skript ausführen" schreiben.
Grüße
Leo -
Vielen Dank Leo, jetzt funktioniert's und ich habe wieder einiges gelernt.
-
Hallo,
ist es möglich beim Befehl openTable("Invoices", "All Invoices")
diesen Table nach einem bestimmten Kriterium zu filtern..
Ps. Möchte eine Bedienschaltfläche mit dem Befehl bestücken, die mir dann durch einen automatisch Filter nur Einträge für eine bestimmte Person anzeigt.
Danke -
Hallo Rene, man kann mit der Funktion eine bestimmte Ansicht einer Tabelle aufrufen. Welche Filter in der Ansicht gesetzt sind lässt sich nicht per Skript setzen.
VG, Alex -
Danke Herr König.
Wäre aber ein nicht uninteressantes Feature für die Anforderungsliste :) es ist nicht praktikabel 150 verschiedene Ansichten zu erstellen. Da wäre eine Filtermöglichkeit per Skript ideal.
Content aside
- vor 6 JahrenZuletzt aktiv
- 493Antworten
- 134678Ansichten