Even/oneven bepalen

Status
Niet open voor verdere reacties.

Middennoord

Gebruiker
Lid geworden
31 aug 2012
Berichten
6
Hallo allemaal,

Ik heb 2 vragen. Op mijn werk gebruik in een database met voorraden, een tabel hierin is zijn definities van locaties.
Wat ik wil doen in een query is het bepalen van een even en een oneven kant van een locatiestelling.

De locatie opbouw is bv de onevenkant 11-33-01 (straat-vak-onderverdeling), aan de evenkant van de straat heb je dus 11-34-01.
Nu wil ik in de query zelf een onderscheid maken in een evenkant en een onevenkant. Ik heb dus een kolom toegevoegd met de naam Even/oneven in de query en nu wil ik een formule hierin plaatsen zodat er in de uitkomst de woorden even of oneven komt te staan.

Mijn 2e vraag is voor de laatste kolom ' etage'
Alle locaties die eindigen op 01,02 en 03 zijn grondplaatsen en daar wil ik in de laatste kolom dus het woord 'grond' zien.
De locaties die eindigen op A1,A2 en A3 zijn op de eerste etage en daar wil in een 1 zien,
Zelfde met de locaties die eindigen met B1,B2 en B3 zijn de tweede etage en wil in de uitkomst een 2 zien,
en locaties die einidgen met C1,C2 en C3 is dus de derde etage en daar wil in een 3 zien.

Ik heb de locaties in deze database ook zonder tussenliggende streepjes in een aparte kolom.
Hopelijk is dit verhaal een beetje duidelijk.



screen2.jpgscreen.jpg

Alvast bedankt.

Groeten Rob
 
Ik wil eerst je eerste vraag oplossen:
Maak een functie in een module:
Function dhEvenOneven(strTemp as string)
dim intVak as integer

intVak =cint(mid(strTemp,4,2))

if intVak mod 2 =0 then dhEvenOneven="Even" else dhEvenOneven="Oneven"

End Function


Maak een nieuwe kolom Even_Oneven en zet dit erin;
IsEven As dhEvenOneven(locatiestelling)

waarbij locatiestelling 11-33-01 kan zijn.

Klaar.

Groeten
XLFAC
 
2de vraag kan precies opgelost worden met wat ik eerder heb geschreven.
Maar nu met een andere functie bijvoorbeeld dgEtage
En daarin ga je alle criteria uitwerken

Groeten,

XLFAC
 
In de veronderstelling dat "locatie" een variabele is van het type "tekst":

VRAAG 1:
Code:
iif(int(right([locatie],2))mod2=0,even,oneven)

VRAAG 2:
Code:
Switch(Mid([locatie],7,1)=0,"Grond",Mid([locatie],7,1)=A,1,Mid([locatie],7,1)=B,2,Mid([locatie],7,1)=C,3)
 
Ten eerste allebei heel erg bedankt voor de snelle reactie. Nu is mijn kennis niet al te groot van modules maar hier zie ik " dim intVak as integer" en integer zijn toch getallen/numbers? Alle locaties staan als tekst in de tabellen.

De volgende opmerking is: Waar zet ik " IsEven As dhEvenOneven(locatiestelling)" doe ik dit in de query in de rij ' criteria' ?
 
Modules komen er niet bij kijken, hoor. Gewoon zo in de query zetten.

Ik ben er inderdaad van uit gegaan dat het om tekst ging, vandaar de conversie naar een INT.

EDIT: Heb je vraag iets te snel gelezen. Was me niet bewust van XLFAC's antwoord... Tijd dat het weekend is :D Bovenstaande geldt dus voor mijn antwoord.
 
Laatst bewerkt:
Dank je Bart.
Ik ga ervanuit dat wat jij geschreven hebt naar 'criteria' geplaatst moet worden. Ik krijg wel een foutmelding: " You omittedan operand or operator. You entered an invalid character or comma, or you text without surrounding it in quotation marks"

Ik denk dat ik sommige komma's moet vervangen met een ; ik weet alleen niet welke of heb ik het mis?
 
Je plaatst die formules onder "field", voorafgegaan door hoe je het berekende veld wil noemen en een ":"

Bv "EvenOneven: (formule)"

Ook bij het schrijven ben ik kennelijk wat snel geweest. Met syntax rommel ik zelf altijd wat :) Probleem is dat ik het nu niet kan proberen, daar ik je DB niet heb.

