Controleren of klant al bestaat in een tabel en anders toevoegen?

Status
Niet open voor verdere reacties.

dirkdrent

Gebruiker
Lid geworden
3 jan 2006
Berichten
382
In mijn database heb ik 4 tabellen (tbl_klanten, tbl_bestellingen, tbl_orderregels, tbl_producten) De relaties heb ik op orde bijvoorbeeld id_klant komt ook terug in tbl_bestellingen. 1 klant kan dus meerdere bestellingen plaatsen. Wanneer de klanten een bestelling plaatsen moeten zij elke keer op de website opnieuw hun gegevens invoeren. De gegevens krijg ik extern aangeleverd vanuit een txt bestand waarmee ik de tabellen in access vul.

Nu wil ik graag dat wanneer ik tbl_klanten wil vullen met b.h.v. een toevoeg query dat deze controleert als de klant niet al reeds bestaat en dat deze dus niet toevoegt (klant bestaat immers al in tbl_klanten). Nu had ik van Octafish iets begrepen over een fuzzy filter alleen hiermee moet je nog steeds elke klant handmatig bij de bestelling opzoeken en dit is niet nodig omdat dit alles automatisch gaat. Als 2e optie kwam Octafish met het idee om te zoeken op postcode en huisnummer mogelijk in combinatie met de naam van de klant.

Is er iemand die mij hiermee op weg kan helpen....? Het samenvoegen van de velden is geen probleem in de query's
 
In de toevoegquery moet je een criterium maken dat klanten wegfiltert. Dat kan middels een extra query als criterium. Dat ziet er dan uit als: Not In(SELECT KlantID FROM Importtabel). Zo'n criterium is makkelijk te maken als je op één waarde filtert (KlantID bijvoorbeeld) maar die krijg je dacht ik niet van je tekstbestand; dat bevat alleen de NAW gegevens. Wat jammer is. Nu wordt het criterium een stuk ingewikkelder. Maar er is een alternatieve methode, die simpeler werkt. En die is: Voeg zowel de klanttabel als de importtabel toe aan je toevoegquery (importtabel stond er natuurlijk al) en koppel alle tekstvelden die een match zijn aan elkaar. Maak daarvan een Left of Right join (Dubbelklikken op de lijn, en dan niet optie 1 gebruiken, maar 2 of 3). Daarbij gaat het er om dat je alle klanten uit Import ziet, en alle gerelateerde klanten uit Klanten.
Je koppelt dus velden als Klantnaam op Klantnaam, Adres op Adres en Postcode op Postcode. Bij alle relaties zie je dan een pijlkop op de relatielijn. Zou je nu de twee velden met klantnaam selecteren, en de query draaien, dan zie je alle klantnamen uit Import staan, en uit de tabel Klanten zie je alleen de namen staan van klanten die je al eerder hebt geïmporteerd. Verder zie je een hoop lege velden staan. De gevulde namen in die kolom heb je al, dus die hoef je niet te importeren. De lege velden heb je nog niet, in die moeten dus wèl geïmporteerd worden.
Dat filteren doe je door de lege velden te selecteren met het criterium Is Null Or "". Als je dan nog een keer kijkt, zie je geen bestaande klantnamen meer staan in de uitvoer. En dat is de selectie die je moet importeren.
 
Het is nooit goed te voorspellen of je optie 2 of optie 3 moet nemen; hangt een beetje van de plek van de tabel in de structuur af. Maar in jouw geval dus 3.
Wat betreft je laatste vraag: dat is precies de reden dat je de records moet controleren voordat je importeert. En dat is wat ik in de andere draadjes met 'fuzzy' bedoelde; in een query zou je dubbele records moeten opsporen bijvoorbeeld op basis van postcode/huisnummer. Dan zie je gauw genoeg of C. Bakker dezelfde persoon is als Cor Bakker.
 
Sorry, ik dacht dat ik er goed mee bezig was maar zag in jouw eerste post dat ik in het resultaat alle gegevens uit tbl_klanten moet zien en de klant uit de txt bestand. De klant uit het txt bestand komt wel naar voren maar de klanten uit tbl_klanten niet zie bijlage Bekijk bijlage klanten.zip
 
Je deed het goed; je moet alle klanten uit Import zien, en niet diegene uit Klanten. Alleen: in jouw query gebruik je de velden uit beide tabellen in de Toevoegquery. Dat kan niet; je kunt maar één veld per veld gebruiken. Dat komt natuurlijk uit je tekstveld. En je moet de velden uit Klanten filteren met IsNull. Zodat je alleen de onbekende klanten overhoudt. Op basis van jouw db is dat deze query:
Code:
INSERT INTO tbl_Klanten ( Naam, Straat, Postcode )
SELECT [customer txt dus de gelinkte tabel].Naam, [customer txt dus de gelinkte tabel].Straat, [customer txt dus de gelinkte tabel].Postcode
FROM tbl_Klanten RIGHT JOIN [customer txt dus de gelinkte tabel] ON (tbl_Klanten.Postcode = [customer txt dus de gelinkte tabel].Postcode) AND (tbl_Klanten.Straat = [customer txt dus de gelinkte tabel].Straat) AND (tbl_Klanten.Naam = [customer txt dus de gelinkte tabel].Naam)
WHERE (((tbl_Klanten.Naam) Is Null Or (tbl_Klanten.Naam)="") AND ((tbl_Klanten.Straat) Is Null Or (tbl_Klanten.Straat)="") AND ((tbl_Klanten.Postcode) Is Null Or (tbl_Klanten.Postcode)=""));
 
Perfect werkt super.... bedankt voor de ondersteuning ik ga even weer verder stoeien... :cool:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan