Avatar billede Slettet bruger
01. april 2009 - 08:31 Der er 4 kommentarer og
1 løsning

Opdeling af adresse

Hej
Jeg har en tabel med et adresse-felt. Kan det lade sig gøre i en forespørgsel at opdele indholdet i adresse-feltet, så det bliver til følgende felter:

Gadenavn
Husnr
Etage (hvis aktuelt)
Side-dør (hvis aktuelt)
Avatar billede fdata Forsker
02. april 2009 - 22:03 #1
Du kan måske klare dig med en quick-and-dirty i stil med nedenstående.
Her har du en række funktioner, der returnerer de enkelte komponenter.
BEMÆRK: Den er nok ikke 112% skudsikker; men den er tæt på ;o)

I din forespørgsel lægger du en række felter med indholdet:
  Gadenavn: Find_Gadenavn(Adr)
  Husnr: Find_Husnr(Adr)
osv

Koden (incl. lidt test) er:

Option Compare Database
Option Explicit

Sub Test_OpdelAdresse()
  Dim Adr As String
 
  Debug.Print "--------------------------------"
 
  Adr = "Hovedgaden 42, 3. th"
  Debug.Print Find_Gadenavn(Adr); "*"; Find_Husnr(Adr); "*"; Find_Etage(Adr); "*"; Find_Dør(Adr); "*"
  Debug.Print
 
  Adr = "Lille Kongensgade 42, 3. th"
  Debug.Print Find_Gadenavn(Adr); "*"; Find_Husnr(Adr); "*"; Find_Etage(Adr); "*"; Find_Dør(Adr); "*"
  Debug.Print
 
  Adr = "Hovedgaden 42, 3."
  Debug.Print Find_Gadenavn(Adr); "*"; Find_Husnr(Adr); "*"; Find_Etage(Adr); "*"; Find_Dør(Adr); "*"
  Debug.Print
 
  Adr = "Hovedgaden 42"
  Debug.Print Find_Gadenavn(Adr); "*"; Find_Husnr(Adr); "*"; Find_Etage(Adr); "*"; Find_Dør(Adr); "*"
  Debug.Print
End Sub

Function Find_Gadenavn(Adr As String) As String
  Dim Gadenavn As String
  Dim Husnr As String
  Dim Etage As String
  Dim Dør As String
 
  Call OpdelAdresse(Adr, Gadenavn, Husnr, Etage, Dør)
  Find_Gadenavn = Gadenavn
End Function

Function Find_Husnr(Adr As String) As String
  Dim Gadenavn As String
  Dim Husnr As String
  Dim Etage As String
  Dim Dør As String
 
  Call OpdelAdresse(Adr, Gadenavn, Husnr, Etage, Dør)
  Find_Husnr = Husnr
End Function

Function Find_Etage(Adr As String) As String
  Dim Gadenavn As String
  Dim Husnr As String
  Dim Etage As String
  Dim Dør As String
 
  Call OpdelAdresse(Adr, Gadenavn, Husnr, Etage, Dør)
  Find_Etage = Etage
End Function

Function Find_Dør(Adr As String) As String
  Dim Gadenavn As String
  Dim Husnr As String
  Dim Etage As String
  Dim Dør As String
 
  Call OpdelAdresse(Adr, Gadenavn, Husnr, Etage, Dør)
  Find_Dør = Dør
End Function

Sub OpdelAdresse(Adresse As String, Gadenavn As String, Husnr As String, Etage As String, Dør As String)
  Dim a() As String
  Dim i As Integer
  Dim n As Integer
 
  Gadenavn = ""
  Husnr = ""
  Etage = ""
  Dør = ""
 
  a = Split(Adresse, " ")
  n = UBound(a)
 
  i = 0
  Gadenavn = ""
  Do Until IsNumeric(Left(a(i), 1))
    Gadenavn = Gadenavn & a(i) & " "
    i = i + 1
  Loop
  Gadenavn = Left(Gadenavn, Len(Gadenavn) - 1)
  If i <= n Then
    Husnr = a(i)
    i = i + 1
  End If
  Husnr = Replace(Husnr, ",", "")
  Husnr = Replace(Husnr, ".", "")
  If i <= n Then
    Etage = a(i)
    i = i + 1
  End If
  If i <= n Then
    Dør = a(i)
  End If
End Sub
Avatar billede fdata Forsker
02. april 2009 - 22:03 #2
...  og koden placerer du bare i et helt vilkårligt modul.
Avatar billede Slettet bruger
03. april 2009 - 08:18 #3
Det virker!
Så langt var jeg aldrig selv nået - er ikke så skrap til at skrive kode.

Tusind tak for hjælpen!
Avatar billede fdata Forsker
13. april 2009 - 21:29 #4
Velbekomme - og tak for point ;o)
Avatar billede rasmus1234 Nybegynder
22. september 2009 - 09:36 #5
Meget interessant...jeg har et lignende problem, som jeg har stillet i spørgsmål: http://www.eksperten.dk/spm/886666

Opdeling af et adressefelt til mere end 2 felter (dvs. at man ikke kan bruge left og len...ovenstående kode tror jeg kan anvendes. Fdata, vil du give et bud?
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