Quotes in AsToDate
Zoals bekend kan met SqlWhere een zoekcriterium met behulp
van de in search-condition
beschreven syntaxes worden gedefiniererd. Een voorbeeld hiervan is SqlWhere(VeldA=VeldB).
Deze conditie 'zoekt' alle rijen (records) waarvan de inhoud van de kolommen VeldA en
VeldB exact gelijk zijn aan elkaar. Een voorwaarde is dat VeldA en VeldB van hetzelfde
type zijn en dat de kolommen VeldA en VeldB bestaan. Stel nu dat VeldA en VeldB kolommen
zijn van het stringtype zoals in SqlWhere(Adres=PostAdres). Met deze conditie worden dus
alle rijen (records) gezocht waarvan de kolommen Adres en PostAdres exact
dezelfde inhoud hebben. Stel dat er een bepaald adres moet worden gezocht b.v. 'postbus
10'. Indien wordt opgegeven SqlWhere(Adres=postbus 10) wordt de kolommen Adres en postbus
doorzocht. Mocht de kolomnaam 'postbus' al bestaan dan wordt toch nog een fout gegenereerd
vanwege die losse 10. Om een letterlijke waarde (string literal) op te geven dient gebruik
gemaakt te worden quotes: SqlWhere(Adres='postbus 10'). Indien in de string literal zelf
een quote voorkomt kan deze ge-escaped worden met een extra quote zoals in:
SqlWhere(Onderwerp='Variëlle''s kleurboek'). De letterlijke string waarden zijn case
gevoelig zodat andere rijen gevonden worden met: SqlWhere(Adres='Postbus
10'). De numerieke literals kunnen zonder quotes (') opgegeven worden zoals 12, 102.12,
192.76E23 etc.
De SQL syntaxis schrijft voor dat kolomnamen met een letter moeten beginnen en gevolgd
kunnen worden door 0 of meer cijfers, letters en _. Indien hieraan niet wordt voldaan kan
de kolomnaan tussen back-quotes (`) gezet worden zoals in: SqlWhere(`Voorna(a)m(en)` =
Naam) of SqlWhere(`Voorna(a)m(en)` = 'Variëlle') of SqlWhere(`Voorna(a)m(en)` LIKE
'b?e%') dus `Voorna(a)m(en)` LIKE 'b?e%' is geheel SQL systaxis en heeft
verder niets van doen met AsToDate. AsToDate geeft als het ware de tekst: `Voorna(a)m(en)`
LIKE 'b?e%' letterlijk door aan de search-condition van de SQL
opdracht. Wat nu als er gezocht moet worden naar kolommen waarin b.v. een )
in voorkomt zoals in: SqlWhere(Naam LIKE '%)%'). AsToDate vat dit op als
SqlWhere(Naam LIKE '%) zodat: Naam LIKE '% wordt doorgegeven hetgeen SQL
syntaxisfout oplevert. Dit kan weer opgelost worden met de AsToDate escape quote "
zoals in SqlWhere("Naam LIKE '%)%'").
Voorbeelden:
SqlWhere(`Voorna(a)m(en)` = 'Variëlle')
Vergelijkt kolom: Voorna(a)m(en) met de waarde: Variëlle
SqlWhere(`Voorna(a)m(en)` = Variëlle) en SqlWhere(`Voorna(a)m(en)` = `Variëlle`)
Vergelijkt kolom: Voorna(a)m(en) met de kolom: Variëlle
SqlWhere('Voorna(a)m(en)' = Variëlle) en SqlWhere('Voorna(a)m(en)' = `Variëlle`)
Vergelijkt de kolom: Variëlle met de waarde: Voorna(a)m(en)
SqlWhere('Voorna(a)m(en)' = 'Variëlle')
Vergelijkt waarde: Voorna(a)m(en) met de waarde: Variëlle. Dit is dus
altijd onwaar (vindt altijd 0 rijen) maar levert verder geen SQL fout op!
Samenvatting:
Kolomnamen met speciale karakters tussen: `
(zowel in SQLSelect als SQLWhere).
Letterlijke stringwaarden tussen: '
Letterlijke AsToDate strings tussen: "