derparte
Goto Top

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?

Content-Key: 141596

Url: https://administrator.de/contentid/141596

Printed on: April 18, 2024 at 01:04 o'clock

Member: Biber
Biber Apr 27, 2010, updated at Oct 18, 2012 at 16:41:54 (UTC)
Goto Top
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
 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?
Member: NetWolf
NetWolf Apr 29, 2010 at 19:42:18 (UTC)
Goto Top
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)