Records van veldnaam standaard plaatsen

Status
Niet open voor verdere reacties.

tclaesse

Gebruiker
Lid geworden
8 jan 2004
Berichten
240
Hallo,

Mijn probleem is hetvolgende :

Ik zou in access 2010 in de rapportweergave standaard een kolom moeten krijgen van alle Europese landen. Dus m.a.w onder veldnaam 'landen' zouden de ongeveer 70 Europese landen alfabetisch standaard moeten verschijnen. Op zich is dit niet moeilijk maar deze kolom dient ook steeds zichtbaar te zijn wanneer ik een query aan toevoeg. Bijvoorbeeld : Ik wil een query invoegen waarin het inwonersaantal > 30.000.000 inwoners. Normaal zou je dan een aantal landen krijgen die inderdaad >30.000.000 inwoners maar het is de bedoeling dat alle 70 landen gewoon in m'n rapport blijven, dus met blanco's (en dus ook België)

Hoe pak ik dit het beste aan?
 
Ik neem maar even aan dat je de landen in een aparte tabel hebt staan en dat je daarin ook de inwonersaantallen hebt vastgelegd. Al is de oplossing makkelijker als je die gegevens uit een andere tabel haalt. Maar voor dit specifieke probleem kun je het rapport baseren op een query waarin je de tabel Landen twee keer toevoegt. Daarbij maak je dan een Outer Join koppeling tussen de twee tabellen, waarbij je dan (als je dubbelklikt op de koppellijn) optie 2 of optie 3 moet kiezen. Welke maakt niet zoveel uit, en hangt af van de kant waar de tabel staat. Met een Outer Join (link met een pijlpunt aan één kant) laat je van de hoofdtabel alle records zien, en van de gekoppelde alleen de gerelateerde records. Die tabel geef je een criterium: >30000000 op het veld [Inwonersaantal]. Nu zie je van de landen die aan het criterium voldoen het aantal inwoners, en van de overige landen zie je niks. En dat is het resultaat dat je dan op je rapport ook ziet.
 
Tot op heden ben ik er nog steeds niet tenvolle in geslaagd want het loopt nog altijd mis bij de aanmaak van m'n outer join. Ik heb de landen dus twee keer in de aanmaak van m'n query toegevoegd zodat ik dus landen en landen 1 heb.

Dien ik dan de outer join aan te leggen tussen de beide 'landentabellen' of met één landentabel en de hoofdtabel zelf? M'n veld 'inwonersaantal' staat in m'n hoofdtabel. Voor welk veld kan ik het best dan m'n primaire sleutel instellen?

Kortom, voor zover ik heb begrepen heb ik dus in m'n query 3 tabellen nu (landen, landen1 en de hoofdtabel) waarbij de gerelateerde tabellen landen en landen 1 zijn?

Octafish, moest je het kort kunnen schetsen zou me dit een groot plezier doen. Momenteel ben ik als beginneling wel volop bezig aan de handleidingen hier.
M'n probleemstelling is evenwel vrij dringend, vandaar.
 
Als je een voorbeeldje maakt met je rapport, helpt dat met de snelheid :) Dan hoef ik namelijk geen landentabel in te typen. Ik kan je overigens verzekeren dat ik dat ook niet van plan ben ;)
 
Octafish,

In bijlage zend ik u een vereenvoudigde vorm van m'n prille database toe. Ik heb als voorbeeld slechts een viertal landen toegevoegd, aangevuld met een paar kernwoorden. Later breid ik deze vanzelfsprekend volledig uit wanneer m'n probleem is opgelost.
Ik heb om te beginnen de 2 tabellen landen toegevoegd (landenlijst), aangevuld met de tabel landengegevens (hoofdtabel).
Wanneer ik de query >30000000 instel krijg ik dus enkel Brazilië (wat ook normaal is). Uiteindelijk wil ik dus de 4 landen standaard laten verschijnen met dus 3 blanco's en één ingevuld veld Brazilie (70.000.000 inwoners)
 

Bijlagen

Ik vind je tabellen een beetje vreemd, want twee tabellen voor dezelfde soort gegevens (Landgegevens)? Die heb ik dus samengevoegd in één tabel, en daar rolt dan deze oplossing uit:

Code:
SELECT id, Land, Klimaat, Geschiedenis, Geografie, Inwonersaantal
FROM Landengegevens 
WHERE Inwonersaantal >30000000
ORDER BY Land
Union
SELECT id, Land, Null as Klimaat, Null as Geschiedenis, Null as Geografie, Null as Inwonersaantal
FROM Landengegevens
WHERE (id Not In (SELECT id FROM Landengegevens WHERE Inwonersaantal >30000000))
ORDER BY Land;
Overigens vind ik het maar een vreemd probleem, en een vreemde werkwijze. Je wilt dus alle landen zien, maar van de landen waarvan het aantal lager is dan de waarde die je ingeeft wil je de details niet zien? Dan zou ik denk ik de tabel gebruiken met alle velden, en met voorwaardelijke opmaak werken. Heb je geen ingewikkelde queries nodig. Of met VBA de velden die je niet nodig hebt op Invisible zetten. Maar goed, probeer het eerst met de query, zou ik zeggen! Wel dus eerst je tabel fatsoeneren ;)
 
Octafish,

Kan u me zeggen langs waar ik bovenstaande code het makkelijkst kan intypen? Ik ben me nog maar net aan het toeleggen op access, vandaar.
Toch alvast bedankt voor je snelle antwoord!
 
Deze code is de code voor een query. Zoals je kunt zien, staat halverwege het woord UNION. Dat betekent, dat je de query niet (meer) kunt bekijken in het query-ontwerpscherm als hij is gemaakt. Je kunt nog wel beginnen met het ontwerpscherm, maar je moet dan geen tabel selecteren, en vervolgens op de knop SQL klikken. In het venster dat je dan ziet, vervang je de standaard tekst (die begint met SELECT) door de bovenstaande code.
 
Octafish,

Wanneer ik de query aan de hand van de code uitvoer krijg ik de melding 'de expressie ORDER BY (land) bevat velden die niet zijn geselecteerd door de query. Alleen die velden die zijn opgegeven in de eerste query, kunnen worden opgenomen in een ORDER-by expressie'

Het is blijkbaar ook zo dat ik nu automatisch in een samenvoegquery terecht kom?

U mag anders gerust ook wijzigingen zelf aanbrengen in m'n database (bijvoorbeeld in ontwerpraster van query) zodat ik stilaan meer en meer kan leren eruit.
 
Je hebt zo te zien de tabel nog niet aangepast; in een eerder bericht zei ik dat het een beetje onzinnig is om de landgegevens op die manier te splitsen. Ik heb er dus één tabel van gemaakt. Ik heb je voorbeeldje er maar bijgedaan, want dat is vermoedelijk een stuk duidelijker.
 

Bijlagen

Alvast bedankt! Nog één vraagje : kan ik nu nog op één of andere manier het ontwerpraster van m'n query nog zien?
 
Nope. Een Union query kun je alleen in SQL view bekijken en aanpassen. Een workaround is om de aparte queries tijdelijk op te slaan in een eigen query; dan kun je ze wel bekijken. Of dat zin heeft...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan