data uit groot tekstveld halen

Status
Niet open voor verdere reacties.

RickS82

Gebruiker
Lid geworden
15 aug 2016
Berichten
11
Beste Forumlezers,

voor op het werk ben ik opzoek naar het volgende:

Wij krijgen data aangeleverd in een groot tekstveld. Hier staat veel infomatie in inclusief uitslagen van verschillende onderzoeken. Ik wil graag dat access het tekstveld leest en de informatie dat achter Onderzoek 1: en Onderzoek 2: in een aparte kolom zet. Is dit mogelijk en hoe werkt dit?

Voorbeeld van het aangeleverde tekstveld:

Er is onderzoek gedaan voor aanvrager X
datum: 15-08-2016
Onderzoeker: medewerker 1

Onderzoek 1: er is niks gevonden

Onderzoek 2: er is wel wat gevonden

De rekening is gestuurd naar betaler 1
 
Allereerst welkom bij HelpMij! Met 'tekstveld' bedoel je waarschijnlijk een memoveld? Of heb je het over een tekstbestand/Excel bestand o.i.d. dat je inleest? En is het dan de bedoeling dat Access bij het importeren van het gegevensbestand al de splitsing maakt, of lees je het bestand eerst in en wil je later de teksten uit dat memoveld halen?
 
Dank

het is idd een excel bestand. Bij het importeren ervan dient de splitsing gemaakt te worden.

Kan dat?
 
Dat kan wel, maar hangt wel af van wat je nu gebruikt om het Excel bestand te importeren. Als je al importeert natuurlijk; als het om een bestand met een vaste naam gaat, kun je ook kiezen voor een koppeling. Dat zou e.e.a. weer wat vereenvoudigen. Hoe dan ook zul je het proces moeten automatiseren met VBA.
 
momenteel gebeurd er nog niks, het moet nog opgezet worden.

Het bestand een vaste naam geven is geen probleem, kun je aangeven hoe ik zo'n koppeling opzet?
Als ik ergens een voorbeeld bestand kan vinden is het ook goed, meestal red ik mij daar wel mee.

Groeten

Rick
 
Voorbeeldbestanden heb je (nog) niet zoveel aan, denk ik. Je kunt vanuit het tabblad <Externe gegevens> via de knop <Excel> in de groep <Importeren en koppelen> een koppeling maken (onderste optie) met je Excel bestand. Dat werkt prima als het bestand a) altijd dezelfde naam en b) altijd dezelfde indeling met dezelfde kolomnamen heeft. Zo'n koppeling kun je dan gebruiken om via een toevoegquery de records aan je eigen tabellen toe te voegen. In de praktijk kun je dan het bron (Excel) bestand steeds overschrijven met nieuwe gegevens, en die dan steeds opnieuw importeren. Ik doe dat dan wel eens in meerdere slagen als dat nodig is, bijvoorbeeld om 3 velden samen te voegen in één veld. Dan voeg je eerst de basisgegevens toe met een toevoegquery en werk je het memoveld bij met een bijwerkquery.
De hele serie queries die je dan nodig hebt zet je in een procedure die je dan één keer start. Dat laatste hoeft uiteraard niet, je kunt de queries ook handmatig starten. Dan heb je ook wat meer controle.
 
ik snap nu (na wat google werk) hoe je een toevoegquery kunt maken. Alleen snap ik niet hoe ik een stukje tekst kan selecteren (om toe te voegen) uit 1 veld. Als de onderstaande tekst allemaal in een veld staat hoe kan ik dan alleen Onderzoek 1: er is niks gevonden laten plaatsen in een nieuwe tabel?

Er is onderzoek gedaan voor aanvrager X
datum: 15-08-2016
Onderzoeker: medewerker 1

Onderzoek 1: er is niks gevonden

Onderzoek 2: er is wel wat gevonden

De rekening is gestuurd naar betaler 1
 
Daar heb je dus een VBA functie voor nodig, dan kan niet met query functies.
 
Ja, hier :).

Code:
Function TekstUitMemo1(veld As String) As String
Dim arr As Variant
    arr = Split(veld, vbLf)
    TekstUitMemo1 = arr(4)
End Function

Code:
Function TekstUitMemo2(veld As String) As String
Dim arr As Variant
    arr = Split(veld, vbLf)
    TekstUitMemo2 = arr(6)
End Function

En in een query gebruik je de functies dan zo:
Code:
UPDATE Tasks SET [Onderzoek 1] = TekstUitMemo1([Omschrijving]), [Onderzoek 2] = TekstUitMemo2([Omschrijving]);
 
Nog een kleine aanvulling op de functies: zet er een Trim omheen zodat je overtollige spaties kwijt bent.

Code:
Function TekstUitMemo1(veld As String) As String
Dim arr As Variant
    arr = Split(veld, vbLf)
    TekstUitMemo1 = Trim(Mid(arr(4), 13, Len(arr(4)) - 13))
End Function
 
Laatst bewerkt:
de VBA code leek makkelijker dan dat die is. Kun je misschien aangeven wat de afzondelijke gedeelte van de VBA code betekenen. Misschien snap ik het dan wat beter.
 
Ik zag dat ik een verkeerde functie er bij had gezet, dus die heb ik weggehaald. Want daar heb je niks aan. De 2 functies uit bericht #10 zijn dus juist, met een aangepaste functie in bericht #12. De betekenis daarvan iets anders uitgelegd, nu a.d.h. van een knop op een formulier. Dat formulier bevat dan alle velden.

Code:
Private Sub Knop26_Click()
    Me.Onderzoek_1 = TekstUitMemo(Me.Omschrijving, 4)
    Me.Onderzoek_2 = TekstUitMemo(Me.Omschrijving, 6)
End Sub

De knop (naam is willekeurig) voert 2 functies uit en zet de uitkomst dus in 2 verschillende tekstvakken. Beide functies gebruiken hetzelfde tekstvak, maar verschillende regels uit het tekstvak. Zowel tekstvak(naam) als regel(nummer) worden meegegeven bij het aanroepen van de functie.

Code:
Function TekstUitMemo(veld As String, regel As Integer) As String
Dim arr As Variant
    arr = Split(veld, vbLf)
    TekstUitMemo = Trim(Mid(arr(regel), 13, Len(arr(regel)) - 13))
End Function

De functie heeft dus de naam van het tekstveld en weet naar welke regel hij moet kijken. In de functie wordt de tekst gesplitst op basis van regeleindes. Dat doet de functie SPLIT. De losse regels worden in een matrix variabele gezet, arr. Dus een tekst met 12 regels levert een matrix met 12 regels op, 9 regels tekst levert een matrix op met een bereik van 9 rijen.
Omdat je niet de hele wilt, moet je met MID werken. De tekst die je wilt zien is vast; je kunt dus op basis van de lengte van "Onderzoek 1:" bepalen waar je wilt beginnen met de tekst. En dan weet je ook de lengte die je nodig hebt.
Samenvattend: Met MID haal je uit de gewenste regel (variabele regel) de juiste tekst. Die wordt in de functie aan de functie toegewezen, en in het tekstvak gezet. Als je de Stapmodus gebruikt, kun je de inhoud van de verschillende stappen en variabelen simpel bekijken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan