0

Select Syntax

Hallo zusammen,

ich stell mich mal wieder etwas doof an und kämpfe mit der Syntax wie man mit Select ein bestimmtes Datenfeld einer anderen Tabelle ausliest.

Ich würde gerne aus einer anderen Tabelle 'Preise' (ist Untertabelle von 'Preisliste', hat aber keine direkte Beziehung zur aktuellen Tabelle) einen Wert auslesen. Dazu müssen 2 Felder abgefragt werden (LF-Nr. und Art-Nr). Ausgelesen werden soll das Feld VK-Preis.

Grob gesagt würde für mich die Syntax so aussehen:

let p := first((select Preise)['LF-Nr' = "123" and 'Art-Nr' = "123"]).'VK-Preis'

Aber damit geht's nicht. Es liefert keine Wert obwohl die Abfragewerte so vorhanden sind. Kann mir da jemand auf die Sprünge helfen?

17 Antworten

null
    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Dirk,

    vielleicht so:

    --

    let p := first((select Preise)['LF-Nr' = "123" and 'Art-Nr' = "123"]).'VK-Preis';

    p

    ---

    Leo

    • Dirk_Pulver_2020
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leonid,

    vielen Dank, aber wo ist jetzt der Unterschied in Deiner Zeile ???

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Dirk, 

    wenn man in dem Funktionsfeld eine Variable deklariert wird (let p:=.....) dann muss man unten noch diese Variable schreiben, damit das Ergebnis auch angezeigt wird. Da deine Formel korrekt ist, dachte ich, vielleicht fehlt noch ein p am Ende.

     

    Leo

    • Dirk_Pulver_2020
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ach so ja klar, danke. Aber auch wenn ich die Formel in einem Button unterbringe und das Ergebnis in ein Feld schreiben lasse - es kommt nix an. Mir ging es darum, ob die Syntax der Tabellen-Namen so korrekt ist, weil eigentlich gebe ich ja nur den Tabellennamen an und nicht welche Untertabelle es ist usw.

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Kannst noch mit where versuchen (select Tabelle where Bedingung). Die Beziehungen sollten keine Rolle spielen weil select direkt zur Tabelle führt. Ansonsten würde ich noch prüfen ob 'LF-Nr'  und  'Art-Nr' wirklich Textfelder sind.

    Leo

    • Dirk_Pulver_2020
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hi Leo, siehste das fehlt mir jetzt - ich dachte das in der eckingen Klammer ist die Bedingung. Wie würde das korrekt mit WHERE aussehen ???

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    first ( select Preise where 'LF-Nr' = "123" and 'Art-Nr' = "123" ).'VK-Preis'

    • Dirk_Pulver_2020
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ist das nur eine andere Schreibweise zu den eckigen Klammern ? Warum die Schreibweise mit den eckigen Klammern ?

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

    Gute Frage. Ich dachte immer, die eckigen Klammern seien nur eine verkürzte Schreibweise, aber es scheint da im Detail  doch Unterschiede zu geben, die sich mir noch nicht erschlossen haben. Deshalb nutze ich in der Regel "where".

    • Dirk_Pulver_2020
    • vor 5 Jahren
    • Gemeldet - anzeigen

    ok, dann muss ich das testen

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

    Vielleicht können Leo oder einer der Supporter ja noch was dazu sagen. Ich wollte nur die Gelegenheit nutzen. ;)

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    where wird in Verbindung mit select verwendet. Die Eckklammern  - bei verknüpften Tabellen (also ohne select).

    In manchen Fällen funktioniert aber where bei mir nicht, deswegen nutze fast ausschließslich  die Eckklammern.

    Leo

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

    Ach ja, jetzt wo du's sagst ... Danke. Interessant wäre aber eben noch zu wissen, warum es in manchen Fällen nicht funktioniert. Ich werde mir das jetzt aber notieren und im Auge behalten.

    • Micha
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Das Thema ist zwar schon etwas älter aber noch zwei Fragen dazu:

     

    a) Gibt es denn auch Laufzeit Unterschiede zwischen where und [] ?

    b) wenn es eine umfangreiche Abfrage der DB ist ist dann der direkte Weg schneller als mit select ?

    p.s. ich habe oft Laufzeiten von 10-15 sec. was aber ewig ist wenn ich nur mal schnell einen verknüften Eintrag suchen muss. Bin auf der Suche wie ich die Scripts umgestalten kann um eine schnellere Laufzeit hin zu bekommen .

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Michael,

    ich habe bis jetzt keine Laufzeitunterschiede zwischen where und [] endeckt. Wenn du eine verknüpfte tabelle hast, dann ist es immer empfehlenswert direke Ansprache mit Punktnotation statt select zu nehmen. Was mir noch aufgefallen ist, sind die Schleifen. Die sind echt langsam. Ein Geheimtipp: wenn es möglich ist, die f"or i in ... do" schleife durch eine direckete Anweisung auszutauschen:
    ---

    for i in select Tabelle do
    i.FeldA:="a";
    i.FeldB:="b";
    i.FeldC:=1234*4
    .
    .
    .
    end
    ----

    durch

    ---

    select Tabelle.(
    FeldA:="a";
    FeldB:="b";
    FeldC:=1234*4;
    .........
    )

    ---

    Ich konnte damit in einer Anwendung die Berechnungszeit von 2 Minuten auf 4 Sekunden senken.

     

    Leo

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

    Echt, das funktioniert? Und auch noch schneller? Dann ist das wirklich ein super Tipp. Wenn auch nicht mehr geheim. ;)

     

    Der select-Befehl mit all seinen Optionen und Anwendungsmöglichkeiten hätte wohl ein eigenes Tutorial verdient. Man entdeckt da immer wieder Neues.

    • Micha
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja Danke Leo, ich habe zwar noch nicht viele for Schleifen verbaut aber es ist wirklich eine große Laufzeitersparnis :)

    Danke noch mal!

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 17Antworten
  • 8965Ansichten
  • 1 Folge bereits