Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Sortierung einer SQL-Abfrage mittels VBA - Dringend

Begonnen von claudia2324, August 07, 2013, 12:49:03

⏪ vorheriges - nächstes ⏩

claudia2324

Hallo liebe Access-Experten,

ich kommt nicht weiter bei der Sortierung eine SQL-Abfrage mittels VBA beim Druck von personalisierten Bewertungsbögen für Interviews mit Studenten.

Ich habe diese DB angehängt mit Testdatensätzen.

Die Sortierung soll so sein, dass erst nach ausgewählte Station (Listenfeld K2) aufsteigend, dann nsch Durchgang aufsteigend und dann nach Etage aufsteigend sortiert wird.

In der Abfrage selbst lässt sich dass wohl nicht lösen, da die Auswahl der Station auf dem Formular "Sort_Seriendruckliste" entscheidend ist.

Mein Codeversuch sieht so aus:

strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]=' & Me!K1 [ORDER BY Me!K2 [ASC][,Bewertungsboegen.Etagennr [ASC]][,Durchgangtxt (ASC]]]"

-> klappt aber leider nicht. Erhalte dann die vogesehende Fehlermeldung der MsgBox.

Ich soll heute Abend ableifern, also dringend...

Ich hoffe ihr könnt mir helfen.  :)

Viele Grüße

Claudia

[Anhang gelöscht durch Administrator]

claudia2324

Hab schon gesehen... "Bewertungsboegen.Durchgangtxt " ... Aber das macht es auch nicht besser...  ???

DF6GL

#2
Hallo,

ohne jetzt die Db angesehen zu haben, gilt allgemein:   Gruppierungen und Sortierungen müssen (sollen)  im Bericht selber (Entwurf/Gruppieren und sortieren) erfolgen.  Die Einstellungen in Berichts- Abfragen werden in den meisten Fällen ignoriert und sollten dort gar nicht auftauchen.


Zudem ist die SQL in der Order-Klausel ziemlich verkorkst und sollte so lauten, wenn überhaupt:

strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]=" &  Me!K1 & " ORDER BY Etagennr ASC, Durchgangtxt ASC"

bahasu

Hi,

[ORDER BY Me!K2

was soll [ vor dem obigen Ausdruck?

Da accb-Datei kann ich diese nicht untersuchen. mdb vergößert den Kreis der Hilfeanbieter.

Harald
Servus

claudia2324

Hallo,

und wie bekomme ich es per VBA hin, dass die im Formular ausgewählte Station -> Listenfeld K2 als erstes aufsteigend sortiert wird?

Hoffe ihr könnt mir nochmal helfen  :)

VG

claudia2324

Hier ist mdb

[Anhang gelöscht durch Administrator]

DF6GL

Hallo,

Du kannst nur nach den Feldern sortieren/gruppieren, die auch in der Datenherkunft des Berichtes vorhanden sind..

"die im Formular ausgewählte Station -> Listenfeld K2 als erstes aufsteigend sortiert wird"

wenn eine solche Station ausgewählt und in der Abfrage als Kriterium benutzt wird, warum soll danach sortiert werden?
Oder ich versteh die Situation falsch.


Erklär mal genauer anhand der DB, wo und wie die Berichte gewählt und aufgerufen (Formular, Code, Ereignis??) werden und welche Kriterien für genau einen solchen Bericht (Name??) gelten müssen.

bahasu

#7
Hi,

mdb geladen: ok

Sortieren nach einem Feld kann ich mir noch vorstellen,
aber sortieren nach dem Inhalt eines Feldes verstehe ich nicht.  :(

Da es Berichte 1 bis 7 gibt und auch 7 Inhalte bei K2 vermute ich: Ist statt Sortieren die Auswahl eines Berichtes gemeint?

Harald

PS Oder ist statt Sortieren SELEKTIEREN gemeint? {aber dann dürfte die Reihenfolge der Auswahl keine Rolle spielen  ??? )
Servus

claudia2324

Hallo DF6GL,

vielen Dank für den Hinweis.

Vor lauter Aufregung in die falsche Richtung gestrampelt... :-[

An jedem Bericht hängt einer Abfrage mit der die Daten wie die Etagennr, Vorname, Nachname etc gefiltert werden, ich musste hier jetzt einfach die entsprechende Station hinzufügen und dann mit ORDER BY nach Etagennr und Durchgang aufsteigend sortieren.

Ich hoffe, dass damit alles richtig ist...

VG
Claudia

DF6GL

Naja, dann öffne die Berichte und stelle dort mit dem beschriebenen Vorgang die Sortierung ein und NICHT in der Abfrage...

claudia2324




claudia2324

Ich raffe da gerade was noch nicht...

Ich muss doch nicht nach der Station sortieren (also siehe Abfrage "Int_Bewertungsbögen", wenn es nun einen Bericht pro Station gibt...

Es geht jetzt einfach darum, dass die als PDF gedruckten Bewertungsbögen in der korrekten vorgegebenen Reihenfolge gedruckt werden können, damit der Juror die Berichte dann in der richtigen Reihenfolge auf dem Tisch liegen hat. Also eigentlich nach Durchgang... ?!

Ich muss da nochmal den Kollegen fragen!

Wo kann ich die Sortierung im Bericht selbst manipulieren?  ???

VG


claudia2324

#14
Hallo,

ich hab mal eine Excel-Tabelle angehägt (generiert aus der Abfrage "Int_Bewertungsbögen") in der man die korrekte Sortierung sieht (Früher wurde das mit Word-Serienbriefen gelöst...). So habe ich das übergeben bekommen.

Es geht jetzt einfach darum, dass die als PDF gedruckten Bewertungsbögen in der korrekten vorgegebenen Reihenfolge gedruckt werden können, damit der Juror die Berichte dann in der richtigen Reihenfolge auf dem Tisch liegen hat.

Sortierung erst nach entsprechender Station hier "Station1", dann nach "Durchgangtxt" und dann nach "Etagennr".

Das habe ich noch nicht in der DB gelöst.

- In meiner Formular zum Drucken der personalisierten Bögen wähle ich die Etage (Listenfeld "K1"), die Stationsnummer (Listenfeld "K2") und die Juror-Kennung (Listenfeld "K3") aus.
- Pro Station gibt es einen Bericht mit einer dazugehörigen Abfrage
- Per VBA werden dann die Daten aus den Berichtsabfragen in den Bericht als PDF gedruckt (das PDF wird per BVA an den Ablageort der DB gelegt)


Private Sub Blanko_Pruefb_pdf_Click() ' Genrierung eines Blanko-Bewertungsbogens als PDF-Datei

Dim stDocName As String, strSQL As String
   If IsNull(Me!Kblanko) Then GoTo MyErr Else GoTo Prüfung
   
Prüfung:
   If Me!Kblanko = "5_Schreibblatt-Motivation" Then GoTo SchreibblattBlanko Else GoTo Blanko_Pruefb_pdf
   
SchreibblattBlanko:
   strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where 1=2"
   stDocName = "abf_Station_" & Me!Kblanko
   CurrentDb.QueryDefs(stDocName).SQL = strSQL
   'DoCmd.OpenReport "Station_" & Me!Kblanko, acViewReport
   DoCmd.OutputTo acOutputReport, "Station_" & Me!Kblanko, acFormatPDF, CurrentProject.Path & "\Station-" & Me!Kblanko & "_" & "Blanko" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
   Exit Sub
   
Blanko_Pruefb_pdf:
   strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where 1=2"
   stDocName = "abf_Station_" & Me!Kblanko
   CurrentDb.QueryDefs(stDocName).SQL = strSQL
   DoCmd.OutputTo acOutputReport, "Station_" & Me!Kblanko, acFormatPDF, CurrentProject.Path & "\Station-" & Me!Kblanko & "_" & "Blanko" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
   Exit Sub
   
MyErr:
   MsgBox "Bitte wählen Sie eine Prüfstation aus der vorgegebenen Werteliste aus! Ggf. geöffnete PDF-Dateien schließen."
Exit Sub
End Sub


Die Hürde ist nun wohl, dass ja nach Auswahl einer Stationsnummer über das Listenfeld "K2" entsprechend korrekt sortiert wird.

Ich muss wohl doch meine Abfragen pro Bericht erweitern, oder?

Ich hoffe meine Erläuerungwar verständlicher?

Ich bin dankbar für weitere Hilfe.

VG

Claudia

[Anhang gelöscht durch Administrator]