0

select für einzelne Spalten

Guten Morgen zusammen,

ich fürchte das wird eine blöde Frage, weil ich gerade total auf dem Schlauch stehe:

Ich möchte eine Abfrage der folgenden Art machen (SQL-Syntax)

select Stueckzahl, Artikelname, Einzelpreis from Bestellungen where Kunde = xyz;

aber offenbar bin ich zu dusselig das umzusetzen.

Wie schreibe ich in ninox eine solche Abfrage?

Bisher habe ich immer nur die ganze Tabelle ausgelesen und dann z.B. in einem View die nicht benötigten Spalten ausgeblendet.

Danke für die Nachsicht ;-)

5 Antworten

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

    Guten Morgen,

     

    mit

     

    let my := first(select Bestellungen where Kunde=xyz)

     

    selektierst Du den gesuchten Datensatz, mit

     

    my.Stueckzahl;
    my.Artikelname;
    my.Einzelpreis

     

    greifst Du auf den jeweiligen Feldinhalt zu.

     

    lg, Torsten

    • Dr. Garbe, Lexis & von Berlepsch
    • Wolfgang_Richter
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke dir. Das hilft schon mal.

    Allerdings bin ich immer noch etwas verwirrt.

    Durch den ersten Ausdruck "first(..." hast du dafür gesorgt, dass nur exakt 1 Treffer zurück kommt.

    Ich würde aber gerne auch mehrere Treffer zulassen und ein zweidimensionales Array erzeugen.

    Sprich: Ich habe eine Tabelle "Bestellungen", darin sind z.B. 10 Spalten und 100 Datensätze

    Nun möchte ich (via select) 3 von 10 Spalten definieren und 1 Kunden (mit z.B. 20 Datensätzen), das SELECT-Statement soll mir also ein Array zurückliefern, das 20x3 Felder groß ist. Das würde ich gerne als View ausgeben oder das Array anderweitig weiterverarbeiten.

    Dein Vorschlag liefert mir ein eindimensionales Array (1x3)

    Kann ich in Ninox überhaupt ein zweidimensionales Array definieren und verarbeiten? Oder sind Arrays in Ninox immer nur 1-dimensional?

     

    Danke schon mal.

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

    Hallo Wolfgang, in Ninox kannst du solche "Views" direkt in der Tabellenansicht vornehmen: Mit einem Klick auf den jeweiligen Spaltentitel lässt sich die Ansicht filtern, sortieren und gruppieren oder auch einzelne Spalten ein- und ausblenden. Wenn man eine bestimmte Ansicht häufiger benötigt, kann man über das Plus-Zeichen eine neue erzeugen und unter einem eigenen Namen speichern.

     

    Außerdem lassen sich solche Ansichten mit dem gleichnamigen Gestaltungselement auch in Datenformulare einbetten, indem man dort unter "Funktion" den entsprechenden select-Befehl angibt. Um zum Beispiel alle Bestellungen des gerade aktiven Kunden anzuzeigen:

     

    let myKunde := KundenNr;
    select Bestellungen where KundenNr = myKunde

     

    Auch dort lassen sich dann alle benötigten Spalten/Felder ein- und alle nicht benötigten ausblenden. Man sollte das allerdings im Administratormodus machen, sonst "vergisst" Ninox die Einstellungen.

     

    Was die Weiterverabeitung betrifft: Ninox arbeitet anders als SQL-Datenbanken. Wenn du das "first()" bei Torstens Formel weglässt, dann bekommst du ein eindimensionales Array mit den internen IDs der betreffenden Datensätze:

     

    let myKunden := select Bestellungen where Kunde = xyz

     

    Dieses Array lässt sich nun wiederum auf vielfältige Weise weiterverarbeiten, zum Beispiel mit einer Schleife:

     

    for i in myKunden do
        i.FELDNAME := null
    end

     

    In diesem simplen Beispiel würde das Feld FELDNAME in allen betreffenden Datensätzen auf Null gesetzt, also geleert. Auf diese Weise kann man auf alle Felder zugreifen und alles mögliche damit anstellen.

    • Dr. Garbe, Lexis & von Berlepsch
    • Wolfgang_Richter
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke dir, das bringt mich weiter.
    Stelle nur gerade fest, dass eine Funktion keine Datenänderungen vornehmen darf. Aber da fummel ich mich weiter durch.

    Thx so far ...

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

    Ich kenne zwar den Zusammenhang nicht, aber - stimmt: Funktionsfelder dienen ausschließlich dem Zweck, Berechnungen vorzunehmen und deren Ergebnis anzuzeigen. Andere Daten ändern kann man damit nicht. Dafür gibt es Trigger und Schaltflächen.