0

Zugriff Variable in Select

Hallo Zusammen,

ich habe folgendes Snippet das nicht funktioniert:

Start_timestamp := parseUTCTimeString(string(Leg.Datum), string(Leg.Zeit));
let AnzahlTotal := sum((select Fahrten where Fahrtnummer = Leg.Fahrt and
     format('Datum + Uhrzeit', "DDMMYY") = format(Start_timestamp, "DDMMYY")).'Anzahl');

 

wenn ich Start_timestamp den statischen Wert "110923" zuweise, funktioniert die Select wie gewünscht:

 

Start_timestamp := "110923";
let AnzahlTotal := sum((select Fahrten where Fahrtnummer = Leg.Fahrt and
     format('Datum + Uhrzeit', "DDMMYY") = Start_timestamp).'Anzahl');

 

Wenn ich den Inhalt von format(Start_timestamp, "DDMMYY") in einem Alert ausgebe, bekomme ich genau die gewünschten "110923":

Start_timestamp := parseUTCTimeString(string(Leg.Datum), string(Leg.Zeit));
alert(format(Start_timestamp, "DDMMYY"));

Zusammengesetzt funktioniert der Vergleich aber nicht. Ich habe hier extra mit format() gearbeitet, um strings zu vergleichen und eventuelle versteckte Datumslogiken auszuschliessen.

 

Hat jemand eine Idee an was das liegt, respektive wie das gehen könnte?

4 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 7 Monaten
    • Gemeldet - anzeigen

    Hallo Jürgen, was ist denn "parseUTCTimeString"? Als Ninox-Funktion ist mir das gänzlich unbekannt. Muss natürlich nix heißen, aber falls es sich um eine benutzerdefinierte Funktion handeln sollte, wäre deren Code von nicht unerheblicher Bedeutung für die Ursachenfindung.

    Davon abgesehen: "Start_timestamp" ist obigem Code nach offenbar ein Datenfeld. Dann kann es aber nicht ohne weiteres im"select" als Vergleichswert angegeben werden, da der Fokus auf der anderen Tabelle liegt. Man sollte den Rückgabewert von parseUTCTimeString() in eine Variable schreiben und diese im "select" adressieren.

    Last but not least könnte man mit einem dialog() nach dem Aufruf der Funktion prüfen, welchen Wert sie überhaupt zurück gibt.

      • LIEmobil
      • Jurgen_Frick
      • vor 7 Monaten
      • Gemeldet - anzeigen

       Danke für das Feedback. parseUTCTimeString ist eine globale Funktion die dies macht und "Start_timestamp" wird vorgängig als lokale Variable definiert (kein Datenfeld):

      var Start_timestamp := now();
      function parseUTCTimeString(Timestring : text,Zeitstring : text) do
          let datarr := split(substring(Timestring, 0, 10), "-");
          let h := substring(Zeitstring, 0, 2);
          let m := substring(Zeitstring, 3, 5);
          let s := 0;
          let Timestamp := datetime(number(item(datarr, 0)), number(item(datarr, 1)), number(item(datarr, 2)), number(h), number(m), number(s));
          Timestamp
      end;

      Hintergrund: Die Daten kommen über die API Schnittstelle via Make als JSON rein.

      Deinen Vorschlag mit dialog habe ich gemacht (allerdings mit "alert") und die Werte stimmen eben wunderbar.

      • Ninox-Professional
      • planoxpro
      • vor 7 Monaten
      • Gemeldet - anzeigen

       

      Ok, also (globale) benutzerdefinierte Funktion. Dachte schon, ich hätte was verpasst.😉

      Ursprünglich wollte noch fragen, in welcher Form die Daten ankommen, aber wenn sie geprüft und für korrekt befunden wurden, hat sich das ja erledigt. Dann würde ich einfach mal Uwes Tipp ausprobieren.

      Nebenbei: Mit alert() geht's im Einzelfall natürlich auch. Ich nutze immer dialog(), weil das Script dabei jedes mal bis zum Klick auf "Ok" angehalten wird und man das mehrfach an verschiedenen Stellen in einem Script nutzen kann, um nacheinander aktuelle Werte abzufragen. alert() hingegen poppt nur einmal auf und bleibt auch nach dem Ende des Scripts stehen.

    • UweG
    • vor 7 Monaten
    • Gemeldet - anzeigen

    Manchmal stimmen die Datentypen nicht überein, obwohl sie gleich aussehen.
    Ich benutze viel debugValueInfo() in Verbindung mit dialog(), da dort die Ausgabefenster eher angezeigt werden als mit alert().
    Es hilft manchmal noch eine Dateityp-Angleichung vorzunehmen, was ich in deinem Script mit text() eingefügt habe.

    Start_timestamp := parseUTCTimeString(string(Leg.Datum), string(Leg.Zeit));
    let AnzahlTotal := sum((select Fahrten where Fahrtnummer = Leg.Fahrt and
         text(format('Datum + Uhrzeit', "DDMMYY")) = text(format(Start_timestamp, "DDMMYY"))).'Anzahl');

    Ansonsten wüsste ich aufgrund deiner Beschreibung nicht, was sonst zu dem Problem führt.

Content aside

  • vor 7 MonatenZuletzt aktiv
  • 4Antworten
  • 62Ansichten
  • 3 Folge bereits