Seite 1 von 1

Abrage - Order by als dynamische Auswahl aus Formular

Verfasst: Do 31. Dez 2015, 14:38
von n0gg
Hallo

ich habe eine größere Datenbank erstellt, sowie eine Abrage und ein Formularentwurf, über den ich mir die Datenbankeinträge anzeigen lassen kann und auch filtern kann. Was fehlt ist jetzt nur noch die Sortierung. Im Moment ist diese noch starr nach einem Tabelleneintrag.

Im groben sieht meine Abfrage so aus:
SELECT Eintrag1, Eintrag2, Eintrag3 FROM Tabelle WHERE xyz ORDER BY Eintrag1.

Ich möchte nun in meinem Formular nicht starr nach Eintrag1 sortieren sondern im Prinzip einen Alias einsetzen und diesen dann im Formular durch ein Listenfeld auswählen.

Also SELECT ... ORDER BY alias1.

Den Alias möchte ich dann im Formular über ein Listenfeld ausfählen - also nach Eintrag1, Eintrag2 Eintrag3 um so auswählen zu können, wo nach ich filter.

Wie schaffe ich dies, bisher gekomme ich nur Fehler wenn ich dies versuche...

Re: Abrage - Order by als dynamische Auswahl aus Formular

Verfasst: Do 31. Dez 2015, 17:49
von RobertG
... und hier ein kurzer Hinweis zur Sache:
Es ist nicht möglich, einen Feldbegriff variabel in eine Abfrage zu schreiben. Das Vorhaben kann nur mit Hilfe von Makros gelingen. Angenommen das Listenfeld befindet sich in dem gleichen Formular wie die Tabelle selbst:

Code: Alles auswählen

SUB Order(oEvent AS OBJECT)
	oFeld = oEvent.Source.Model
	oForm = oFeld.parent
	stOrder = """"+oFeld.CurrentValue+""" ASC"
	oForm.Order = stOrder
END SUB
Nicht weiter getestet, Deklaration der Variablen fehlt, vielleicht auch ein Fehler bei den Anführungszeichen.
Ob anschließend das Formular über oForm.reload neu eingelesen werden muss kann ich nicht sagen.

Gruß

Robert

Re: Abrage - Order by als dynamische Auswahl aus Formular

Verfasst: Fr 1. Jan 2016, 13:58
von F3K Total
Hallo Robert,
RobertG hat geschrieben:Es ist nicht möglich, einen Feldbegriff variabel in eine Abfrage zu schreiben...
Da hast du Recht. Was aber funktioniert, sofern die Sortierfelder vom gleichen Datentyp sind, also entweder alles Zahlen oder alles Texte sind, ist eine Fallunterscheidung:

Code: Alles auswählen

... ORDER BY
CASE 
WHEN (SELECT "SORTIERSPALTE" FROM "Filter") = 'Nachname' THEN "Nachname" 
WHEN (SELECT "SORTIERSPALTE" FROM "Filter")  = 'Vorname' THEN "Vorname" 
END
Anbei eine Beispieldatei.
Gruß R