verschillende kentekens uit tabel halen.

Status
Niet open voor verdere reacties.

sjoemie1985

Gebruiker
Lid geworden
18 dec 2008
Berichten
302
goede morgen,

ik heb de volgende expressie in een query:
kenteken: Left$([Kfz-Kennz];2) & "-" & Mid$([Kfz-Kennz];4;2) & "-" & Mid$([Kfz-Kennz];7;3)

deze haalt uit een externe bron(.CSV bestand) de kentekens van vrachtwagens gegevens.
maar nu is het zo dat in dat bestand verschillende soorten kentekens.

2Letters-3Cijfers-2Letters : voorbeeld AA-123-BB
2Letters-2Letters-2Cijfers : voorbeeld AA-BB-12
2Letters-2Cijfers-3Letters : voorbeeld AA-12-ABC

hoe kan ik er voor zorgen dat hij de kentekens goed in een tabel zet?
dus dit stuk([Kfz-Kennz];4;2) zou 2 of 3 tekens moeten zijn en dat zelfde moet dus ook gelden voor Mid$([Kfz-Kennz];7;3)

weet iemand hier een oplossing voor?
 
Gebruik een Instr functie en InstrRev functie om de koppeltekens op te zoeken. Met deze functies vind je de positie van een teken in een tekstreeks. In het voorbeeld AA-123-BB vind je dus de posities 3 en 7. Daarmee bepaal je met de Mid functie dus welk stuk tekst je nodig hebt.

Je krijgt wel een ingewikkelde formule, omdat je voor het linkerdeel een Instr nodig hebt, en voor het rechterdeel een InstrRev. En ze hebben allebei net een iets andere syntax... Als je er niet uit komt, maak ik 'm wel voor je. Maar het is een leuke uitdaging om het eerst zelf te doen ;)
 
Een andere weg is om het csv bestand te importeren in ACCESS. Dan heb je direct een makkelijk bruikbare tabel. Ik neem althans aan dat in het CSV bestand de velden (dus ook het kenteken) eenduidig zijn gescheiden.
 
@Dick: hoe zie je dat voor je? Het csv-bestand is al geïmporteerd, dus TS heeft al een veldscheiding gebruikt om zijn gegevens om te zetten naar de velden. En volgens mij kun je maar één veldscheidingsteken gebruiken bij import...
 
@Michel, als het csv bestand de velden heeft gescheiden dmv een komma (zoals gebruikelijk) èn het veld kenteken is goed gescheiden èn TS heeft het bestand al geimporteerd in access, dan heeft hij al een tabel, waarin het veld kenteken correct is opgenomen.
 
dat is het hem juist in het csv bestand staan de kentekens als AA BB 12
dus zonder een - er tussen.
en die expressie zorgt er dus voor dat die - er tussen gezet word.
 
Kloppen de volgende feiten?

- je hebt het csv bestand geimporteerd
- in de tabel komt een veld voor (kenteken) bestaande uit 8 posities
- in dit veld komt het - teken niet voor, in plaats daarvan staat een spatie

Als dit klopt, dan zou ik via zoek en vervang de spatie vervangen door een -

Als de spatie niet voorkomt in het veld, heb je dus een veld van 6 posities. Het scheidingsteken wordt 2 x geplaatst, om de cijfers van de letters te scheiden en om een groep van cijfers of letters in tweeen te verdelen. Als je dan het scheidingsteken op de juiste plaats wilt krijgen wordt het op het eerste gezicht een ingewikkeld verhaal. Ik wacht eerst even je antwoord af.
 
Laatst bewerkt:
Voordat jullie doordraven: een kenteken is in een tabel één gegeven. Hoe je het opslaat/weergeeft boeit in wezen niet, het is en blijft één veld. Je moet dat dus niet opsplitsen in meerdere velden, dat is databasetechnisch gezien absolute flauwekul.
Even terug naar de oorspronkelijke vraag, want die raken we een beetje kwijt: wat heb je in je importtabel dus staan, en wat wil je er mee? Als je, zoals ik nu begrijp, de gegevens importeert als: [AA BB 12], en je wilt de spaties vervangen door een koppelteken, dan kun je dat ook heel simpel doen met een Replace commando: Replace([veldnaam];" ";"-")
 
Niet echt; je stelde Zoeken en vervangen voor, en dat is een handmatige actie, geen queryoplossing.
 
@Michel, Je hebt gelijk, het zijn verschillende oplosingen. Wel is de gedachte erachter dezelfde. Overigens is het ontwerpen van een query ook een handmatige bezigheid.
 
@Dick34: Die laatste opmerking is hopelijk als open deur bedoeld.... Er zit nogal verschil in het werk of je een query maakt waarbij je één keer een functie maakt om een taak uit te voeren en daarna de query opnieuw (al dan niet automatisch) kunt gebruiken, of dat je elke keer een import moet doen, en dan steeds de tabel moet openen om handmatig zoeken en vervangen uit te voeren op een kolom. Het eerste (query) noem ik uiteraard geautomatiseerd werken, en het tweede (zoeken en vervangen) noem ik handwerk. Of vind jij het openen van de database ook bij het handwerk horen?
 
@Octafish, uiteraard heb je gelijk als het de bedoeling is om de query meerdere keren te gebruiken. Dat noem ik met jou geautomatiseerd en efficiënt bezig zijn.
Maar wat doe je als het een eenmalige actie is èn bovendien de query vrij ingewikkeld is?
Ik ben trouwens hoe dan ook benieuwd hoe de ingewikkelde query er uit zou zien.
 
Zoals ik al in de loop van de draad aangaf: met een simpele formule heb je het snel opgelost. Die simpele oplossing is:

Code:
Expr1: Replace([Kenteken];" ";"-")

Wil je de verschillende tekstdelen uit elkaar trekken om ze apart te kunnen verwerken, dan heb je meer trucjes nodig. Dan ziet de query er zo uit:

Code:
Expr2: 
     Left([Kenteken];InStr(1;[Kenteken];" ")-1)
     & "-"
     & Mid([Kenteken];InStr(1;[Kenteken];" ")+1;InStrRev([Kenteken];" ")-(InStr(1;[Kenteken];" ")+1))
     & "-" 
     & Right$([Kenteken];Len([Kenteken])-InStrRev([Kenteken];" "))

Je hebt dus drie tekstblokken: linkerdeel, middendeel en rechterdeel.
 
Voordat jullie doordraven: een kenteken is in een tabel één gegeven. Hoe je het opslaat/weergeeft boeit in wezen niet, het is en blijft één veld. Je moet dat dus niet opsplitsen in meerdere velden, dat is databasetechnisch gezien absolute flauwekul.
Even terug naar de oorspronkelijke vraag, want die raken we een beetje kwijt: wat heb je in je importtabel dus staan, en wat wil je er mee? Als je, zoals ik nu begrijp, de gegevens importeert als: [AA BB 12], en je wilt de spaties vervangen door een koppelteken, dan kun je dat ook heel simpel doen met een Replace commando: Replace([veldnaam];" ";"-")

octafish je doet me weer versteldstaan :thumb:, deze expressie heeft me helemaal geholpen.
Hij geeft nu gewoon alle kentekens weer ongeacht de vorm. :D
had niet gedacht dat zo'n ingewikkelde expressie in zo'n makkelijke te veranderen is.
mijn dank is groot:D:D:thumb:
 
Octafish is een echte diepzeeduiker. Ik heb de expressie opgeslagen, voor het geval ik hem nodig mocht hebben. Dus Octafish bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan