28. maj 2005 - 17:03Der 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.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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å?
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.
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).
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.
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.
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.
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
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.
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.
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.
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.
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.
Helt i orden, de kan jo have deres eget liv. Godt det virker.
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.