Hoi Peter, toch waardeer ik het en ben ook aan het vergelijken gegaan tussen die van jou en OctaFish. Inderdaad heel moeilijk om de vba goed uit te lezen en te begrijpen. Ik doe mijn best. En als ik Octafish goed begrijp wordt mijn andere vraag dan ook niet behandeld. Ik geef het terug aan de gebruiker, dan kan ik dat afsluiten. Ik begin gewoon zelf bij de eerste stapjes.
Om toch het antwoord van OctaFish tussen jullie schrijfwijze te behandelen kreeg ik van ChatGPT4 het volgende antwoord:
De code die je hebt gedeeld is identiek aan de vorige versie en gebruikt geen apostrof (') in de context van de SQL-string constructie. In beide gevallen wordt de asterisk (*) gebruikt als een wildcard karakter voor de LIKE-operator in de filterstring. Dit is standaard voor Access SQL-query's die binnen een VBA-context worden uitgevoerd.
In Access VBA worden de wildcard karakters in de LIKE-operator als volgt gebruikt:
- * vervangt een willekeurig aantal karakters.
- ? vervangt een enkel karakter.
Dus als je de filterstrings bouwt, zoals "Voornaam Like '*" & Me.txtZoekenVoornaam & "*'", betekent dit dat je zoekt naar elke 'Voornaam' waar de tekst in Me.txtZoekenVoornaam overal binnen de waarde van het veld kan voorkomen.
Het belangrijkste verschil tussen de 'ouderwetse' manier van het gebruik van apostroffen en de meer moderne methoden zou kunnen liggen in hoe strings worden samengesteld, vooral als het gaat om het omgaan met input die apostroffen bevat of andere speciale karakters die geëscaped moeten worden om SQL-injectie te voorkomen.
In een meer moderne benadering of in andere databasesystemen dan Access, zou je parametergebonden query's gebruiken, die veiliger zijn. Echter, in Access VBA is het bouwen van filterstrings zoals je hebt gedaan met de LIKE-operator en de * wildcard nog steeds een geldige manier om dynamische, op gebruikersinput gebaseerde filters toe te passen. Als je een hoger niveau van veiligheid en onderhoud wilt, kun je kijken naar het gebruik van parameterquery's met ADO of DAO in VBA.
In jouw context, waar je filterstrings rechtstreeks toepast op de .Filter-eigenschap van een formulierobject, is het risico op SQL-injectie minimaal omdat je niet rechtstreeks met de database communiceert via SQL-commando's, maar de Access engine gebruikt om de filters toe te passen. Het is nog steeds goed om gebruikersinvoer te valideren en te ontsnappen om goede programmeerpraktijken te volgen.