Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: claudia2324 am August 07, 2013, 12:49:03

Titel: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 12:49:03
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]
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 13:11:29
Hab schon gesehen... "Bewertungsboegen.Durchgangtxt " ... Aber das macht es auch nicht besser...  ???
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: DF6GL am August 07, 2013, 13:11:32
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"
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: bahasu am August 07, 2013, 13:13:40
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
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 13:47:28
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
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 13:50:56
Hier ist mdb

[Anhang gelöscht durch Administrator]
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: DF6GL am August 07, 2013, 14:04:22
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.
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: bahasu am August 07, 2013, 14:17:10
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  ??? )
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 14:33:20
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
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: DF6GL am August 07, 2013, 14:36:09
Naja, dann öffne die Berichte und stelle dort mit dem beschriebenen Vorgang die Sortierung ein und NICHT in der Abfrage...
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 14:36:51
Ja, da klappt auch was nicht...
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: DF6GL am August 07, 2013, 14:37:19
und WAS??
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 14:39:24
Moment...
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 14:57:21
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

Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 15:08:49
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]
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: DF6GL am August 07, 2013, 15:23:27
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.





Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 07, 2013, 15:49:21
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


Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: DF6GL am August 07, 2013, 16:36:34
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?
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: DF6GL am August 07, 2013, 16:53:54
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!!)
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 08, 2013, 15:49:37
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
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: DF6GL am August 08, 2013, 15:57:42
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...
Titel: Re: Sortierung einer SQL-Abfrage mittels VBA - Dringend
Beitrag von: claudia2324 am August 08, 2013, 16:30:52
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