VBA - Abfrage ergänzen um order by?

Mitglied: DerParte

DerParte (Level 1)

27.04.2010, aktualisiert 18.10.2012, 6014 Aufrufe, 2 Kommentare

Nabend.

Ich möchte gerne die folgende SQL-Abfrage um eine Anordnung ergänzen:

Private Sub cboEinsatzort_AfterUpdate()
'Die Abfrage wird dynamisch abgearbeitet
Me.EinsatzortUF.Form.RecordSource = "SELECT Einsatzort.Einsatzort AS Einsatzort, IIf([Personal.Titel] Is Null,[Nachname], " & _
"[Titel.Titel] & ' ' & [Nachname]) AS NName, Personal.Vorname, Personal.Wäschenummer " & _
"FROM Titel RIGHT JOIN (Einsatzort INNER JOIN Personal ON Einsatzort.EinsatzortID = Personal.Einsatzort) " & _
"ON Titel.TitelID = Personal.Titel " & _
"WHERE EinsatzortID=" & Me.cboEinsatzort

'Formulardaten erneuern
Me.Refresh
End Sub

folgendes funktioniert nicht:

"WHERE EinsatzortID=" & Me.cboEinsatzort " & _
"order by NName

Aber warum nicht?
Mitglied: Biber
27.04.2010, aktualisiert 18.10.2012
Moin DerParte,

folgendes funktioniert nicht:
....ist keine brauchbare Fehlermeldung
Bitte poste künftig Code in Codetags und Fehler mit Fehlerbeschreibungen und/oder Fehlermeldungen.

Aber warum nicht?
Okay, das lasse ich als Frage gelten.

Es funktioniert nicht, weil das "ORDER BY" den Spalten-Aliasnamen "NNAME" noch gar nicht kennt.

Du kannst dreierlei machen
1) Ändern der ORDER BY-Klausel auf
 ORDER BY IIf([Personal.Titel] Is Null,[Nachname], " & "[Titel.Titel] & ' ' & [Nachname])
....was funktionieren wird, aber alles noch unleserlicher macht und außerdem vermutlich genauso schnell performed wie die Tigerentenkoalition

2) Noch einen äußeren SELECT drumherumpacken, der da lautet
01.
 SELECT x.* from (
02.
{ dein vollständiges bisheriges Gewurschtel von "SELECT"...bis "Me.cboEinsatzort" }
03.
) as x
04.
ORDER BY x.NNAME
3) Oder aber du gibst einfach als ORDER BY-Klausel ein "ORDER BY 2"
Dann wird nach der zweiten Spalte sortiert, egal wie die betitelt ist

Variante 3 ist natürlich recommended... so würde ich es machen.

Grüße
Biber

P.S. Was ist denn mit deiner fast gleichlautenden Frage Access - Order by zusammengesetzten Feld? von gestern - ist die damit auch beantwortet oder gibst du da gesondert kein Feedback?
Mitglied: NetWolf
29.04.2010 um 21:42 Uhr
Hi,

folgendes funktioniert nicht:

"WHERE EinsatzortID=" & Me.cboEinsatzort " & _
"order by NName

Aber warum nicht?

logisch, da fehlt z.B. ein & und ein " und ein ; und Leerzeichen

Die SQL-Anweisung ist ein String, also schreiben wir das ganze mal in eine Zeile:
"WHERE EinsatzortID= " & Me.cboEinsatzort & " order by NName"
<------String----------------> & <---Variable -----> & <----- String ------>
Die Leerzeichen nach dem Gleichheitszeichen = und vor > order< sind wichtig!!

Versuche dir immer vorzustellen, wie der String dann am Ende fertig aussehen würde:
WHERE EinsatzortID=123order by NName


Am Ende würde ich IMMER ein Semikolon ; setzen:
"WHERE EinsatzortID= " & Me.cboEinsatzort & " order by NName;"

So, nun sollte es funktionieren und du weißt nun auch warum.


Grüße aus Rostock
Wolfgang
(Netwolf)
Titel: VBA - Abfrage ergänzen um order by?
Content-ID: 141596
Art des Inhalts: Frage
Ausgedruckt am: 16.09.2019 um 18:32:10 Uhr
URL: https://administrator.de/contentid/141596