• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

SQL zoek data

Status
Niet open voor verdere reacties.

vaneijk

Gebruiker
Lid geworden
31 mrt 2017
Berichten
152
Beste allen,

Ik zit al enige tijd te stoeien om een goede SQL te maken, maar ik kom er niet helemaal uit. Ik heb diverse data opgeslagen in een access database, nu wil ik deze data naar excell importeren dmv een SQL maar de zoekroutine is bepalend voor kolom 20 t/m 22, het zoeken loop ik op vast door meerdere nummers te hebben opgeslagen in 1 kolom.
Kolom 20 is True/False, maar mijn vraag is voor kolom 21 een 22.
In kolom 21 en 22 kan 1 of meerdere getallen staan, indien er meerdere getallen staan zijn ze opgesplitst, bv 452 | 453
Het probleem waar ik tegenaanloop is dat ik zoek op enkele nummers als onderstaand voorbeeld en ik krijg het niet werkend om 1 nummer te vinden in de kolommen waar meerdere nummers staan opgeslagen.

Voorbeeld: Sql = "SELECT * FROM Database WHERE kolom_20 = True And kolom_21 LIKE " & val1 & " AND " & kolom_22 LIKE "& val2"

Nu snap ik even niet wat ik hiermee fout doe, zou ik de data in de kolom moeten splitsen ofzo? Ik kom er helaas niet uit en hoop niet dat ik de database zou moeten veranderen. Zou iemand mij hierbij kunnen helpen?
 
Nu snap ik even niet wat ik hiermee fout doe, zou ik de data in de kolom moeten splitsen ofzo? Ik kom er helaas niet uit en hoop niet dat ik de database zou moeten veranderen.
Dat lijkt mij echter toch veruit de beste oplossing. Zo te zien is de normalisatie in je tabel, laten we het netjes zeggen: waardeloos. Wat heeft je bezield om een veld te maken waarin je meerdere waarden op deze manier opslaat? Ik kan mij geen situatie voorstellen waarin dat a) handiger is en b) voordelen oplevert. En, zoals nu blijkt, kom je behoorlijk in de problemen. Nog afgezien van het feit dat je van getallen nu tekst hebt gemaakt. Wat dáár nu weer het voordeel van is....

Dus ja, opsplitsen van dat veld (in een gekoppelde tabel uiteraard, niet in het toevoegen van meerdere velden, want dan vergroot je het probleem alleen maar) is veruit de beste oplossing. Een alternatief zou nog kunnen zijn om in je database een tijdelijke tabel te gebruiken voor je export, waarin je met een Recordset functie records aanmaakt met voor elk getal in veld 21 een apart record. Dus, op basis van jouw voorbeeldje, krijg je dan twee records voor de waarden 452 en 453.
Zo'n genormaliseerde tabel kun je dan uiteraard prima exporteren/importeren in Excel.

Wat je fout doet, is, zonder voorbeeldbestandje, niet snel te zeggen, al zit er wel een foutje in je code.
Code:
[COLOR=#333333]Sql = "SELECT * FROM Database WHERE kolom_20 = True And kolom_21 LIKE " & val1 & " [/COLOR][COLOR=#333333]And [/COLOR][COLOR=#333333]kolom_22 LIKE "& val2[/COLOR]

Ik vermoed echter dat je in de problemen komt omdat je een tekstveld als een getal filtert. En dat kan dus niet meer, want er staat nu dus tekst in, en geen getal. Je zou dit eens kunnen proberen:
Code:
[COLOR=#333333]Sql = "SELECT * FROM Database WHERE kolom_20 = True And kolom_21 LIKE '" & val1 & "' And kolom_22 LIKE '"& val2 & "'"[/COLOR]
 
@AccessGuru, als eerste dank voor uw reactie. Wat mij heeft bezield om een veld te maken waarin ik meerder waardes op deze manier opsla? Ik denk dat dit komt dat ik een leek ben met het opstellen van databases, ik ben eens begonnen met het opstellen van databases voor ons kleinschalige familiebedrijfje met 0,0%ervaring, hierdoor loop je steeds tegen problemen aan waar ik van tevoren niet over na had kunnen denken. Dit leek mij toen de meest logische manier om meerdere data aan 1 regel te koppelen, ik was toen in de veronderstelling dat dit op zich makkelijk te splitsen was. Echter kom ik nu tot de conclusie dat dit mij inderdaad tegenwerkt.
De SQl die ik als voorbeeld had gezet miste idd nog wat haken, deze had ik vluchtig opgeschreven om als voorbeeld te dienen.
Echter zou ik graag uw advies willen opvolgen om de database anders op te gaan stellen, alleen kan ik mijzelf even niet bedenken hoe ik dit zou kunnen realiseren.
Misschien ga ik dit wel met een omweg oplossen (wat uiteraard veel trager is), eerst importeren naar excel, dan uitsplitsen en dan opnieuw importeren.
In ieder geval dank voor uw reactie
 
Kijk eens in de Handleidingen sectie naar de cursus Access; daarin worden de beginselen van het normaliseren uitgelegd en ook hoe je een niet-genormaliseerde tabel kunt normaliseren. Al wordt jouw specifieke probleem (één veld met meerdere waarden) daarin niet uitgelegd. Maar zoals ik al aangaf: dat kun je met een functie wel oplossen. Die moet je dan wel (kunnen) programmeren. An sich niet zo'n moeilijke klus, dus dat kan snel gemaakt worden. Wat wél belangrijk is, is dat je de tabellen op de juiste manier inricht. Dat houdt dus in dat je voor dat specifieke veld (of zijn het er meer) een aparte tabel aanmaakt, met in ieder geval een waarde voor de Brontabel (dus de tabel waar je de waarden uit haalt) en één veld om de seculiere waarde op te slaan. Vermoedelijk heb je ook nog andere gegevens die bij die getallen horen? Ik weet niet waar die getallen voor staan, maar ik kan mij zo voorstellen dat je er meer aan wilt hangen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan