08. april 2005 - 14:06Der er
3 kommentarer og 3 løsninger
Indtastninger af data i flere tabeller
Jeg er ret grøn i Access.
Hvordan gør man så man kan indtaste data i to tabeller samtidig? F.eks. kan man have to tabeller – en med personer – heri gadenavn og postnummer og en postnummertabel - postnumre og bynavne. Relationen er en mange-til-en.
Nu ønsker jeg så at indtaste adressen på en person. Her har jeg brugt en formular. I formularen indgår adresse og postnummer fra persontabellen samt bynavn fra postnummer tabellen. Hvis jeg indtaster en person hvis postnummer allerede er i postnummertabellen er det fint. Men hvis jeg indtaster en person hvis postnummer ikke er i tabellen går det galt. Relationen skabes ikke.
Jeg ved godt man kan finde en tabel med alle postnumre og lægge den i databasen, men det ønsker jeg ikke, da mit spørgsmål er generelt og gælder også i andre situationer. Postnummer eksemplet er bare for at forenkle spørgsmålet.
Det er jo netop fordi denne person's postnr ikke eksisterer i postnummertabellen. Når du indtaster på mangesiden, skal den jo kunne finde den relaterede post på eensiden.
Hvis du bruger comboxe, kan du i formularen kode dig ud af det og tilføje postnummer til postnummertabellen, men det får du ikke bynavnet af.
Jeg er klar over at det er fordi postnummeret ikke eksistere. Det jeg gerne vil er at brugeren ikke inden han indtaster en ny adresse skal ind i postnummertabellen og se om det postnummer eksistere i forvejen.
I postnummer/adresse eksemplet kan man løse problemet på andre måder, men man kan komme i andre situationer hvor man øbsker at flere tabeller skal opdateres. Spørgsmålet går på en generel opdatering af flere tabeller. Det kan godt være jeg ser det forkert.
Måske er det fynbohans snakker om - nemlig en skjult formular. Men hvordan laver man sådan en?
Jeg kan prøve med et andet eksempel. Det er formentlig helt grundlæggende, men som sagt er jeg helt grøn.
Jeg skal lave en database over kontaktpersoner. En person er tilknyttet én organisation og en organisation har tilknyttet flere personer. Der er en mange-til-en relation.
I ’person’ tabellen ligger kontaktpersonens bl.a. navn og organisationsID (fremmenøgle). I ’organisations’ tabellen ligger adresse, postnummer mm.
En bruger skal indtaste en nye kontaktperson. Man indtaster navn, organisationsID. Hvis organisationen allerede findes i ’organisations’ tabellen indsætter Access selv adresse, postnummer mm. Hvis organisationen ikke allerede er i ’organisations’ tabellen vil jeg gerne have at den nye organisation bliver lagt ind i ’organisation’ tabellen under samme indtastning. Kan det lade sig gøre og hvordan gør man?
Problemstillingen er den helt samme som i postnummer eksemplet. Det håber jeg kan ses – ellers har jeg formuleret mig dårligt :-)
Ja, så er problemet et helt andet. Foreslår alle oplysninger hentes fra en komboboks med alle organisationer. Adresse m.m. for en organisation ligger også i komboboksen, men kan skjules i komboboksen og kan evt. vises for en valgt orgasitation et andet sted på skærmen. Hvordan du gør det kan ses i VIsual Basic hjælp ved at slå op under Column. Hvis organisationen ikke er på listen må brugeren med en knap åbne en popup-formular, hvor nye poster og eventuelle rettelser kan inddateres. Lyder måske kompliceret, men er ikke så svært som det lyder. Først laver du en almindelig formular til organisationsdata. Husk en knap på formularen, som hedder "Retur", som bringer brugeren tilbage til hovedformularen. Når det hele virker afmærkes punkterne i egenskabsarket med "Ja" ud for de 2 punkter "Popup" og "Modal". Husk endelig returkappen før du afmærker med ja! Formularen åbnes med en Makro med 2 punkter: ÅbnFormular og Tilpas størrelse. Med det sidste punkt kan du tilpasse størrelse og placering for popup-formularen.
Som fynbohans foreslår jeg også en combo. Denne har en hændelse der hedder "VedIkkepåListe", som udfører en handling hvis du indtaster en værdi, som ikke findes i combo'ens datakilde. Koden ser således ud. En forudsætning er at combo'ens egenskab BegrænsTilLIste er sat til Ja:
Dim prompt As String DoCmd.SetWarnings False Response = acDataErrContinue prompt = "Denne type findes ikke i listen, ønsker du at oprette den?" If MsgBox(prompt, vbYesNo, "Typen findes ikke!") = vbYes Then DoCmd.RunSQL "INSERT into TABELNAVN (FELTNAVN) VALUES ('" & NewData & "')" Response = acDataErrAdded End If DoCmd.SetWarnings True
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.