Avatar billede hjbe Nybegynder
18. september 2003 - 12:18 Der er 17 kommentarer og
2 løsninger

Sortering af Combo Box

Kan man styre sorteringen i en combobox ved hjælp af en anden combox der indholder feltnavnene fra den første combobox.
Eks: Combo1 indeholder 5 feltnavne 2 gange. 5 med asc. og 5 med desc.

Prod-Asc
Prod-Desc
Omsætn-Asc
Omsætn-Desc
etc....

Kan man få den til at styre hvordan Combo2 præsenterer poster fra den samme tabel, så den viser Ordrenr, men sorteret efter de kriterier der er givet i Combo1
18. september 2003 - 12:21 #1
Jeg forstår ikke helt din beskrivelse, men du kan jo altid styre sorteringen ved at lade din rækkekilde være en forespørgsel og derved soretere denne, som du ønsker!
Avatar billede terry Ekspert
18. september 2003 - 12:24 #2
Take a look at this it may give you some ideas

http://www.mvps.org/access/forms/frm0028.htm
Avatar billede hjbe Nybegynder
18. september 2003 - 12:26 #3
ja det er godt nok, men brugerne skal selv kunne vælge hvordan posterne i Combo2 skal soreteres. Den bruges til at filtere ca 22000 rækker af økonomiske data, omsætn, likviditet etc.
Nogen gange vil de gerne ha det ordre no. med størst omsætn. øverst i Combo2 andre gange det ordreno med størst likviditet etc.
Avatar billede terry Ekspert
18. september 2003 - 12:26 #4
As you can see in th example it uses the contents of one combo to set the contents of another and at the same time you could alter the sort order by including this in the SQL.
18. september 2003 - 12:26 #5
Du kan således, vha VBA, ændre SQL-sætningen i rækkekilden afhængig af andre valg, som brugeren har foretaget.

på EfterOpdatering på Combo1 kan lægge noget kode á la dette:

Private Sub Combo1_AfterUpdate()
  Select case Me!Combo1
    case "Prod-Asc"
      Me!Combo2.Rowsource = "Select * From Tabel Order By Prod"
    case "Prod_Desc"
      Me!Combo2.Rowsource = "Select * From Tabel Order By Prod Desc"
    ...
    ...
  end select
end sub

Dette er den simple (og ikke så smarte metode). Det kan formentlig gøres smartere, men så skal jeg 'se' databasen eller have flere oplysninger
Avatar billede hjbe Nybegynder
18. september 2003 - 12:27 #6
Yes Terry, men det lader ikke brugerne ændre på sorteringen af Combo2
Avatar billede terry Ekspert
18. september 2003 - 12:30 #7
OK! The you have a combo containing ALL sort orders

For example
ORDER BY fld1 ASC
ORDER BY fld1 DESC
ORDER BY fld2 ASC

...

Then when the user selects a value from this combo they re-build the Rowsource of the other combo

...RowSource = "SELECT YourFields FROM YourTable WHERE whatever " &  & Me!cbxCombo1

where  & Me!cbxCombo1 contains for example "ORDER BY fld1 ASC"
Avatar billede terry Ekspert
18. september 2003 - 12:31 #8
ORDER BY fld1 ASC
ORDER BY fld1 DESC
ORDER BY fld2 ASC

You could also have a radio button Group and depend on what the user selects re-sorts the list. You can use a SELECT CASE for this as Thomas shows!
Avatar billede terry Ekspert
18. september 2003 - 12:34 #9
forgot to say
ORDER BY fld1 ASC
ORDER BY fld1 DESC
ORDER BY fld2 ASC
These values can be either from a table or from a value list.
18. september 2003 - 12:37 #10
Jeg vil umiddelbart også foreslå at lave 2 kontrolobjekter (kombobokse eller optionbuttons) således at brugeren først vælger Produkt, omsætning m.m. og derefter vælger om den skal sortere stigende eller faldende.

Dette kunne gøres simpelt ved at lave 2 kombobokse.

Derefter ser koden således ud:
Me!Combo2.Rowsource = "Select DitFelt From Tabel Order By [" & Me!combo1 & "] " & Me!cboSortering


cboSortering er den comboboks som indeholder Asc eller Desc
18. september 2003 - 12:39 #11
Koden placeres BÅDE på cboSortering_Afterupdate og combo1_AfterUpdate, således at det sker uanset hvilken af de 2, man vælger først
Avatar billede hjbe Nybegynder
18. september 2003 - 12:40 #12
Hvordan ville koden se ud hvis man havde:

Tablenavn: Ordrer

Combo1:
Omsætn
Likviditet
Igv-Arbejde
OrdreIndgang
Udbud

Og man så havde en radio-button til Asc / Desc

Og i Combo2 brugte samme tabel med Ordrenr som Kontrolfelt.
18. september 2003 - 12:43 #13
Den kunne se således ud:
If Me!Radiobutton = 1 then
  Me!Combo2.Rowsource = "Select DitFelt From Ordrer Order By [" & Me!combo1 & "]"
else
  Me!Combo2.Rowsource = "Select DitFelt From Ordrer Order By [" & Me!combo1 & "] Desc"
endif
18. september 2003 - 12:44 #14
Man kunne godt gøre den lidt kortere ved at bruge IIF i slutningen af sætningen. Derved havde man kun én linie, men denne metode er 'kønnere', da IIF lidt er en FY-kommando
18. september 2003 - 12:50 #15
er lige smuttet 20 min, men vender tilbage...
Avatar billede terry Ekspert
18. september 2003 - 13:33 #16
Basically what this problem boils down to is having one or more controls (combo's, radio buttons) which are used to build the SQL for the combo's Rowsource. This is just a plain old SQL statment which has to be built in VBA code usingthe values chosen form your controls.

I would suggest ONE function to do this

Function ChangeRowSource()



'This is where your cod egoes to build the SQL fro the rowsource.

End Function

Then in each control (which you are using to build the Rowsource) AFTER UPDATE event property you write

=ChangeRowSource()

This will call the function every time you change one of the values of one of the controls.
Avatar billede hjbe Nybegynder
18. september 2003 - 13:37 #17
Jeg har fået det til at virke, med "bits and pieces" fra hver af jer, og jeg takker.
Håber I er tilfreds med point fordelingen.

Hans
18. september 2003 - 13:39 #18
thnx :o)
Avatar billede terry Ekspert
18. september 2003 - 14:17 #19
Great, og tak :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester