Ik heb zelf tegen een bestaande ms access database (van OROV) een toevoeging gemaakt en de meeste problemen opgelost.
Gebruik in de queries back-quotes voor identifiers (tables, fields); double-quotes voor aliases.
Ik zoek meestal een website met een overzicht van
standaard SQL functies voor MS Access; je kunt niet de SQL functie reference van HSQLDB gebruiken. Base is zelf enkel een front-end voor een database en is transparant mbt SQL (zal wel het SQL willen parsen, maar gaat zelf niets voor je doen dan eventueel parameters oplossen en als je SELECT refereert naar Queries, zal base deze 'exploderen' en het resultaat naar de database sturen).
Je kunt vanuit Base geen VB-functies of expressies gebruiken, alleen de standaard functies van MS Access (en misschien functies die in de MS JET DB-engine zijn geïmplementeerd).
Dit kunje bv voor een linker-substring gebruiken:
Code: Selecteer alles
select left(`tegenrekening`,2) as "Laatste Twee Cijfers" from `mutaties`
Voor CASE WHEN kun je IIF gebruiken.
Er zijn een paar issues met het gebruik van MS Access:
Het concateneren (aan elkaar plakken) van strings in een query moet je niet mbv '||' doen maar met '+'. Probleem is dan dat Base literals niet accepteert. Workaround is dan, of 'Direct SQL' vanuit Base, maar dat kan niet altijd van wege bv een parameter of query voor een Report. Andere oplossing is bv de query aanmaken als 'view' (wordt een query in ms access) of de select te nesten. Van het laatste een voorbeeld:
A. Dit werkt alleen in Direct SQL mode:
Code: Selecteer alles
select right(`tegenrekening`,2) + '222' as "Scrambled"
from `mutaties`
B. Workaround Zie ook issue
97811:
Code: Selecteer alles
select `Z`.`tegenrekening2` + `Z`.`dummy` as "Scrambled" from (
select right(`tegenrekening`,2) as "tegenrekening2", '222' as "dummy"
from `mutaties` ) "Z"
Voordeel van MSAccess t.o.v. HSQLDB in Base is dat MSAccess benadert wordt via MS Jet Engine die erg goed overweg kan met complexe SQL statements en m.i. behoorlijk stabiel is. Ik zou niet snel een MS access database overzetten naar HSQLDB (Base's interne database).