30. marts 2004 - 08:51Der er
10 kommentarer og 1 løsning
Søgning vha. listboks
Jeg har brug for hjælp. Jeg har oprettet en access-db med følgende tabeller:
ansat - id - navn - osv.
certifikat - id - navn
og en mange til mange relation ansat_certifikat - ansat_id (del af sammensat nøgle) - certifikat_id (del af sammensat nøgle) - bemærkning
Jeg har fået oprettet en over-/underformular vha. guiden og det fungere fint. Men nu har jeg brug for via en listboks at kunne vælge en til flere certifikater og finde alle de ansatte der matcher søgningen. Resultatet vil jeg gerne have i samme formular, men det er vist for viderekomne. Den hjælp jeg søger skal være skåret ud i pap, min erfaring med formularer er begrænset.
Jeg er ikke helt med på hvad der er Hoved- og underformular. Men hvis Ansat er Hovedformular, og du ønsker at finde alle de ansatte, som har et eller flere givne certifikater, så kan du lave en liste (kaldet f.eks. lstCertifikat), hvor Ansat_ID er den bundet kolonne og lave en knap, som filtrere således:
Dim SQLStr as String Dim Itm as Variant SQLStr = SQLStr & "Ansat.ID IN (" For Each itm In Me!lstCertifikat.ItemsSelected SQLStr = SQLStr & Me!lstCertifikat.ItemData(itm) & ", " Next itm SQLStr = Left(SQLStr, Len(SQLStr) - 2) & "))" If Len(SQLStr) = 0 then Me.Filteron = False Else Me.filter = SQLStr me.Filteron = True endif
(Jeg beklager, hvis beskrivelsen er lidt mangelfuld....der er en del detaljer, som kan være svære at beskrive)
I den første formular jeg har oprettet er ansat i hovedformularen. Men jeg forestiller mig at der i den nye hovedformular er en listboks med alle certifikater og en knap der starter søgningen. I underformularen kommer alle ansatte frem der matcher søgningen. Kan jeg i første omgang lave formularen vha. guiden og tilrette hovedformularen med en listboks, eller er det helt forkert? Den kodestump du har skrevet, skal den på knappens onclick-hændelse?
Du kan godt bruge koden i den ny formular, som du har bekrevet. En mindre rettelse dog: Dim SQLStr as String Dim Itm as Variant SQLStr = SQLStr & "Ansat.ID IN (" For Each itm In Me!lstCertifikat.ItemsSelected SQLStr = SQLStr & Me!lstCertifikat.ItemData(itm) & ", " Next itm SQLStr = Left(SQLStr, Len(SQLStr) - 2) & "))" If Len(SQLStr) = 0 then Me!Ansat.Form.Filteron = False Else Me!Ansat.Form.filter = SQLStr me!Ansat.Form.Filteron = True endif
...hvor "Ansat" er navnet på dit subform-objekt.
Listboksens "rækkekilde" skal se nogenlunde således ud: Select Ansat_ID, Navn From Ansat_Certifikat Inner join Certifikat on Ansat_Certifikat.certifikat_ID = Certifikat.ID Listboksens "Antal kolonner" = 2 Listboksens "Bundet kolonne" = 1 Listboksens "Kolonnebredde" = 0
jensen363 jeg har læst spørgsmålet, jeg har faktisk læst mange uden at blive klogere.
thomasjepsen, jeg fatter intet. Da jeg læste det du har skrevet tænkte jeg, ok bare det, men når jeg piller ved formularen, så er jeg på herrens mark. Kan jeg lokke dig til at lave et eksempel eller må jeg sende min lille base til dig?
jensen363, mit problem er at jeg åbentbart ikke fatter en pind. Eneste erfaring jeg har med formularer er via guiden og meget små og simple tilretninger.
selv tak...jeg har lige sendt dig en ny med en mindre ændring.
Synes godt om
Ny brugerNybegynder
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.