Avatar billede wale Nybegynder
27. april 2005 - 22:20 Der er 45 kommentarer og
1 løsning

Hvordan gemmes flere værdier fra en liste

Aloha
Jeg er lige begyndt at lære access og aner ikke ret meget om det. Jeg skal lave en formular hvor jeg har en liste, hvor der er mulighed for at vælge flere værdier på listen. Mit spørgsmål er så hvordan gør jeg det?
Har fundet frem til det er noget med at oprette to tabeller og lave nogle relationer. Er som sagt lige begyndt på access så vil gerne have det penslet helt ud.
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 22:28 #1
Hvad er det for noget du gerne vil registrere? Har du oprettet tabellerne?
Hvis du kommer med lidt flere detaljer kan jeg lave et eksempel til dig.
Avatar billede wale Nybegynder
27. april 2005 - 22:33 #2
Jeg har oprettet en hovedtabel. Hvor der gemmes forskellige data på medlemmer i en klub. Vil så gerne have en liste i en formular hvor det er muligt at vælge to værdier. Skal så kunne vælge flere af følgende:
Sponsor
Medlem a
Medlem b
Passiv medlem
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 22:40 #3
Ok. Så jeg går ud fra at din hovedtabel holder medlemmerne i klubben. (Du kan evt. tænke på om en ting som "passivt medlem" i stedet skal registreres i en kolonne i hovedtabellen).

Men altså:
Den nemmeste måde at lave det på er med en fortløbende underformular inde i hovedformularen.
Hvis din hovedtabel hedder Medlemmer og har felterne medlemID (autonummer) og navn (tekst).
Så skal du derudover have en tabel der fx. kunne hedde Medlemstyper med felterne medlemstypeID (autonummer) og medlemstype (tekst). Det er i denne tabel at du tilføjer nye typer af medlemmer hvis du finder på flere end sponster, medlem A, medlem B og passivt medlem.

Og så skal du have en tabel til at holde information om hvilke medlemmer der er hvilke typer. Den kunne hedde MedlemTyper og have felterne ID (autonummer), typeID (nummer) og medlemID (nummer).
Det er denne tabel som du skal lave en fortløbende formular ud fra, som skal indsættes som underformular på din hovedformular.
Kan du følge det?
Avatar billede wale Nybegynder
27. april 2005 - 22:45 #4
Japs er med, så langt. dvs. der skal laves en mange til mange relation er det korrekt?
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 22:48 #5
Ja det må det blive. For det samme medlem kan være af flere medlemstyper og den samme medlemstype kan høre til flere medlemmer.
Avatar billede wale Nybegynder
27. april 2005 - 22:55 #6
hvordan får jeg så det hele kædet sammen så jeg kan gemme værdierne?
Så jeg ved hjælp af en formular kan bladre frem og tilbage mellem de enkelte poster. og der fx. for en post er valgt sponsor og medlem b. og for den næste er valgt sponsor og medlem a
ved ik om det giver mening :-)
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:06 #7
Jo jo det giver mening.
Du skal have en hovedformular baseret på tabellen Medlemmer. Har du det? Vi kan kalde den frmMedlemmer.
Så skal du have lavet en fortløbende formular baseret på tabellen MedlemTyper. Den kan vi kalde frmSubMedlemTyper (jeg bruger en navnekonvention, men det er ligemeget hvad du kalder dem).
Start med at oprette de to formularer.

Nu skal vi have frmSubMedlemTyper indlejret som underformular i hovedformularen. Der er et par måder at gøre det på men du kan fx.:
Åbne frmMedlemmer i designvisning.
Træk frmSubMedlemTyper fra databasevinduet direkte ind på det område i frmMedlemmer, hvor du vil have underformularen skal sidde.
Kan du få de ting til at virke?
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:17 #8
Når du er kommet så langt skal underformularen nok rettes noget til. Det er fordi i tabellen MedlemmerTyper, som underformularen er baseret på gemmer du jo kun tal hhv. medlemsID'er og typeID'er. Og det er jo ikke til at finde ud af hvad der er hvad.
Så det tekstfelt på underformularen, der indeholder tallet for medlemstypeID'et kan fx. laves om til en comboboks (en dropdown). (højreklik på dem og så kan den laves om til encombobokse.
Til sidst skal du have rettet datakilden for comboboksen til så du får en pænt udseende liste med sponser,medlemA,medlemB osv. som du kan vælge fra.

