Avatar billede avest Nybegynder
20. september 2002 - 08:50 Der er 7 kommentarer og
2 løsninger

Min af flere kolonner

Jeg har en kolonne på formen "Jens Bangs vej 35 4.tv" eller en lignende. Den vi jeg gerne have opdelt i to kolonner etagen undlades.
| vej | nr |

Jeg er temmelig ny til Access.

Jeg har tænkt mig frem til at jeg bliver nødt til at søge efter første plads hvor der optræder et tal (her 3) for at finde hvor der skal deles første gang. Anden gang skal der søges efter første mellemrum i det resterende.
For at finde første deling skal jeg så finde det mindste af i alt 10 søgninger på 0-9.

Jeg har lavet 10 kolonner med hver deres søgning, men nu ved jeg ikke hvordan jeg finder minimum.

Skulle der være en smartere måde er jeg da også interesseret.
Avatar billede lasse_buck Nybegynder
20. september 2002 - 12:42 #1
Denne type funktionalitet er nok nemmere at lave i et program i stedet for SQL.
Lav to funktioner i Visual Basic, som tager en streng og returnerer en streng. (en til vej og en til nr).

Jeg vil tro man kan bruge Visual Basic funktioner direkte i sine SQL-udtryk.
- Nogen der kan bekræfte det?
Avatar billede bispensgipsgebis Nybegynder
20. september 2002 - 17:03 #2
Lasse: Nej, det er ikke muligt at integrere visual basic funktioner i sine sql-statements. SQL statements bliver oversat af sql-fortolkeren i det ISAM eller DBMS du anvender, og disse har ikke kompilers til samtlige programmeringssprog indbygget.

avest: Jeg vil som lasse foreslår lave opslitningen i programmeringssprog (f.eks.) visual basic.

F.eks.

dim conn as New ADODB.Connection
dim rs as New ADODB.Recordset
dim rs1 as New ADODB.Recordset

conn.open("dsn, uid, password")
rs.open "SELECT * FROM adresser", conn

rs.Movefirst
do while not rs.eof
"Her laver du noget streng genkendelse"
"Her smider du strengene ind i to selvstændige tabeller.
Loop

Så skulle det være fikset. Du skal huske at lukke dine connections igen.

Dette kan naturligvis også kodes i andre sprog.

God fornøjelse
Rune
Avatar billede sjap Praktikant
20. september 2002 - 17:18 #3
Nedenstående funktion kan vist klare sagen med at finde vejnavnet. Du Kopierer blot nedenstående ind i et nyt modul, hvor efter du kan bruge funktionen i en forespøgsel til at oprette et nyt felt.

Function ExtractLeftOfNumber(SearchStr As String) As String
Dim NumberPos As Integer
Dim i As Integer
Dim SearchPos As Integer

SearchStr = "Jens Bangs vej 35 4.tv"
NumberPos = Len(SearchStr)
For i = 0 To 9
    SearchPos = InStr(SearchStr, i)
    If SearchPos > 0 And SearchPos < NumberPos Then
        NumberPos = SearchPos
    End If
Next i
ExtractLeftOfNumber = Left(SearchStr, NumberPos)
End Function
Avatar billede fynbohans Nybegynder
21. september 2002 - 22:33 #4
Starten af dit spørgsmål er lidt uklart.
Er problemet at du har en tabel med en adresse i et felt, som
du gerne vil have delt i de 3 felter: navn, nr og resten ?
Avatar billede avest Nybegynder
23. september 2002 - 08:11 #5
ja, det er rigtigt. Dog kan resten bare smides væk.
Avatar billede fynbohans Nybegynder
23. september 2002 - 14:16 #6
Opret en formular til opdateringen. Den skal indeholde felterne:

[ID]    Idnr som autonummerering.
[ADR] hele adressen.
[GADE].
[NR].

VedÅbning indsættes koden

Dim Tal As Variant
Dim a As Variant
Dim Start As Integer
Dim i As Integer
Dim SidsteNr As Long


Private Sub Form_Open(Cancel As Integer)
           
DoCmd.GoToRecord , , acLast
SidsteNr = [ID]

DoCmd.GoToRecord , , acFirst

Do
    Tal = Null
    Start = 0
   
    For i = 1 To Len([ADR])
        a = Mid$([ADR], i, 1)
        If IsNumeric(a) = True Then
          If IsNull(Tal) = True Then Start = i
          Tal = Tal & a
        Else
          If IsNull(Tal) = False Then Exit For
        End If
    Next i
   
    [NR] = Tal
    If Start > 1 Then [GADE] = Left$([ADR], Start - 1)

    If [ID] = SidsteNr Then Exit Do
    DoCmd.GoToRecord , , acNext
Loop

DoCmd.Close

End Sub

Formularen løberne alle posterne igennem og deler adressen i gade og nr og
lukker sig selv den den er færdig.
Avatar billede avest Nybegynder
23. september 2002 - 14:21 #7
Det blev kopieret til et regneark og lavet der. Det var vist lettere. Men tak for hjælpen.
Avatar billede fynbohans Nybegynder
23. september 2002 - 16:29 #8
Meget fornuftigt. Hvis det drejer sig om små datamængder eller en process der ikke
skal gentages igen og igen, er det ofte hurtigst at gøre det manuelt fremfor at
lave en kompliceret rutine, som gør det samme.
Du kunne også have også gjort det i direkte i Access-tabellen ved at flytte hele
indholdet til de de 2 nye felter med en opdateringsforespørgsel og bagefter
fjerne det overflødige manuelt.
Avatar billede avest Nybegynder
24. september 2002 - 08:13 #9
Det er noget som skal gøres én måske to gange om året, det drejer sig desværre om omkring 23.000 adresser men det var vist stadig hurtigst.
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