Expressie-velden in query

Bespreek het databaseprogramma
dennish
Berichten: 3
Lid geworden op: do aug 26, 2010 4:47 pm

Expressie-velden in query

Bericht door dennish »

Hallo,

Ik heb een aantal MS Access databases die ik wil omzetten naar OpenOffice Base. Ik stuit echter bij het omzetten van de queries op het volgende probleem:

In Access maakte ik gebruik van expressies (Zie [http://office.microsoft.com/en-gb/acce ... _Functions als veld geaccepteerd te krijgen (Voorbeeld foutmelding bij Query uitvoeren: De expressie bevat een ongedefinieerde functie SUBSTR) :crazy: .

Mijn invoer (in Veld):

Code: Selecteer alles

SUBSTR( `Host`, 1, 2 )
Uitleg (bedoelde uitkomst):

Neem de tekst string uit het veld Host en geef de 2 karakters weer, startend vanaf positie 1 (eerste karakter van de string).

Kortom: bepaald geen rocket science, maar wel consequent door Base geweigerd!

Wie heeft de gouden tip?

Groeten Dennis

PS. Is er ergens documentatie / forum bijdrage die het gebruik van expressies in Base beschrijft? Ik heb me ondertussen suf gegoogled ...
OpenOffice 3.2.1, Microsoft Vista
RPG
Berichten: 4727
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Expressie-velden in query

Bericht door RPG »

Hallo

Op deze site staat niet zoveel aan functies in een database.
Ik kan je aanraden te zoeken op de twee Engelse forums.
Als je zoek op twee auteurs namen dan krijg je al betere resultaten.
Villeroy voor algemene informatie en Sliderule voor SQL. De laatste geeft goede uitleg.

De overstap van MS Access naar OOo-base is vaak moeilijk.

Gebruik altijd dubbele aanhaling tekens voor variabelen en enkel voor letterlijke aanhalingen.

Romke


http://www.oooforum.org/forum/viewtopic ... ate+select
http://www.oooforum.org/forum/viewtopic ... ate+select

Code: Selecteer alles

SELECT 
	"id"
	,substr("host", 1,2) as "Een" 
	,SUBSTRING("host", 1,2) as "Twee" 
	,SUBSTRING("host" from 1 for 2) as "Drie"
FROM "Proef" AS "Proef
"
LibreOffice 24.2.4.2 op openSUSE Leap 15.6
dennish
Berichten: 3
Lid geworden op: do aug 26, 2010 4:47 pm

Re: Expressie-velden in query

Bericht door dennish »

Hallo Romke,

Bedankt voor de reactie.

Ik heb je suggestie m.b.t. het gebruik van de aanhalingstekens geprobeerd, maar dit levert helaas niets op. Sterker nog, als ik de enkele aanhalingstekens vervang door dubbele corrigeert Base ze weer terug naar enkel. 'Host' is in mijn voorbeeld overigens geen zelf string, maar een veldnaam van een tabel (met strings als inhoud).

Wat me vooral bevreemd is dat Base aangeeft dat ze SUBSTR (of SUBSTRING) niet als functie herkent (los van eventuele syntax fouten. Zie de foutmelding: ongedefinieerde functie). Enig idee hoe kan dit kan? Zijn dit type functies (zie mijn vorige post) standaard beschikbaar?

Groeten Dennis
OpenOffice 3.2.1, Microsoft Vista
RPG
Berichten: 4727
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Expressie-velden in query

Bericht door RPG »

Hallo

Welk database engine gebruik je?

Kijk links onder in je window.

Romke
LibreOffice 24.2.4.2 op openSUSE Leap 15.6
dennish
Berichten: 3
Lid geworden op: do aug 26, 2010 4:47 pm

Re: Expressie-velden in query

Bericht door dennish »

Hallo Romke,

Heb het even gechecked: Microsoft Access.

Groeten Dennis
OpenOffice 3.2.1, Microsoft Vista
RPG
Berichten: 4727
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Expressie-velden in query

Bericht door RPG »

Hallo

Zolang je de beschikking hebt over MS Access kun je dat blijven gebruiken met OOo-base.Ik heb daar geen ervaring mee.

De vraag over de functie wordt nu ingewikkelder.

In native SQL mode kun je gewoon de MS Access opdrachten gebruiken. Ik heb geen idee welke functies je kunt gebruiken in de stndaard mode. In de standaard mode moet je denk ik wel dubbele aanhalings tekens gebruiken. Ik denk dat er in de standaard mode niet zoveel mogelijkheden zijn.

Als je een belangrijke of grote database hebt verdiep je in de eigennaardigheden van OOo-base. Ik denk dat de voorkeur is om het gesplitst te houden zoals nu bij MS Access en OOo-base.

Romke
LibreOffice 24.2.4.2 op openSUSE Leap 15.6
eremmel
Berichten: 670
Lid geworden op: di sep 01, 2009 10:11 am
Locatie: Barneveld, Nederland

Re: Expressie-velden in query

Bericht door eremmel »

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).
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Plaats reactie