Avatar billede visto Guru
28. maj 2005 - 17:03 Der er 18 kommentarer og
1 løsning

Slå op i liste

Jeg vil gerne lave en database hvor grundtabel og -formular udelukkende består af en række personer.
En undertabel og -formular skal knyttes til tabellen i en en-til-mange relation.
Det skal være sådan, at jeg i grundformularen kan vælge en af disse personer på en liste. Hvordan gør man det?

Jeg vil helst have funktionen implementeret på tabel-niveau, så jeg er fri for at skulle lave den på formularniveau, hvis jeg senere vil lave formularen om.
Avatar billede jesperfjoelner Nybegynder
28. maj 2005 - 17:13 #1
Du kan mig bekendt ikke lave det på tabelniveau, således at du fra formularen kan vælge i en dropdown og så gå til den post.
Normalt angiver man jo værdien i et bagvedliggende tabelfelt, når man vælger noget i den dropdown.

Hvis du har wizards/guides slået til kan oprette en comboboks på din formular. Under guide kan du vælge at comboboksen skal finde en post på baggrund af den valgte værdi. Dvs. den hopper til det navn du vælger i dropdownboksen.

Hvis så blot din underformular er knyttet til hovedformularen vil indholdet i underformularen jo automatisk skifte når du skifter post.
Er det så'n noget du tænker på?
Avatar billede visto Guru
28. maj 2005 - 17:32 #2
Ja, det er præcis sådan noget jeg tænker på. Jeg har - mener jeg - guides slået til. Hvordan kommer jeg så videre herfra? Kan ikke finde nogen guide til at oprette comboboksen med.
Avatar billede jesperfjoelner Nybegynder
28. maj 2005 - 17:48 #3
Da du oprettede din formular har den sikkert automatisk oprettet felterne for dig på hovedformularen. For at dette kan virke skal du oprette en ny combobox til den combo, som skal slå op for dig.

Jeg tror det kunne virke således:
Åben din hovedformular >
gå til designvisning >
hav værktøjskassen fremme (den er der nok) >
check at "tryllestaven" er valgt dvs. guides slået til >
vælg værktøjet "combobox" for at lave din egen comboboks >
når du har tegnet den på formularen skulle guiden "Combo box wizard" åbne >
der er 3 muligheder i, hvor af den ene er "Find en post i formularen" baseret på den værdi jeg vælger (eller noget i den stil).

Prøv at se om du kan komme tættere på med det.
Avatar billede visto Guru
28. maj 2005 - 18:00 #4
Yeps - det virker. Mange tak for hjælpen.

Eneste lille æstetisk biting, der generer mig: Når man åbner formularer er feltet med listen blankt (fordi der endnu ikke er foretaget et valg) - hvilket er OK - men i underformularen vises den første post tilknyttet den første person.
Det ligger udenfor spørgsmålet, som er helt tilfredsstillende besvaret, men hvis jeg kunne få et bud på at undgå denne uskønhed, så ville jeg være glad.
Avatar billede jesperfjoelner Nybegynder
28. maj 2005 - 18:39 #5
Ja, det er jo fordi den første post automatisk er valgt når hovedformularen åbnes.

Har du nogle felter på hovedformularen ud over din nye comboboks f.eks. navn eller fornavn eller efternavn?
Er det værdien fra disse felter du vil have vist som tekst i comboboksen?

En mulighed er også at skjule hele underformularen indtil brugeren har valgt noget i comboboksen første gang.

Har du brugt VBA-editoren og programmering i Access før?

Lad mig lige høre om disse ting, så kan jeg guide dig igennem til noget, der virker.
Avatar billede visto Guru
28. maj 2005 - 18:56 #6
Aktuelt har jeg udelukkende komboboksen med person-initialer i hovedformularen, hvilket jeg tror vil række. Så jeg tror at løsningen med ikke at vise noget i underformularer indtil jeg har valgt noget i comboboksen første gang vil passe mig bedst.
Desværre har jeg ikke brugt VBA og programmering i Acces før.
Avatar billede visto Guru
28. maj 2005 - 19:01 #7
Hvis det bliver for besværligt, kunne en brugbar løsning være, at hovedformularen åbnede på et bestemt initial, X, i stedet for at åbne på en blank.
Avatar billede visto Guru
28. maj 2005 - 19:02 #8
Ja, sidstnævnte løsning ville faktisk passe meget fint.
Avatar billede jesperfjoelner Nybegynder
28. maj 2005 - 19:09 #9
Det er nu ikke besværligt at skjule underformularen. Det kan du gøre således:

Åben formularen i designvisning ->
Vælg dit underformularobjekt, højreklik og vælg egenskaber (vær opmærksom på ikke at vælge den formular, der sidder i underformularobjektet, men selve underformularobjektet. Hvis du trykket helt i kanten at underformularen, bør du kunne vælge underformularobjektet) >
Under egenskaber skal synlig sættes til Nej.
Så skulle underformularen være usynlig når du åbner hovedformularen.

Nu skal vi det ordnet, så den bliver synlig når der er valgt noget i comboboksen.
Højreklik på comboboksen og vælg egenskaber >
Vælg fanen hændelser og sættes markøren i linjen "efter opdatering" >
Tryk på knappen med ... >
I boksen vælger du "Code builder" (nr. 3) >
Du er nu inde i Visual Basic editoren.
Markøren skulle stå mellem to linjer, der hedder noget med:

Private Sub Comboboksnavn_afterupdate()

End Sub

Imellem disse to linjer skriver du
Me.navnetpåditunderformularobjekt.visible=True

Så det bliver til

Private Sub Comboboksnavn_afterupdate()
  Me.navnetpåditunderformularobjekt.visible=True
End Sub

Vi kan prøve den først og se om det virker.
Avatar billede jesperfjoelner Nybegynder
28. maj 2005 - 19:19 #10
Jeg skulle lige nævne at du så selvfølgelig skal lukke VBA-editoren igen, så du kommer tilbage til access og tjekke om det virker.
Avatar billede visto Guru
28. maj 2005 - 20:16 #11
Som jeg skrev, så ville løsningen med at hovedformularen åbnede på person X faktisk være fin, måske endda den bedste, så hvis du gider, så lad mig lige få den løsning.
Avatar billede jesperfjoelner Nybegynder
28. maj 2005 - 21:50 #12
Jeg kigger lige på det, vender lige tilbage.
Avatar billede visto Guru
28. maj 2005 - 21:52 #13
Hvor er du hjælpsom, mange tak!
Avatar billede jesperfjoelner Nybegynder
29. maj 2005 - 01:41 #14
Hvis du blot skal have vist noget i comboen kan man sætte dens default/standardværdi til "X".
Det vil dog nok ikke ændre den tilhørende underformular, men så er teksten ændret i comboboksen.
Avatar billede visto Guru
29. maj 2005 - 08:10 #15
Ja, den med standardværdien havde jeg prøvet, men som du ganske rigtigt skriver, så ændrer det ikke underformularer, som stadig viser første post til første person. Meningen var, at den skulle vise den første post tilhørende X.
Avatar billede jesperfjoelner Nybegynder
29. maj 2005 - 12:20 #16
Hvis du har sat standardværdien for combo'en til f.eks. X tror jeg du kan få opdateret formularen til X's værdier ved følgende.
Vi kommer ikke uden om at gå ind i VBA-editoren.

Ind formularens designvisning >
højreklik øverst i formularens venstre hjørne og vælg egenskaber >
du burde nu have formularens egenskaber fremme >
vælg fanen hændelser >
find hændelsen OnLoad/VedIndlæsning (engelsk her, du kører måske dansk) >
tryk på ... og vælg codebuilder >
Inde i VBA-editoren skal der stå

Private Sub Form_Load()
NavnPåDinComboboks_AfterUpdate
End Sub

Luk VBA-editoren og test.

Din combos værdi har du sat via standardværdien. Den lille stump køre gør det samme som hvis du selv havde valgt værdien (f.eks. X) fra listen. Altså "kører" opdateringen. Og det sker lige akkurat som formularen åbnes.
Som det er nu vil den altid starte på X.
Prøv at se om det virker.
Avatar billede jesperfjoelner Nybegynder
29. maj 2005 - 12:35 #17
Private Sub Form_Load()
Call NavnPåDinComboboks_AfterUpdate
End Sub

skal der stå.
Avatar billede visto Guru
29. maj 2005 - 17:47 #18
Hm, nu stiger kunsten. Jeg har løbende arbejdet på kryds og tværs med basen, og aktuelt vises posterne tilhørende X som jeg ønskede, uden at jeg har gjort som du har beskrevet. Lidt hokus pokus.
Så jeg får ikke afprøvet det du skriver i denne omgang, men er glad for at du har villet hjælpe, og ved så hvor jeg skal kigge, hvis problemet opstår igen.
Avatar billede jesperfjoelner Nybegynder
29. maj 2005 - 17:49 #19
Helt i orden, de kan jo have deres eget liv.
Godt det virker.
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