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:
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.