De termen "even" en "oneven" moeten alleszins tussen aanhalingstekens. Het is mogelijk dat dit ook het geval is voor de 1,2 en 3 in vraag 2. Implementeer de berekende velden één voor één. Op die manier kan je al een en ander uitsluiten. Daarnaast kan je voor de juiste syntax terecht in de helpfunctie, inclusief voorbeelden van de formules.

Excuses voor het rommelige antwoord. De combinatie van weinig tijd en zelf niet kunnen uitproberen laten me weinig keuze.
 
Ik krijg wel een foutmelding: " You omittedan operand or operator. You entered an invalid character or comma, or you text without surrounding it in quotation marks"

Ik denk dat ik sommige komma's moet vervangen met een ; ik weet alleen niet welke of heb ik het mis?

Je hebt het mis, je moet ALLE komma's vervangen door een puntkomma.

Tardis
 
Je plaatst die formules onder "field", voorafgegaan door hoe je het berekende veld wil noemen en een ":"

Bv "EvenOneven: (formule)"

Ook bij het schrijven ben ik kennelijk wat snel geweest. Met syntax rommel ik zelf altijd wat :) Probleem is dat ik het nu niet kan proberen, daar ik je DB niet heb.

De termen "even" en "oneven" moeten alleszins tussen aanhalingstekens. Het is mogelijk dat dit ook het geval is voor de 1,2 en 3 in vraag 2. Implementeer de berekende velden één voor één. Op die manier kan je al een en ander uitsluiten. Daarnaast kan je voor de juiste syntax terecht in de helpfunctie, inclusief voorbeelden van de formules.

Excuses voor het rommelige antwoord. De combinatie van weinig tijd en zelf niet kunnen uitproberen laten me weinig keuze.


Ik heb een verkorte database bijgesloten. Misschien is dat makkelijker. Het word tijd dat ik een cursus ga aanvragen op het werk ;)
 

Bijlagen

Laatst bewerkt:
Hierbij je DB met de berekende velden. Helaas zijn we er nog niet helemaal: de formule voor de etage geeft een fout wanneer de etage niet 0 is. Ik krijg die er zelf niet uit... :confused: Wel heb ik een alternatief veldje toegevoegd, dat gewoon het etageteken uit de locatienaam haalt.

Bekijk bijlage testDB.zip

De formule die problemen geeft, luidt als volgt:
Code:
Etage: Switch(Mid([locatie];5;1)=0;"Grond";Mid([locatie];5;1) Like "A";"1";Mid([locatie];5;1) Like "B";"2";Mid([locatie];5;1) Like "C";"3")

Wie weet wat hieraan scheelt? Ik ben zelf benieuwd...
 
Echt, onwijs bedankt! Ik ben ook benieuwd als de laatste #error eruit gehaald kan worden.:thumb::thumb:
 
Ik heb de vraag voor de #error ven op het microsoft forum gesteld. Zij gaven mij dit als als oplossing:

Etage: Switch(Mid([Locatie];5;1)="0";"Grond";Mid([Locatie];5;1)="A";"1";Mid([Locatie];5;1)="B";"2";Mid([Locatie];5;1)="C";"3")
Deze werkt perfect!!
 
Het zat hem dus toch in de = tekens. Vreemd, want ik herinner me dat die aanvankelijk in mijn formule stonden. Dan zal ik toch weer een syntaxfout hebben gemaakt :rolleyes:

In elk geval is het goed dat je probleem is opgelost, want daar ging het natuurlijk om :thumb:
 
@Bart: in de formule die je op 3-9 hebt gepost, is het gebruik van LIKE an sich niet fout, maar een beetje zinloos, omdat je een tekstvergelijking maakt op exact één teken. In dat geval is het =-teken een betere optie. Waar jou voorbeeld de fout in gaat, is dat je de eerste vergelijking op een getal doet, en niet op een tekstreeks. En dat moet in dit geval.
Mid([Locatie];5;1)="0" is dus goed, en Mid([Locatie];5;1)=0 is fout.
 
@Bart: in de formule die je op 3-9 hebt gepost, is het gebruik van LIKE an sich niet fout, maar een beetje zinloos, omdat je een tekstvergelijking maakt op exact één teken. In dat geval is het =-teken een betere optie. Waar jou voorbeeld de fout in gaat, is dat je de eerste vergelijking op een getal doet, en niet op een tekstreeks. En dat moet in dit geval.
Mid([Locatie];5;1)="0" is dus goed, en Mid([Locatie];5;1)=0 is fout.

Ach, natuurlijk. Omdat de Mid() functie ook tekst oplevert. Bedankt Michel, zo heb ik ook weer iets bijgeleerd :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan