20. september 2002 - 08:50Der 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.
AI bliver først for alvor en del af arbejdet, når teknologien integreres i den måde, vi arbejder på. At have adgang til AI betyder ikke nødvendigvis, at medarbejderne er klar til at bruge den.
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?
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.
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
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 ?
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.
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.
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.
Synes godt om
Ny brugerNybegynder
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.