Når der er gjort skal datakilden til disse
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:17 #9
sidste linje var en fejl.
Avatar billede wale Nybegynder
27. april 2005 - 23:18 #10
har oprettet tabellene, men kan ikke helt følge den næst sidste linie. " hvor under formularen skal sidde". er det i søjlen der hedder medlemstype?
Avatar billede wale Nybegynder
27. april 2005 - 23:21 #11
hov fik ikke se de nye indlæg inden jeg sendte det sidste prøver lige lidt mere.
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:22 #12
Nå ja jeg tænkte bare at du på din hovedformular frmMedlemmer øverst har felter til
medlemID og navn som jo er i tabellen Medlemmer.
Så skal du bare lige have lavet frmMedlemmer lidt større så der er plads til den underformular der skal indsættes.
Har du oprettet en fortløbende formular baseret på tabellen MedlemTyper ?
Avatar billede wale Nybegynder
27. april 2005 - 23:23 #13
kan du lave et eksempel og sende den til mig på email. tror det er nemmere at forstå hvis man har det i praksis. min mail er viggov@ofir.dk
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:24 #14
jep øjeblik...
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:25 #15
giv mig lige 3 min.
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:34 #16
Jeg har lige sendt den afsted via hotmail - det tager måske et par min. før den er der.
Avatar billede wale Nybegynder
27. april 2005 - 23:42 #17
Kunne man lave det samme med en liste boks?
Avatar billede wale Nybegynder
27. april 2005 - 23:42 #18
hvor man så markerede de valgte værdier.
Avatar billede wale Nybegynder
27. april 2005 - 23:44 #19
er det ikke noget med at ændre den til en liste boks og så sætte flere markeringer til simpel.
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:49 #20
ja det kan man godt men det er lidt mere langhåret.
En normal listbox kan man jo referere til som Me!listboxnavn som giver værdien af den markerede linje.
En multiselect listbox som du vil have kan ikke refereres på den måde.
Dens værdier ligger i et variant array i egenskab "itemsselected" for den listbox. Du kan læse om det i VBA hjælpefilen. Hvis ikke du er hjemme i vba-programmering vil jeg ikke anbefale det. En løsning med fortløbende underformular er standardløsningen, som virker meget stabilt.

Med en multiselect listbox skal man
1) Markere de værdier man vil bruge
2) Med kode gennemløbe listboxens linjer og finde ud af hvilke der er valgt.
3) For hver valgt linje via kode tilføje nye poster i MedlemTyper-tabellen.
4) Når du klikker gennem posterne i hovedformularen skal du under hændelsen "Aktuel" (OnCurrent) lave noget kode, som finder de poster i tabellen MedlemTyper som hoved til det medlemID og via kode markere de linjer i listboxen som korresponderer hermed.
Det er en noget mere omstændig løsning.
Avatar billede wale Nybegynder
27. april 2005 - 23:55 #21
En sådan løsning ville jeg gerne komme frem til, men kan godt se det virker meget mere lang håret, men når det først er lavet vil det efter min mening lette indtastningen af nye poster en del. Hvor svært er det med den vba, kan noget php i forvejen men ligner vel ikke sindsygt meget.
Avatar billede jesperfjoelner Nybegynder
27. april 2005 - 23:57 #22
Jeg har forstået det rigtig nok ikke? Med en multiselect listbox?
Jeg kan måske lige lavet et eksempel.
Avatar billede wale Nybegynder
27. april 2005 - 23:59 #23
Havde en listeboks i tankerne, men hvis dette er helt umulig må man vel droppe det.
Avatar billede wale Nybegynder
28. april 2005 - 00:00 #24
ser lige om jeg kan finde en boks der ligner
Avatar billede jesperfjoelner Nybegynder
28. april 2005 - 00:01 #25
Man kan godt lave det, men jeg magter det ikke lige i aften.
Jeg må vende tilbage til det i morgen :-)
Avatar billede wale Nybegynder
28. april 2005 - 00:13 #26
Har oprettet en boks som jeg havde tænkt mig, hedder formular1. Det er så her jeg vil gemme forskille valg for hver medlem. Jeg har sendt den på mail. Vil også sove, og siger mange tak for hjælpen for i dag. back tomorrow.
Avatar billede jesperfjoelner Nybegynder
28. april 2005 - 00:17 #27
jeg tænker lige lidt over det, men jeg vil sige at du skal være godt hjemme i vba for at du lave og debugge den løsning. Hvis ikke vil jeg foreslå den fortløbende model.
Avatar billede jesperfjoelner Nybegynder
28. april 2005 - 00:21 #28
ok jeg kan se du har indsat listboxen ved siden af den fortløbende formular - men det er meningen at kun listboxen skal bruges til det ikke? Du vil af med den fortløbende?
Avatar billede wale Nybegynder
28. april 2005 - 00:27 #29
ja præcis. Tror jeg skal ud og have fat i nogle bøger om vba :-). Vil vende tilbage i morgen...
Avatar billede wale Nybegynder
28. april 2005 - 20:58 #30
Dag to på opgaven. Sidder og bakser med liste boksen. Og prøver at hive noget kode sammen ser hvad der sker
Avatar billede wale Nybegynder
28. april 2005 - 21:05 #31
tror at dette indlæg er noget af det samme jeg leder efter, men kan ikke helt følge koden.
http://eksperten.dk/spm/547236
Avatar billede jesperfjoelner Nybegynder
28. april 2005 - 21:17 #32
Jeg har sendt dig et eksempel, hvor formularen frmMedlemmer2 virker lidt af vejen. Når du opretter nye poster indsætter den poster i den relaterede tabel svarende til din markering i listboxen. Og når du klikker igennem de allerede oprettede skifter markeringerne i listboxen afhængig af hvilke typer medlemmet hører under.

