PDA

Vollständige Version anzeigen : Abfrage durch VBA verändern


IcmsJena
10.05.2004, 09:16
Wie kann man mit einem VBA Code die Sortierung einer Abfrage ändern?

Beispiel:
Es wird nach der ID sortiert, soll aber nach einer Auswahl (neues Formular) nach dem Hersteller sortiert werden.

J_Eilers
10.05.2004, 09:33
Hi,

mittels QueryDefs kannst du Abfragen zur Laufzeit verändern. Hier müsste man dann den OrderBy-Teil umschreiben. Oder du schaust dir mal die beiden Befehle in der Hilfe an:

Me.OrderBy
Me.OrderByOn

planula
10.05.2004, 09:38
setz doch mal deinen vba code rein dann seh ich mal was sich machen lässt

IcmsJena
10.05.2004, 09:49
Da ist ja das Problem. Ich hab noch keinen richtigen. Der hier isses auch nicht:

Private Sub btnSortieren_Click()
On Error GoTo Err_btnSortieren


Me!Artikel.OrderBy Bezeichnung

Ext_btnSortieren:
Exit Sub

Err_btnSortieren:
MsgBox Err.Description + " Fehlernummer: " & Err.Number
Resume Ext_btnSortieren

End Sub

(vereinfacht)

J_Eilers
10.05.2004, 09:59
Private Sub btnSortieren_Click()
On Error GoTo Err_btnSortieren


Me.OrderBy = "Artikel"
Me.OrderByOn = True

Ext_btnSortieren:
Exit Sub

Err_btnSortieren:
MsgBox Err.Description + " Fehlernummer: " & Err.Number
Resume Ext_btnSortieren

End Sub

IcmsJena
10.05.2004, 10:18
Das dürfte es fast gewesen sein.

Gibt da nur ein kleines Problem:
"Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden"

Nochmal zum Code:
[comArtikel].OrderBy = [tblArtikel].[Artikel]
[comArtikel].OrderByOn = True

Das ganze soll ja über einen Button geschehen. Deshalb hab ich o.g. Werte eingetragen. Ist der Übertrag vielleicht falsch?

J_Eilers
10.05.2004, 10:21
Kennst du die Taste F1 oder auch die Suche im Forum? Mit Me.OrderBy kannst du deine Daten im Formular sortieren. Das hat nichts mit der Abfrage zu tun, die man auch nicht verändern muss, wenn man es nur im Formular händeln will...

IcmsJena
10.05.2004, 10:29
Gerad ist es mir aufgefallen..

es geht nicht um das ganze Formular, sondern nur um eine Kombibox, die sortiert werden soll!

Scheint als wär ich heut etwas durch den Wind :p

Arne Dieckmann
10.05.2004, 10:34
Dann weise dem Kombinationsfeld je nach Bedarf eine andere Herkunft zu:

Me!KomboBox.RowSource="SELECT Spalte1, Spalte2 From Tabelle ORDER BY Id;"
oder

Me!KomboBox.RowSource="SELECT Spalte1, Spalte2 From Tabelle ORDER BY Hersteller;"

J_Eilers
10.05.2004, 10:35
Wenn es sich nur um das Kombifeld handelt, kannst du die Datenherkunft mit der RowSource übergeben. Handelt es sich um eine einmalige Angelegenheit?
Falls nein: Wie sieht die Datenherkunft aus und was soll wie geändert werden?

IcmsJena
10.05.2004, 10:42
Es soll nach ID, Hersteller und Artikel sortiert werden.

Datenherkunft:

SELECT Trim([tblArtikel].[Artikel] & " " & [Typ]) AS Bezeichnung, [qryArtikelFreiVerfügbar?].ID, [qryArtikelFreiVerfügbar?].Hersteller, [qryArtikelFreiVerfügbar?].tblArtikel.Artikel, [qryArtikelFreiVerfügbar?].Typ, [qryArtikelFreiVerfügbar?].Ausdr1 FROM [qryArtikelFreiVerfügbar?] WHERE ((([qryArtikelFreiVerfügbar?].Ausdr1)>0)) ORDER BY [qryArtikelFreiVerfügbar?].ID

J_Eilers
10.05.2004, 10:43
Und wie soll das Umschalten der Sortierung erfolgen?

IcmsJena
10.05.2004, 10:49
Es ist ein Button (btnSortieren) vorhanden. Mit dem Klick soll ein weiteres Formular geöffnet werden, welches die anderen Sortiermöglichkeiten anbietet. Nach dem Klick soll das ganze sortiert werden.

Wenn die Möglichkeit nicht so gut ist, kann es auch anders eingearbeitet werden.

J_Eilers
10.05.2004, 11:05
So könnte man es auch in einem Formular machen.

Dim strSQL As String
Dim i As Integer

strSQL = "SELECT Trim([tblArtikel].[Artikel]" & Chr(38) & Chr(34) & " " & Chr(34) & Chr(38) & "[Typ]) AS Bezeichnung, " & _
"[qryArtikelFreiVerfügbar?].ID, [qryArtikelFreiVerfügbar?].Hersteller, " & _
"[qryArtikelFreiVerfügbar?].tblArtikel.Artikel, " & _
"[qryArtikelFreiVerfügbar?].Typ, [qryArtikelFreiVerfügbar?].Ausdr1 " & _
"FROM [qryArtikelFreiVerfügbar?] " & _
"WHERE [qryArtikelFreiVerfügbar?].Ausdr1 >0 "

If i = 0 Then
strSQL = strSQL & " ORDER BY [qryArtikelFreiVerfügbar?].ID"
i = 1
Else
strSQL = strSQL & " ORDER BY [qryArtikelFreiVerfügbar?].Hersteller"
i = 0
End If

Me!DeinKombi.RowSource = strSQL

Arne Dieckmann
10.05.2004, 11:07
Dabei bleibt es aber immer bei der 1. Sortierung, oder? "i" sollte besser als Static deklariert werden.

J_Eilers
10.05.2004, 11:11
@Arne kA. Sollte nur beispielhaft aufzeigen wie es geht. Leider weiß ich immer noch nicht, wodurch die 3 unterschiedlichen Sortierungen bedingt seien sollen und ich frage mich, was das hier sein soll

[qryArtikelFreiVerfügbar?].tblArtikel.Artikel

IcmsJena
10.05.2004, 11:11
Funktioniert Perfekt! Hab die Beispiele etwas abgewandelt.

Besten Dank an euch beide!!!! :) :) :)

Arne Dieckmann
10.05.2004, 11:17
@Jan: Naja, es klappt jetzt ja. Aber um es mal zu testen versuche einmal bei einem Button:

Dim i As Integer

MsgBox i

If i = 0 Then
i = 1
Else
i = 0
End If

Somit erhält man immer "0".


Wenn "Dim" durch "Static" ersetzt wird, behält i auch den zuletzt eingestellten Wert.

J_Eilers
10.05.2004, 11:23
@Arne Stimmt. Dann entweder als Static oder im Klassenmodul deklarieren.
Allerdings hatte mein i immer 1, weil die MsgBox am Ende stand ;) Was aber nicht klärt, ob einfach fortlaufend sortiert werden soll oder nicht.