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
-
Hallo Dirk,
vielleicht so:
--
let p := first((select Preise)['LF-Nr' = "123" and 'Art-Nr' = "123"]).'VK-Preis';
p
---
Leo
-
Hallo Leonid,
vielen Dank, aber wo ist jetzt der Unterschied in Deiner Zeile ???
-
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
-
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.
-
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
-
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 ???
-
first ( select Preise where 'LF-Nr' = "123" and 'Art-Nr' = "123" ).'VK-Preis'
-
Ist das nur eine andere Schreibweise zu den eckigen Klammern ? Warum die Schreibweise mit den eckigen Klammern ?
-
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".
-
ok, dann muss ich das testen
-
Vielleicht können Leo oder einer der Supporter ja noch was dazu sagen. Ich wollte nur die Gelegenheit nutzen. ;)
-
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
-
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.
-
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 .
-
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
-
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.
-
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 5 JahrenZuletzt aktiv
- 17Antworten
- 9155Ansichten
-
1
Folge bereits