Det der mangler er at hvis man skifter markeringer i en allerede oprettet post skal det rettes i den relaterede tabel.
Avatar billede wale Nybegynder
28. april 2005 - 21:29 #33
Ja det ligner mere det jeg havde i tankerne. Jeg kommer mere og mere på sporet. fremragende..
Er det ikke nogle sql quarys man skal have fat i for at komme videre
Avatar billede jesperfjoelner Nybegynder
28. april 2005 - 21:52 #34
Inden du går videre fra en post til den næste post skal du tjekke om markeringerne på listen passer med der der ligger i tabellen MedlemmerTyper for medlemmet. Hvis det gør passer det - hvis det ikke gør skal du opdatere tabellen MedlemmerTyper så det passer med markeringerne.
Det kunne man gøre ved at slette det der ligger i forvejen i MedlemmerTyper, men det vil give en masse unødige deletes. I stedet skal du løbe både listbox og tabel igennem, finde forskellen og opdatere MedlemmerTyper tilsvarende.

Alt dette kan enten gøres hver gang en allerede oprettet post forlades eller evt. hver gang der klikkes på listboxen. I så fald slipper du for det når posten forlades.
Avatar billede wale Nybegynder
28. april 2005 - 22:17 #35
yeahha havde sq ikke troet det var så kringlet at lave noget så simplet
Avatar billede jesperfjoelner Nybegynder
28. april 2005 - 22:28 #36
Jamen du ville jo ikke have den simple løsning :-)
Jeg ved ikke om der er andre der kan finde på noget smartere, for så vil jeg gerne høre om det.
Avatar billede wale Nybegynder
28. april 2005 - 22:33 #37
hehe det er rigtigt. Men når man sådan lige tænker over hvordan det bliver når det skal bruges virker det rimeligt simpelt. :-) Sådan er det tit med det dumme programmering.
Tror jeg vil studere lidt vba og så kommer det forhåbentligt lige til mig en dag.
Avatar billede jesperfjoelner Nybegynder
28. april 2005 - 22:50 #38
Normalt kan man jo referere til en listbox med den værdi der er i den bagvedliggende tabel. Men det du beder om er flere værdier fra en tabel i samme listbox og der er det ikke ligetil. En multiselect listbox har ikke en værdi ligesom en enkelt-select listbox har det.
Men vba er ikke et svært sprog og man bliver hurtig produktiv, så det kan anbefales.
Avatar billede jesperfjoelner Nybegynder
29. april 2005 - 19:43 #39
Har du fået noget til tilfredsstillende til at virke?
Avatar billede wale Nybegynder
29. april 2005 - 19:54 #40
Ja har jeg, men gør det ved at slette de valgte poster. En lille ting hvordan får man den til at lade være med at spørge om den skal slætte/oprette en række.

Siger mange tak for hjælpen :-) var nice
Avatar billede wale Nybegynder
29. april 2005 - 19:55 #41
har tykket accepter svar men sker sq ikke det store. prøv lige oprette et svar så
Avatar billede wale Nybegynder
29. april 2005 - 19:56 #42
skie godt
Avatar billede jesperfjoelner Nybegynder
29. april 2005 - 21:07 #43
Ja, det var så lidt og selv tak.
Bruger du kommandoen
docmd.runsql når du skal slette og oprette?

Nogle herinde anbefaler dette:
docmd.setwarnings=false
docmd.runsql...sql-sætning
docmd.setwarnings=true
og det virker (det er meget vigtigt at man sætter warnings tilbage til True efter, da ellers har deaktiveret det overalt i databasen).

Men den bedste måde er:
currentdb.execute(SQL-sætning),dbFailOnError
(hurtigere ved loops og spørger ikke om noget)
Avatar billede jesperfjoelner Nybegynder
29. april 2005 - 21:18 #44
og hvis det skal køres i loops så

Dim db as dao.database
set db = currentdb

do....
  db.execute(SQL),dbFailOnError
loop
Avatar billede wale Nybegynder
30. april 2005 - 12:51 #45
lækkert det virker :-)
Avatar billede jesperfjoelner Nybegynder
30. april 2005 - 14:41 #46
Alle tiders :-)
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