Cel/kolom variabel splitsen in Access

Status
Niet open voor verdere reacties.

Aris1969

Gebruiker
Lid geworden
3 apr 2004
Berichten
55
Ik wil in Access cellen van één kolom verdelen over meerdere records (in andere tabel) en daarbij de inhoud van die cellen splitsen op basis van de tekens '=' en '&'.

De inhoud van de cellen in de kolom bestaat namelijk uit een string van verschillende data telkens gescheiden door een '&' en '='. De & scheidt 2 velden die een nieuwe record zouden moeten vormen en de = staat tussen de ID en waarde van een veld die beide in een aparte kolom zouden moeten komen op basis van het sleutelveld van de bron.

De inhoud van de strings is steeds verschillend en verschillend van lengte.

Zie bijgaand voorbeeld met daarin twee tabellen:
Bron => Uitgangsituatie
Gewenst resultaat => Wat het moet worden

Hoe krijg ik het voor elkaar dat met één druk op de knop vanuit 'Bron' de tabel 'Gewenst resultaat' ontstaat?

Wellicht moet dat met VBA o.i.d., maar ik zou niet weten hoe/ben ook geen expert daarin. Ik kan wel kleine dingen aanpassen in VBA codes, maar een blanco start maken lukt me niet. Of kan het eenvoudiger?
 

Bijlagen

Een mogelijkheid:
Maak een formulier (niet gebonden) zet daarop een knop (naam b.v. cmdSplitsen)
Zet bij de 'onclick' gebeurtenis van de knop
Code:
Private Sub cmdSplitsen_Click()
    Dim a()                      As String
    Dim i                        As Integer
    Dim iPos                     As Integer
    Dim lngT                     As Long

    With CurrentDb.OpenRecordset("bron")
        While Not .EOF
            lngT = !id
            a = Split(!String, "&")
            For i = 0 To UBound(a())
                If Len(a(i)) > 0 Then
                    iPos = InStr(a(i), "=")
                    With CurrentDb.OpenRecordset("tblResultaat")
                        .AddNew
                        !id = lngT
                        ![Voor = teken] = Left$(a(i), iPos - 1)
                        ![Na = teken] = Mid$(a(i), iPos + 1)
                        .Update
                    End With
                End If
            Next i
            .MoveNext
        Wend
    End With
End Sub
 
Perfect! Het werkt!!! Omdat ik eigenlijk niet (extra) op een knop wil drukken na het formulier geopend te hebben, heb ik de 'gebeurtenis' direct in het formulier zelf gezet en dus niet achter een knop. Ook sluit de pop-up van het formulier (Splitsen) vanzelf weer.

Resultaat: Ik hoef het formulier slechts aan te klikken, en de tabel (Resultaat) wordt naar wens gevuld. Uiteindelijk kan ik dat dan in/met een macro doen.

Gebruikte code direct in het formulier:


Code:
Private Sub Form_Current()
    Dim a()                      As String
    Dim i                        As Integer
    Dim iPos                     As Integer
    Dim lngT                     As Long

    With CurrentDb.OpenRecordset("bron")
        While Not .EOF
            lngT = !id
            a = Split(!String, "&")
            For i = 0 To UBound(a())
                If Len(a(i)) > 0 Then
                    iPos = InStr(a(i), "=")
                    With CurrentDb.OpenRecordset("Resultaat")
                        .AddNew
                        !id = lngT
                        ![Voor = teken] = Left$(a(i), iPos - 1)
                        ![Na = teken] = Mid$(a(i), iPos + 1)
                        .Update
                    End With
                End If
            Next i
            .MoveNext
        Wend
    End With
End Sub

Private Sub Form_Load()
DoCmd.Close acForm, "Splitsen", acSaveNo
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan