VBA - Abfrage ergänzen um order by?
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?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141596
Url: https://administrator.de/contentid/141596
Ausgedruckt am: 08.11.2024 um 15:11 Uhr
2 Kommentare
Neuester Kommentar
Moin DerParte,
Bitte poste künftig Code in Codetags und Fehler mit Fehlerbeschreibungen und/oder Fehlermeldungen.
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
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
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 von gestern - ist die damit auch beantwortet oder gibst du da gesondert kein Feedback?
folgendes funktioniert nicht:
ist keine brauchbare FehlermeldungBitte 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])
2) Noch einen äußeren SELECT drumherumpacken, der da lautet
SELECT x.* from (
{ dein vollständiges bisheriges Gewurschtel von "SELECT"...bis "Me.cboEinsatzort" }
) as x
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 von gestern - ist die damit auch beantwortet oder gibst du da gesondert kein Feedback?
Hi,
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)
folgendes funktioniert nicht:
"WHERE EinsatzortID=" & Me.cboEinsatzort " & _
"order by NName
Aber warum 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)