Avatar billede bruger_pil Nybegynder
29. juni 2006 - 12:03 Der er 18 kommentarer og
2 løsninger

Sortering = 1,2,3,4,0,0,0,0

Jeg vil gerne lave en sortering af mine poster ASC (stigende)
men jeg vil ikke have 0 eller "null" værdierne først, og de må ikke filtreres væk.

Jeg bruger følgende kode:
    Me.OrderBy = "FeltNR ASC"
    Me.OrderByOn = True

Dette giver som bekendt IKKE det ønskede resultat :-)

Kan dette lade sig gøre??
Avatar billede terry Ekspert
29. juni 2006 - 12:09 #1
Try using the iif() function in your query to convert Null to 0
Avatar billede terry Ekspert
29. juni 2006 - 12:13 #2
and if the field is a text field then convert using Cint()
Avatar billede terry Ekspert
29. juni 2006 - 12:13 #3
or clng() depending on the size of the numbers you can expect
Avatar billede terry Ekspert
29. juni 2006 - 12:13 #4
.
Avatar billede kjulius Novice
29. juni 2006 - 13:01 #5
Prøv med

Me.OrderBy = "IIf(FeltNR Is Null Or FeltNR = 0, 999999, FeltNR) ASC"

hvor de 999999 bør være det højeste tal felttypen tillader. Det burde betyde, at de altid blev sorteret ned til sidst.
Avatar billede bruger_pil Nybegynder
29. juni 2006 - 14:30 #6
kjulius: Hvis jeg ligger din kode får jeg en fejl der siger "indtast parameterværdi"
Avatar billede bruger_pil Nybegynder
29. juni 2006 - 14:31 #7
Terry: Skal lige undersøge hvordan dine funktioner virker
Avatar billede bruger_pil Nybegynder
29. juni 2006 - 15:28 #8
Jeg er bange for at det ikke kan lade sig gøre
Avatar billede kjulius Novice
29. juni 2006 - 17:56 #9
Prøv i den underliggende forespørgsel at tilføje et ekstra felt, som du så kan sortere på:

SELECT dinTabel.*, IIf(FeltNR Is Null Or FeltNR = 0, 999999, FeltNR) AS sortfelt
FROM dinTabel

Hvis du bruger det grafiske gitter i stedet for SQL visningen (bwadr...), så indsæt i en blank rude: sortfelt:IIf(FeltNR Is Null Or FeltNR = 0; 999999; FeltNR)

Du burde nu i din form kunne sige

me.OrderBy = "sortfelt ASC"
Avatar billede bruger_pil Nybegynder
30. juni 2006 - 12:29 #10
Kjulius: Jeg kæmper lige lidt med dit forslag, vender tilbage :-)
Avatar billede bruger_pil Nybegynder
10. juli 2006 - 11:21 #11
Jeg må desværre tilstå at jeg ikke kan få det til at virke. Jeg opgiver det :-(
Avatar billede bruger_pil Nybegynder
10. juli 2006 - 11:21 #12
.
Avatar billede terry Ekspert
10. juli 2006 - 11:49 #13
if you are still interested in gettingitto work then maybe I could look at your dB?
Avatar billede bruger_pil Nybegynder
10. juli 2006 - 13:00 #14
Det ville jo være fedt. Måske skulle jeg prøve en anden forklaring.
Posterne ser faktisk ud som følger:
1,2,3,4,0,-1,-10,-22
De er resultatet af en beregning på antal dage: (indtastet dato) - now
Det skal fungere som en huskeliste, hvor det vigtige er de deadlines der ligger lige for. De poster hvor datoen er overskredet (negativ) har ingen interesse og skal derfor sorteres til sidst.
Avatar billede terry Ekspert
10. juli 2006 - 15:43 #15
so the order you want to see is ?
0
1
2
3
4
-10
-22

eksperten@NOSPAMsanthell.dk

remove NOSPAM
Avatar billede bruger_pil Nybegynder
10. juli 2006 - 16:45 #16
Det er korrekt :-)
Avatar billede terry Ekspert
10. juli 2006 - 20:30 #17
SELECT TBL_PRÆKVALIFIKATION.*, TBL_PRÆKVALIFIKATION.[Prækvalifikations nummer], IIf(([Anmodningsfrist]-Date())<0,(([Anmodningsfrist]-Date())*-1)+9999,IIf(([Anmodningsfrist]-Date())>0,([Anmodningsfrist]-Date())+8999,0)) AS SortField
FROM TBL_PRÆKVALIFIKATION
ORDER BY IIf(([Anmodningsfrist]-Date())<0,(([Anmodningsfrist]-Date())*-1)+9999,IIf(([Anmodningsfrist]-Date())>0,([Anmodningsfrist]-Date())+8999,0));

If the date difference is positive then + 8999 (no need, could just sort on result). If date difference is negative then  * with -1 to make postive and then add 9999, otherwise large negativ evalues come first. Othewise 0
Avatar billede bruger_pil Nybegynder
11. juli 2006 - 10:28 #18
Det virker :-)
Jeg skal lige bruge lidt tid på at analysere hvordan.
Avatar billede bruger_pil Nybegynder
11. juli 2006 - 10:38 #19
Det er jo smukt, tusind tak. God sommer :-) Pildal
Avatar billede terry Ekspert
11. juli 2006 - 10:42 #20
The IIF does it all


IIf(([Anmodningsfrist]-Date())<0,(([Anmodningsfrist]-Date())*-1)+9999,IIf(([Anmodningsfrist]-Date())>0,([Anmodningsfrist]-Date())+8999,0));


IIF( True, then, else)

So

IF [Anmodningsfrist]-Date() < 0 then

    (([Anmodningsfrist]-Date()) * -1) + 9999

else

    IF [Anmodningsfrist]-Date() > 0
   
    ([Anmodningsfrist]-Date()) + 8999
    else
      0
    end if

end if


and thanks
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