30. august 2008 - 08:21Der er
9 kommentarer og 1 løsning
Sortere string felt fra Access db (husnr.e)
Hej
Jeg håber en kan hjælpe med følgende sorteringsproblem. Jeg har en adresse-database med vejnavne og husnumre for hele Danmark. Husnr.e er af datatypen ”string” da der kan forekomme bogstaver i denne (f.eks. nr. 22A). I en dropdown-boks skal jeg udvælge husnr. på en given vej. Når jeg sorterer efter husnr. får jeg f.eks. følgende sorterede liste:
Du skal have fat i en funktion, som sortere efter det man kalder: natural sort. Da 2 jo netop skal komme før 11. Standard sort kigger på 2 er efter 1 og derfor ender det med "fejl".
Public Function Husnr_Sortering(Nr As String, plads_0_1 As Byte) As Variant Dim I As Integer, UD(1) As Variant For I = 1 To Len(Nr) If IsNumeric(Mid(Nr, I, 1)) Then UD(0) = UD(0) & Mid(Nr, I, 1) Else UD(1) = UD(1) & Mid(Nr, I, 1) End If Next If plads_0_1 = 0 Then Husnr_Sortering = UD(0) If plads_0_1 = 1 Then Husnr_Sortering = UD(1) End Function
Så laver du en forespørgsel som denne
SELECT Adresser.NR, Husnr_Sortering([NR],0) AS NR_Sorteret, Husnr_Sortering([NR],1) AS Bogstav_Sorteret FROM Adresser ORDER BY Husnr_Sortering([NR],0), Husnr_Sortering([NR],1);
Måske en lille ændring, der kan jo være etage på, eks. 22b 3th
Public Function Husnr_Sortering(Nr As String, plads_0_1 As Byte) As Variant Dim I As Integer, UD(1) As Variant For I = 1 To Len(Nr) If IsNumeric(Mid(Nr, I, 1)) Then UD(0) = UD(0) & Mid(Nr, I, 1) Else UD(1) = UD(1) & Right(Nr, Len([Nr]) - (I - 1)) Exit For End If Next If plads_0_1 = 0 Then Husnr_Sortering = UD(0) If plads_0_1 = 1 Then Husnr_Sortering = UD(1) End Function
Der er ikke etager på... så jeg holder mig til første udgave.
Jeg har indsat følgende:
Dim Conn As New Connection Stinavn = App.Path & "\Adresse.mdb" Conn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Stinavn & ";" strSQL = "SELECT HUSNR, Husnr_Sortering([NR],0) AS NR_Sorteret, Husnr_Sortering([NR],1) AS Bogstav_Sorteret FROM Adresse WHERE KOMNR = " & KOMM_NR & " and VEJKODE = " & VEJ_KODE & " ORDER BY Husnr_Sortering([NR],0), Husnr_Sortering([NR],1)" Set rs = Conn.Execute(strSQL)
Og oprettet en ny "modul": Module1(Module1) og kopiere følgende kode ind:
Public Function Husnr_Sortering(Nr As String, plads_0_1 As Byte) As Variant Dim I As Integer, UD(1) As Variant For I = 1 To Len(Nr) If IsNumeric(Mid(Nr, I, 1)) Then UD(0) = UD(0) & Mid(Nr, I, 1) Else UD(1) = UD(1) & Mid(Nr, I, 1) End If Next If plads_0_1 = 0 Then Husnr_Sortering = UD(0) If plads_0_1 = 1 Then Husnr_Sortering = UD(1) End Function
Når jeg afvikler får jeg "der er en ikke defineret funktion "Husnr_Sortering" i udtrykket..." Hvad har jeg glemt?
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.