PDA

Vollständige Version anzeigen : Laufende Abfrage sortieren


Scoopy Doo
16.01.2003, 19:43
Hallo Zusammen,

über mein Hpt-Frm starte ich ein weiteres Frm in dem eine Listbox ist. Hier wird erst einmal der aktuelle Datensatz aus dem Hpt-Frm angezeigt.


In dem besagten Listboxformular kann ich den aktuellen Wert in dem ungebundenen Feld löschen. Nun werden nur bestimmte Datensätze angezeigt. Die Selektierung erfolgt durch mehrere Abfragen. Es sind leider 1 Hpt-Abfrage und weitere Unterabfragen nötig, um auf das richtige Ergebnis zu kommen. Aufgrund vier erforderlichen Abfragen ist ein SQL String - zu komplex (zumindest für mich).

So nun zu meiner Frage:

Kann ich irgendwie die Sortierreihenfolge in der laufenden Abfrage beieinflussen, so dass ich nicht die Abfrage öffnen muss, um das entsprechende Feld anzuwählen und es entweder auf- oder absteigend
sortieren zu lassen.

Das Feld, was sortiert werden soll, ist nicht immer das Gleiche.
d.h.: z.B. nach Kunden oder nach Lfd.Nr.: oder Datum usw.


Vielen Dank für Eure Hilfe


Gruss Scooby Doo


A97

Nouba
16.01.2003, 19:51
Hallo Scooby Doo,

wie sieht denn die Abfrage(n) aus? Wie unterscheidest Du, wonach sortiert werden soll?

Scoopy Doo
16.01.2003, 20:29
Ich versuchs mal zu erklären.

- In dem Hpt-frm ist eine Ufo (1:n) (noch weitere Ufo vorhanden - spielen aber keine Rolle)
- Duplikate sind möglich.

Anzeigemöglichkeiten der Datensätze (Aussnahmebeispiel !!!)

Zeige mir alle Datensätze in der Listbox an, wo der aktuelle Wert aus dem
UFo angezeigt und die weiteren Datensätze, die mit dem Wert gleich sind und noch 1:n Möglichkeiten.

Beispiel:

Lfd.Nr.:_1_aus_Hpt-Frm_Werte aus UFo z.B. Blau;Grün;Weiss
Lfd.Nr.:_10_aus_Hpt-Frm_Werte aus UFo z.B. Gelb;Grün;Blau
Lfd.Nr.:_50_aus_Hpt-Frm_Werte aus UFo z.B. Blau;Grün;Schwarz
Lfd.Nr.:_60_aus_Hpt-Frm_Werte aus UFo z.B. Orange


Steht jetzt z.B. der aktuelle Wert z.B. Blau im UFo und ich drücke das Knöpfchen, bekomme ich folgendes Ergebnis in der Listbox angezeigt.

Lfd.Nr.:1 & 10 & 50 ( also 9 Datensätze )


Über das Listboxformular werden noch weitere Kriterien ausgewählt.
Der Wert vom Ufo wird an die Abfrage übergeben.

Über das Listboxformular ist es auch möglich die selektierten Daten als
Filter auf das Hptfrm zu verwenden. Hier ist das Sortieren auch kein Problem, da die Übergabe per Sql-String erfolgt.

In dem Listfeld sind 8 Felder gebunden.
Standardmässig erfolgt die Sortierung über die Lfd.Nr.:, aber ich möchte
auch mal z.B nach dem Kunden sortieren oder nach einer von anderen sechs Möglichkeiten.

Die Sortierung soll in der Listbox erfolgen.


Gruss Scoopy Doo

Nouba
16.01.2003, 20:57
Hallo Scooby Doo,

dazu könnte die Rowsource der Listbox neu zugewiesen werden. In den Sql-String wird je nach Wunsch eine andere <code>Order By</code>-Bedingung integriert.

Scoopy Doo
17.01.2003, 09:04
Hi Nouba,

erst einmal vielen Dank für Deine Hilfe.

Die Übergabe der Listboxdaten zwecks Filter- & Sortierungseigenschaften
auf Hpt-Frm sieht wie folgt aus:

Forms!frmAnfragen.RecordSource = "SELECT * from [tblAnfragen] INNER JOIN tblZgNr ON tblAnfragen.LaufendeNr = tblZgNr.Index WHERE (tblZgNr.strgZgNr) like '" & "*" & txtSuchen & "*" & "' and (((Len([strgZgNr])) Between '" & txtAnzahl_der_Länge_Von_Zg_1 & "' And '" & txtAnzahl_der_Länge_Von_Zg_2 & "'))and tblAnfragen.kunde like '" & "*" & txtSuchen_KD & "*" & "' ORDER BY " & strgName & " "

Das Funktioniert auch ganz gut.


Nach wie vor klappt das Sortieren nicht in der Listbox.
z.Zt ist die Funktion beim Laden eingebunden.

Aktuallisiert wird die Listbox wie folgt : Me!lstSuchen.Requery

Private Sub Form_Load()
' um das Suchformular auch von anderen Formularen aus zu starten

On Error Resume Next

Select Case OpenArgs
Case "frmAnfragen"
lstSuchen.RowSource = "qry_frmAnfragen_Suche_ZeichnungsNr_pre"
Label1.Caption = "Lfd.Nr.:"
Label2.Caption = "Anfrage.Nr.:"
Label3.Caption = "Kunde:"
Label4.Caption = "Produktgruppe:"
Label5.Caption = "Teilebezeichnung:"
Label6.Caption = "Zeichnungs.Nr.:"
Label7.Caption = "Jahresbedarf:"
Label8.Caption = "Laufzeit:"

End Select

DSAnz = lstSuchen.ListCount
Me!txtSuchen.SetFocus

End Sub

Wie kann ich hier nun die Order by Klausel anfügen?
Me!lstSuchen.RowSource = "[qry_frmAnfragen_Suche_ZeichnungsNr_pre]"

Vielen Dank im voraus,

MfG

Scoopy Doo

Gast
18.01.2003, 06:48
Hat keiner eine Lösungsansatz?

Nouba
18.01.2003, 08:06
Hallo Scooby Doo,

zeige mal bitte den SQL-String von <strong>qry_frmAnfragen_Suche_ZeichnungsNr_pre</strong>, wenn Du eine exakte Lösung benötigst.

Übergib an OpenArgs außer dem Formnamen auch noch den Sortierparameter getrennt durch ein Zeichen, was im OnOpen Event geparst wird. Dann setzt Du einen SQL-String zusammen: <code>SELECT * FROM qry_frmAnfragen_Suche_ZeichnungsNr_pre ORDER BY</code> hier kommt die auszulesende Sortierinfo aus OpenArgs hin. Das wird dann in die RowSource der Listbox geschrieben.

In der KnowHow (http://www.freeaccess.de/knowhow.asp) befindet sich IMO ein Beispiel zum Sortieren in einer Listbox nach variablen Spalten.

Scoopy Doo
18.01.2003, 12:33
Hi Nouba,

vielen Dank für Deine Hilfe.

Ich kann Dir leider erst am Montag den SQL - String senden.

Gruss Scoopy Doo

Scoopy Doo
20.01.2003, 07:08
Hi Nouba,

hier nun der SQL- String aus der Abfrage.

SELECT tblAnfragen.LaufendeNr, tblAnfragen.AnNr, tblAnfragen.Kunde, tblAnfragen.Produktgruppe, tblAnfragen.Bezeichnung, Len([strgZgNr]) AS strLängeZg, qry_frmAnfragen_Suche_ZeichnungsNr_sec_1.strgZgNr, tblAnfragen.Stückzahl, tblAnfragen.Laufzeit, tblAnfragen.EMJ, [forms]![frmAnfragen_Suche_ZeichnungsNr].[txtAnzahl_der_Länge_Von_Zg_1] AS Ausdr1
FROM tblAnfragen INNER JOIN qry_frmAnfragen_Suche_ZeichnungsNr_sec_1 ON tblAnfragen.LaufendeNr = qry_frmAnfragen_Suche_ZeichnungsNr_sec_1.Index
GROUP BY tblAnfragen.LaufendeNr, tblAnfragen.AnNr, tblAnfragen.Kunde, tblAnfragen.Produktgruppe, tblAnfragen.Bezeichnung, Len([strgZgNr]), qry_frmAnfragen_Suche_ZeichnungsNr_sec_1.strgZgNr, tblAnfragen.Stückzahl, tblAnfragen.Laufzeit, tblAnfragen.EMJ, [forms]![frmAnfragen_Suche_ZeichnungsNr].[txtAnzahl_der_Länge_Von_Zg_1]
HAVING (((tblAnfragen.Kunde) Like "*" & [forms]![frmAnfragen_Suche_ZeichnungsNr]![txtSuchFilter_KD] & "*") AND (([forms]![frmAnfragen_Suche_ZeichnungsNr].[txtAnzahl_der_Länge_Von_Zg_1]) Is Null)) OR (((tblAnfragen.Kunde) Like "*" & [forms]![frmAnfragen_Suche_ZeichnungsNr]![txtSuchFilter_KD] & "*") AND ((Len([strgZgNr])) Between [forms]![frmAnfragen_Suche_ZeichnungsNr]![txtAnzahl_der_Länge_Von_Zg_1] And [forms]![frmAnfragen_Suche_ZeichnungsNr]![txtAnzahl_der_Länge_Von_Zg_2]) AND (([forms]![frmAnfragen_Suche_ZeichnungsNr].[txtAnzahl_der_Länge_Von_Zg_1]) Is Not Null))
ORDER BY Len([strgZgNr]);


Ich bin schon gespannt auf Deine Lösung.

Vielen Dank im voraus.


Gruss Scoopy Doo

Scoopy Doo
21.01.2003, 10:16
Hi Nouba,

schon´ne Lösungsmöglichkeit gefunden?

Gruss Scoopy Doo

Nouba
27.01.2003, 15:17
Hallo Scooby Doo,

stelle den Abfragetext in einer Prozedur zusammen und weise der RowSource der Listbox diese Abfrage zu.

<code>strSQL = "SELECT ... ORDER BY " & Sortierfeldname</code>

Scoopy Doo
27.01.2003, 15:31
Hi Nobua,

ich habe nun eine weitere Abfrage erstellt.

Nun sollte der SQL-String übersichtlicher sein.

Nach wie vor sind die Kriterien nun halt in den Unterabfragen integriert.

SELECT qry_frmAnfragen_Suche_ZeichnungsNr_pre.LaufendeNr,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.AnNr,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.Kunde,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.Produktgruppe,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.Bezeichnung,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.strLängeZg,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.strgZgNr,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.Stückzahl,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.Laufzeit,
qry_frmAnfragen_Suche_ZeichnungsNr_pre.EMJ
FROM qry_frmAnfragen_Suche_ZeichnungsNr_pre
ORDER BY qry_frmAnfragen_Suche_ZeichnungsNr_pre.Kunde; z.B.

Kann man die Abfrage nicht im Entwurfmodus öffnen und per VBA
die Suchfunktion setzen bzw. ändern?


Gruss Scoopy Doo

Scoopy Doo
27.01.2003, 15:39
Hi Nobua,

die Beiträge haben sich gerade überschnitten.


Me!lstSuchen.RowSource = "SELECT * from qry_frmAnfragen_Suche_ZeichnungsNr_pre.AnNr, qry_frmAnfragen_Suche_ZeichnungsNr_pre.Kunde, qry_frmAnfragen_Suche_ZeichnungsNr_pre.Kunde AS Sort_Kunde, qry_frmAnfragen_Suche_ZeichnungsNr_pre.Produktgruppe, qry_frmAnfragen_Suche_ZeichnungsNr_pre.Bezeichnung, qry_frmAnfragen_Suche_ZeichnungsNr_pre.strLängeZg, qry_frmAnfragen_Suche_ZeichnungsNr_pre.strgZgNr, qry_frmAnfragen_Suche_ZeichnungsNr_pre.Stückzahl, qry_frmAnfragen_Suche_ZeichnungsNr_pre.Laufzeit, qry_frmAnfragen_Suche_ZeichnungsNr_pre.EMJ, qry_frmAnfragen_Suche_ZeichnungsNr_pre & ' ORDER BY " & strgName & " "

Geht leider nicht, was ist hier falsch.

Vielen Dank im voraus.

Gruss Scoopy Doo

Nouba
27.01.2003, 16:55
Hallo Scoopy Doo,

<code>Me.lstSuchen.RowSource = "SELECT * FROM qry_frmAnfragen_Suche_ZeichnungsNr_pre ORDER BY " & strgName</code>
sollte funktionieren, wenn <i>strgName</i> den Feldnamen enthält, nach dem sortiert werden soll.

Scoopy Doo
28.01.2003, 07:48
Hi Nouba,

funzt.

Ich weiss nicht, warum ich bei der Select-Anweisung alle Felder mit
angegeben habe.

Vielen Dank

Gruss.