Avatar billede sjoran Nybegynder
22. september 2008 - 11:56 Der er 7 kommentarer og
1 løsning

Dynamisk valg af kolonne

Ligesom jeg f.eks. kan gøre afgrænsningen på et felt i en forespørgsel dynamisk ved at sætte [ ]. Kan man så på samme måde gøre udvælgelsen af kolonner dynamisk. Jeg har et felt som jeg har kaldt value, dette felt vil jeg gerne kunne vælge hvor i tabellen den skal hente data. Jeg vil gerne kunne skrive [jan], og så skal den hente data i kolonne "jan" fra input tabellen.
Avatar billede terry Ekspert
22. september 2008 - 12:09 #1
As far as I know you cant do that in a query, but you can build the query dynamically in code
Avatar billede terry Ekspert
22. september 2008 - 17:54 #2
To dynamically alter the code in an existing query you would use something like this.

Currentdb.QueryDefs("NameOfQueryGoesHere").SQL = "SELECT ......"

so you could quite easily alter which fields you want to select
Avatar billede kjulius Novice
22. september 2008 - 19:45 #3
Du vil eventuelt også kunne bruge DLOOKUP funktionen. Der skal bare være en primær nøgle, man kan bruge til at identificere den korrekte række. Det er normalt ikke noget problem, da det er standard for tabeller i Access, som normalt har et felt der hedder Id, som fungerer som primær nøgle.

SELECT Valgtfelt, DLOOKUP(Valgtfelt, "TABEL1", "Id=" & Id) AS Feltværdi
FROM TABEL1

Ovenstående vil returnere indholdet af det felt, hvis navn står i feltet Valgtfelt i tabellen.

På samme måde vil man naturligvis kunne vælge et bestemt felt via navn fra en form ved at referere til dette. Hvis man på formen har et felt, der hedder Valgtfelt, hvor man angiver navnet på den kolonne man vil vise:

SELECT Forms!Form1.Valgtfelt, DLOOKUP(Forms!Form1.Valgtfelt, "TABEL1", "Id=" & Id) AS Feltværdi
FROM TABEL1
Avatar billede sjoran Nybegynder
23. september 2008 - 09:20 #4
Jeg er desværre ikke meget inde i VBA, selvom det sikkert kunne være en fornuftig løsning.

Min SQL skal i en forsimplet udgave se ud lignende denne
Select Account, [vælg måned] as month, [valgfelt] as value
from tabel

Tabel består af en kolonne med account numre, og så en hel masse kolonner med data pr. måned. Kolonneoverskrifter er account, f2, f3, f4, osv.

Vælg måned og valgfelt har jeg lagt i en form sammen med en makro der kører SQL'en som så tilføjer data til min tabel hver gang jeg har ændret de to variable og kørt makroen igen..
Avatar billede terry Ekspert
23. september 2008 - 11:23 #5
Well I could suggest that you consider altering your tbales so that each month has its own record, but I can guess that your not interested in doing that. So I would still suggest that you build your query dynamically in code. If this is a problem then you can send me your dB and I'll do it for you later today after work.

If its a problem sending the dB then you could just send the stuff I would need (table/form).
ekspertenATsanthell.dk
AT = @
Avatar billede kjulius Novice
23. september 2008 - 13:19 #6
Du kan gå begge veje: Den som terry har foreslået, nemlig at opbygge og udføre en forespørgsel hver gang, hvor der kun selekteres de kolonner der ønskes, eller mit forslag, som indebærer at der for hver række der hentes skal udføres et selvstændigt opslag til den samme tabel via DLOOKUP.

Jeg indrømmer blankt, at jeg selv nok også ville være gået efter terrys version, hvis jeg skulle have kodet det, da det nok i de fleste situation er en bedre løsning, i hvert fald for store tabeller med mange rækker.

På den anden side vil mit alternative forslag nok i andre situationer være nemmere at håndtere, da det alene involverer forespørgslen, mens terrys forslag er helt afhængig af et nogenlunde kendskab til VBA, som skal klare opbygningen af den nødvendige SQL.

Livet består af en lang række valg, som man siger...
Avatar billede sjoran Nybegynder
23. september 2008 - 13:36 #7
Jeg har valgt din fremgangsmåde Kjulius, og det virker i min database. Så point til dig når du svarer.
Avatar billede kjulius Novice
23. september 2008 - 16:22 #8
OK, tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester