Avatar billede molleren Nybegynder
29. august 2005 - 09:47 Der er 18 kommentarer og
1 løsning

Filter i formular baseret på undertabel

Hjælp til oprettelse af dynamisk filter i formular.

Bruger Access 2003

Jeg har 3 tabeller.

En Hovedtabel (Tabel 1) med flere felter, heraf et kaldet "Nummer", som er nøglen.
Tabel 2 består af to felter, et kaldet "Nummer" relateret til Tabel 1, og et andet kaldet Id (tal).
Tabel 3 består af to felter, et kaldet Id relateret til Tabel 2 og et kaldet Type.

Jeg kan altså via Tabel 2 tildele flere typer til mine Numre i Tabel 1.

Jeg har så en formular der viser posterne i Tabel 1 på listeform. Denne vil jeg gerne via en kommando sortere udfra Type i Tabel 3.

Jeg har tilføjet et andet filter baseret på et felt i Tabel 1, der kan aktiveres via afkrydsnigsfelt. Så kunne godt tænke mig, at jeg via rullepanel hvor der vælges en Type (Tabel 3) kan sortere min formular baseret på de relationer som nævnt ovenfor.

Postkilden til omtalte formular er Tabel 1, skal denne måske ændres til noget Select .. From... ??

Eller kan jeg gøre det via noget Me.Filter = ...?? Men jeg skal vel have Tabellernes relationer ind et eller andet sted..

Jeg uddyber gerne ;)

Mvh Morten
Avatar billede Slettet bruger
29. august 2005 - 09:57 #1
En metode er:

Lav en formular med et rullepanel med typer, indsæt din nuværende formular som underformular.

I din nuværende formular går du ind og tager tabel 2 og 3 med i din kildeforespørgsel, så at du får type med.

Herefter sætter du hovedformular og underformular links til at være type.

!~)
Avatar billede mugs Novice
29. august 2005 - 10:29 #2
Prøv at på thomasjepsen's hjemmeside. Der er et fremragende eksempel på en dynamisk filtrering.
Avatar billede mugs Novice
29. august 2005 - 10:31 #3
Avatar billede molleren Nybegynder
29. august 2005 - 10:39 #4
Er nu ikke for meget for det med underformularer, men det kan blive en løsning..

Tjekker Thomas' side..
Avatar billede claesdamlund Nybegynder
29. august 2005 - 13:56 #5
Din Type komboboks (rullepanel) har en hændelse som hedder EfterOpdatering (AfterUpdate), hvori du kan skrive følgende kode:

Me.RecordSource = "Select * From [Tabel 1] Where Nummer In(Select Nummer From [Tabel 2] Inner join [Tabel 3] On [Tabel 2].Id = [Tabel 3].Id Where Type = '" & Type & "'"
Me.Requery
Avatar billede molleren Nybegynder
29. august 2005 - 15:49 #6
Ok, tjekker det imorgen en gang - men lyder lovende Claes.
Avatar billede molleren Nybegynder
30. august 2005 - 15:21 #7
@ Claes, er du sikker på at sætningen er valid? Der mangler en højre parantes i hvert fald... prøver at hitte ud af det, men ..
Avatar billede mugs Novice
30. august 2005 - 15:26 #8
her startes en venstreparantes:

(Select Nummer From [Tabel 2] Inner join [Tabel 3] On [Tabel 2].Id = [Tabel 3].Id Where Type = '" & Type & "'"

Den skal jo afsluttes.
Avatar billede molleren Nybegynder
30. august 2005 - 15:52 #9
Med parantesen her:

(Select Nummer From [Tabel 2] Inner join [Tabel 3] On [Tabel 2].Id = [Tabel 3].Id Where Type = '" & Type & "')"

Så får jeg Run time error 2101, den indtastede indstilling er ikke gyldig for denne egenskab...

Er der noget andet galt?
Avatar billede mugs Novice
30. august 2005 - 16:16 #10
Jeg vidste du ville vende tilbasge. Hvorfor holder jeg dog ikke min mund lukket? Nu er dette ikke lige min boldgade,men prøv denne:

(Select Nummer From [Tabel 2] Inner join [Tabel 3] On [Tabel 2].Id = [Tabel 3].Id) Where Type = '" & Type & "'"
Avatar billede claesdamlund Nybegynder
30. august 2005 - 16:22 #11
Der manglede selvfølgelig en parantes :0)

Fejlen skyldes muligvis feltnavnet Id, som i visse sammenhænge er et reserveret ord. Prøv at ændre sætningen til "...On [Tabel 2].[Id] = [Tabel 3].[Id]..."
Dermed burde Access ikke misforstå det som en property.
Ellers kan du prøve at ændre feltnavnene i Tabel 2 og Tabel 3 - "Id" som feltnavne er under alle omstændigheder skidt navngivning ;0)
Avatar billede claesdamlund Nybegynder
30. august 2005 - 16:26 #12
molleren - jeg burde måske lige sige at det var din parantes som er lige i skabet.
Den rigtige kode burde se sådan ud:

Me.RecordSource = "Select * From [Tabel 1] Where Nummer In(Select Nummer From [Tabel 2] Inner join [Tabel 3] On [Tabel 2].Id = [Tabel 3].Id Where Type = '" & Type & "')"
Me.Requery

Her forudsættes i øvrigt at din Type-komboboks returnerer en teksstreng?
Avatar billede mugs Novice
30. august 2005 - 16:28 #13
Avatar billede claesdamlund Nybegynder
30. august 2005 - 21:37 #14
De ti bud er en kendt og sjov hjemmeside, som giver gode råd der (altid) bør efterleves - men beskriver dybest set kun hvad der står på de første 50 sider i enhver Access-lærebog. De ti bud er vel også kendt for de ting den ikke siger (alle primærnøgler bør være baseret på autonummerering, Lookup-fields/kombobokse er ikke sagen i tabeller men er geniale i forms m.v.).
Så siden bør nok kombineres med anden information ;0)
Avatar billede molleren Nybegynder
31. august 2005 - 09:05 #15
Thou shalt not copy and paste other people's code without at least attempting to understand what it does. ?

Men til Claes, følgende ser ud til at virke nu  - jeg indrømmer lige samtidig, at mine tabeller, og feltnavne ikke bruger samme betegnelser som dem jeg har angivet her af pædagogiske årsager - så jeg havde lavet en stavefejl i mit Nummer felt.. Så følgende virker nu:

Me.RecordSource = "Select * From [Tabel 1] Where Nummer In(Select Nummer From [Tabel 2] Inner join [Tabel 3] On [Tabel 2].Id = [Tabel 3].Id Where Type = '" & Type & "')"
Me.Requery

dog skulle jeg i min komboboks under egenskaber, Data, Bundet Kolonne vælge 2, da det er denne der indeholder tekststrengen horudfra der laves en requery.

Så mange tak for hjælpen Claes, det var lige i øjet.
Avatar billede molleren Nybegynder
31. august 2005 - 09:09 #16
Send lige et svar iøvrigt.
Avatar billede mugs Novice
31. august 2005 - 10:03 #17
Claes > Jeg siger ikke siden er perfekt, men hvor mange læser lærebøger? Når jeg lagde linket her er det fordi, vi meget ofte ser feltnavne i f.eks. flere ord og som du er inde på feltnavne der sammenfalder med reserverede ord.

Man bør altid søge information fra flere kilder, og ikke basere sin viden fra een bestemt kilde, og dermed begrænse sig til et menneske's (eller gruppe) holdning.
Avatar billede claesdamlund Nybegynder
31. august 2005 - 11:44 #18
Tak, moelleren.

Og til mugs - godt ord igen ;0) - jeg er 100% enig!
Avatar billede molleren Nybegynder
31. august 2005 - 12:41 #19
Det er nu Molleren og ikke Moelleren ;)

/ Morten (rimer lige lovlig lidt på Molleren, mennøh...)
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