Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Sortierung einer SQL-Abfrage mittels VBA - Dringend

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

⏪ vorheriges - nächstes ⏩

DF6GL

Hallo,

und WO steht denn diese ominöse Reihenfolge??
Zitat
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.


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

Wenn dein Bericht nach "Station"  (z. B. Bericht "Station_1" ) ausgewählt wird, dann gibt es nur diese eine Station im Bericht und demzufolge gibt es nicht danach zu sortieren (wie vorher schon gesagt).  Dein Code druckt auch nur den (einzigen) Bericht, der sich aus der Angabe im Form-Steuerelement "Kblanko" ergibt. 

Wenn ich das nun richtig verstehe, willst Du alle Berichte (Station_1 bis Station_7 ) in der Reihenfolge ihrer Nummer im Namen nacheinender ausdrucken.

Wenn das so ist, mußt Du das mit einer Schleife lösen, die eben alle Berichte durchläuft und nacheinander ausdruckt.






claudia2324

Ich möchte, dass die Sortierung pro Druck einer Station (das soll so bleiben, damit jeder Juror pro Station und Etage seinen Packen Bewertungsbögen bekommt) so wie vorgegeben und in der angehängten Tabelle zu sehen ist, sortiert wird.

Ich weiß nicht, wie ich das noch besser beschreiben soll  ???

Zitat
Wenn dein Bericht nach "Station"  (z. B. Bericht "Station_1" ) ausgewählt wird, dann gibt es nur diese eine Station im Bericht und demzufolge gibt es nicht danach zu sortieren (wie vorher schon gesagt). 

Aber wenn man sich die Abfrage "Int_Bewertungsbögen" bzw. die Tabelle "Sortierung_HM-INT_Bewertungsbögen.xls" ansieht, sieht man, dass für jede Station, z.b. Station1 Nummerierungen von 1 bis 50 vergeben wurden. Diese müssen aufsteigend sortiert werden. Sonst stimmt die Reihenfolge nicht. Wenn man nur nach Durchgang und Etage sortiert, stimmt die Reihenfolge nicht.

Macht es Sinn die VBA Codezeile zum SQL-String so zu erweiter?

strSQL = "SELECT INT_Bewertungsboegen.Station1, INT_Bewertungsboegen.Station2, INT_Bewertungsboegen.Station3, INT_Bewertungsboegen.Station4, INT_Bewertungsboegen.Station5, INT_Bewertungsboegen.Station6, INT_Bewertungsboegen.Station7, INT_Bewertungsboegen.Station8, INT_Bewertungsboegen.Station9,INT_Bewertungsboegen.Station10, 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 & "'"

... und dann im Bericht zu filtern? Ich weiß nur leider nicht, wie das geht...

Hoffe auf Hilfe.

VG



DF6GL

Hallo,


ausgehend von diesem Code, der EINEN Bericht für EINE Etage(nnummer) , jedoch mit allen dort befindlichen Stationen  druckt, soll dieser so erweitert werden, dass für ALLE Etagen(nummern) die jeweiligen Berichte sortiert nach der Etagennummer gedruckt werden.

Private Sub Pruefb_pdf_Click() ' Genrierung der personalisierten Bewertungsbogens als PDF-Datei
'On Error GoTo MyErr
Dim stDocName As String, strSQL As String

    If IsNull(K1) Or IsNull(K2) Or IsNull(K3) Then GoTo MyErr Else GoTo Prüfung

Prüfung:
If Not IsNull(K1) And Not IsNull(K2) And Me!K2 = "5_Schreibblatt-Motivation" Then GoTo SchreibblattMotivationDruck Else GoTo Pruefb_pdf

SchreibblattMotivationDruck:
       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"
    stDocName = "abf_Station_" & Me!K2
    CurrentDb.QueryDefs(stDocName).SQL = strSQL
    DoCmd.OutputTo acOutputReport, "Station_" & Me!K2, acFormatPDF, CurrentProject.Path & "\Station-" & Me!K2 & "_" & "Etage-" & Me!K1 & "_" & "Juror-" & Me!K3 & Format(Date, "\_yyyy-mm-dd") & ".pdf" 'Ablage der pdf-Datei am Speicherort der Datenbank
    Exit Sub

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 [Etagennr]='" & Me!K1 & "'"
    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, Etagennr ASC, Durchgangtxt ASC"
    stDocName = "abf_Station_" & Me!K2
    CurrentDb.QueryDefs(stDocName).SQL = strSQL

    DoCmd.OutputTo acOutputReport, "Station_" & Me!K2, acFormatPDF, CurrentProject.Path & "\Station-" & Me!K2 & "_" & "Etage-" & Me!K1 & "_" & "Juror-" & Me!K3 & Format(Date, "\_yyyy-mm-dd") & ".pdf" 'Ablage der pdf-Datei am Speicherort der Datenbank
    Exit Sub
   
MyErr:
    MsgBox "Bitte zuerst die JID generieren! Ggf. geöffnete PDF-Dateien schließen."
    Exit Sub
   
End Sub


Ist das so korrekt?

DF6GL

Hier der Vorschlag dazu:

Private Sub Alle_Pruefb_pdf_Click() ' Generierung der personalisierten Bewertungsbögen  als PDF-Datei
'On Error GoTo MyErr
Dim stDocName As String, strSQL As String, StnNr as Long, JurNr as String
Dim rs As Dao.Recordset

  Set rs=Currentdb.Openrecordset("Select distinct Etagennr from INT_Bewertungsboegen order by Etagennr",dbOpenSnapshot)
If rs.Recordcount > 0 Then

Do until rs.EOF

For StnNr = 1 to 10   'alle Stationen durchlaufen

JurNr ="XYZ"  ' woher dieser Wert auch herkommt und sich zusammensetzt.

    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]=" & rs!Etagennr & " ORDER BY  Durchgangtxt ASC"
    stDocName = "abf_Station_" &  StnNr
    CurrentDb.QueryDefs(stDocName).SQL = strSQL

    DoCmd.OutputTo acOutputReport, "Station_" &  StnNr , acFormatPDF, CurrentProject.Path & "\Station-" &  StnNr & "_" & "Etage-" & rs!Etagennr & "_" & "Juror-" & JurNr & Format(Date, "\_yyyy-mm-dd") & ".pdf" 'Ablage der pdf-Datei am Speicherort der Datenbank

Next

Loop

End If

rs.Close:Set rs = Nothing


Exit Sub
   
   
End Sub




(unchecked!!)

claudia2324

Hallo und riesen Dankeschön.  :)

Es soll nun so sein, dass jeweils für eine Prüfungsstation aber über alle Etagen hinweg die Daten an den Bericht übergeben werden sollen. Ich versuche mal den Code von DF6GL (vorheriger Beitrag) darauf zu münzen undgebe gerne Rückmeldung.

Noch zu der einen Frage bzw. dem Hinweis im Codebeispiel.

Zitat
JurNr ="XYZ"  ' woher dieser Wert auch herkommt und sich zusammensetzt.

-->
Private Sub K3_BeforeUpdate(Cancel As Integer) ' JID generieren -> wird im Bewertungsbogen als Juror-ID ausgegeben
Dim ID As Long

If IsNull(K1) Or IsNull(K2) Or IsNull(K3) Then
        MsgBox "Bitte Auswahl vervollständigen!"

Else
    ID = K1 & K2 & K3
    JID = ID
   
End If
End Sub


VG

Claudia

DF6GL

Hallo,

ok, dann musst Du diesen Wert in (meinem) Code eben noch entspr. berücksichtigen.


Prinzip ist , dass mit einer Recordset-Schleife alle Etagennummern durchlaufen werden und für jede dieser Nummern ein Bericht mit den jeweiligen Stationen gedruckt wird.

Falls Du das so gemeint hast...

claudia2324

Danke ,ich werds so machen...

Ja, so hab ich das gemeint. Ich wähle eine Station (also einen Bericht  aus) und eine Jurorkennung und dann werden alle Bewerberdatensätze an den Bericht übergeben wobei mit der Schleife dann alle Etagen durchlaufen.

---
Das läuft so, dass eine Bewerbergruppe einer Etage zugeteilt wird und dann müssen die Bewerber 10 Interwiews (also 10 Bewertungsbögen pro Student) absolvieren. Es gibt mehrere Durchlaufe an dem Tag und die Bewerber werden vorab entsprechend einbestellt. Nachdem die Bögen aus dem Druck kommen, bekommt jeder Juror (drei pro Interviewstation) seine Packen für alle Durchläufe.
---

VG

Claudia