30. maj 2001 - 15:57Der er
18 kommentarer og 1 løsning
Newbie i access
Hej Eksperter
Jeg har 2 tabeller med en 1 til 1 relation !!! Jeg laver 2 formularer, en til hver tabel. Når man har indtastet alt i formular 1 skal man kunne trykke på en knap så \"ref_nr\" bliver sendt fra tabel 1 over i tabel 2 og samtidig åbner formular 2. Der skal være en forbindelse mellem de 2 tabeller hele tiden
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Dim Rst As Recordset, Db As Database Set Rst = DBEngine.Workspaces(0).Databases(0).OpenRecordset(\"tabel 2\") With Rst .AddNew .Fields![ref_nr] = ref_nr .Update End With
Hej madsnn. \"Variabelerklæringer:\" Dim Rst As Recordset, Db As Database
\"Definerer variablen Rst og åbner tabel2\" Set Rst = DBEngine.Workspaces(0).Databases(0).OpenRecordset(\"tabel 2\")
\"Med variablen Rst\" With Rst \"Gør den nu åbne tabel2 klar til opdatering\" .AddNew \"Overfører indholdet af feltet [ref_nr] i tabel1 til feltet ref_nr i tabel2\" .Fields![ref_nr] = ref_nr \"tabel2 opdateres med den nye post\" .Update \"Afslutter with-proceduren\" End With
Efter denne linie kan du indsætte endnu en linie der åbner formular2:
DoCmd.OpenForm \"formular2\"
hvor DoCmd. er et objekt i Access-objektbiblioteket. DoCmd benyttes til en lang række handlinger som at åbne tabeller, rapporter, formularer m.v.
På formular2 kan du endvidere lave en ny kommandoknap hvor du indsætter en hændelsesprocedüre i Click:
Docmd.Close
der lukker den aktive formular og sender dig tilbage til det sted hvor du kom fra.
Når du i dit kodevindue skriver DoCmd., så læh mærke til hvad der sker når du sætter dit punktum, der åbnes et dropdown vindue, der giver dig en oversigt over alle metoderne o DoCmd-objektet. Når du taster et bogstav vil markøren stille sig på den første metode der begynder med dette bogstev. Du kan vælge metoden ved at trykke Enter.
Håber det bragte dig en skridt videre. Ellers må du vende tilbage.
Dette har intet med en forbindelse mellem tabellerne. Når du taler om forbindelse må du mene relationer. Uanset om du har eller ikke har relationer mellem dine tabeller virker koden altid.
Jeg kan godt se, at du i dit spørgsmål skriver, at der skal være forbindelse mellem tabellerne. Hvorfor?
En \"With\" procedure indledes med ordet \"With\", så er vi nødt til at slutte proceduren med ordene \"End With\". På samme måde som f.eks en \"If..Then\" sætning altid skal afsluttes med \"End If\".
Lad mig antage, at din formular1 refererer til tabel1 og formular2 tio tabel2. I formular1 laver du en kommandoknap, åbner dens kodevindue og i vinduets øverste højre side ser du en dropdown liste som du ruller ned i til du møder ordet Click. Det vælger du og markøren stiller sig i kommandoknappens click-procedure, hvor Access allerede har lavet en \"procedurekrop\". Imellem disse 2 linier indsætter du den procedure jeg har sendt dig.
Det betyder nu, ar proceduren bliver kørt hver gang du klikker på kommandoknappen.
Hvis du også indsætter linien DoCmd.OpenForm vil formular2 blive åbnet. Du kan på formular2 også indsætte en kommandoknap og i dennes Click-procedure indsætte kommandoen DoCmd.Close hvorefter formular2 bliver lukket, og du returnerer til formular1.
Husk: Du behøver ikke at taste koden selv. Kopier direkte her fra siden, og indsæt i dine formularers kodevindue.
De 2 tabeller skal hænge sammen fordi de engang var 1 tabel hvori der var meget spildt plads. Så det skal virke som indtastning og som opslag, så hvis man åbner post 2 i formular 1 og trykker på knappen så skal den komme frem med formular 2 som viser de tilhørende data (sammen kædet af ref_nr\'et) Det kan godt være at jeg har vildledt dig, men det har ikke været med vilje.
Og jeg har indsat din kode og det virker ikke, jeg får en fejl(Invalid use of property) her: .Fields! [Refnr] = Ref_nr det er \"Ref_nr\" der er fejlen, men det hedder feltet/posten i den tabel2.
Hej igen Vildledt og vejledning! Det kan være noget abstrakt at beskrive disse emner.
I dit spørgsmål staver du feltnavnene med småt (ref_nr), nu staver du dem med stort (Ref_nr), selv om det ikke burde den være fejlmeddelelse du får, bør du kontrollere stavemåden. Jeg sidder på mit arbejde og kan ikke på denne maskine kontrollere procedürerne. Det kan jeg først når jeg kommer hjem. Du kan evt. maile databasen til mig på:
mugs@get2net.dk
Du er naturligvis velkommen til at tømme den for data, blot du indtaster nogle opdigtede data jeg kan arbejde med.
Men mads - der er noget i dit seneste svar der fortæller mig, at vi måske kører ad en forkert vej. Når du taler om en åben formular1, og ved et klik på en kommandoknap skal se tilknyttede data i formular 2, så taler vi slet ikke om VBA-procedürer, men derimod om sammenkædede formularer, der fungerer netop på den måde. Du laver sammenkædede formularer ved at åbne databasevinduet og lave en ny formular. Følg guiden der tilbyder forskellige muligheder.
En venlig sjæl har lånt mig en maskine og jeg har villedt dig.
I linien:.Fields...
Har jeg byttet om på felterne, det skal være:
.Fields![ref_nr] = refnr
Ordet Fields skal selvfølgelig pege på det felt der skal opdateres, og vi har jo tidligere i proceduren åbnet tabel2. Jeg har lavet en db med de samme felter og procedure og det virker.
I dit svar skriver du, at posten kun skal tilføjes hvis den ikke allerede eksisterer. Hvis den eksistere skal du få en meddelelse, idet feltet jo er unik nøgle.
Hvis det ikke er unik nøgle skal vi ind i en Dcount procedure, men det kan vi også lave.
Jeg skal til et møde her kl 13, og er ikke på kontoret mere idag. Men afventer din tilbagemelding når jeg kommer hjem.
Ja - det kan meget vel være fejlen. Som jeg skrev igår kl 2025 gælder koden for Access97. Jeg kender intet til Access2000 bortset fra at den kan konvertere fra og til 97. Prøv eventuelt at tage en kopi og konvertere den til 97 og se om du stadig har fejlen.
Jeg har afprøvet koden i Access97, og den virker. Jeg har dog tidligere kopieret koder oprettet i 2000 til 97 uden problemer.
Du er stadig velkommen til at sende mig databasen, men blot skal du huske at konvertere den til 97.
Jeg har nærlæst vores korrespondance og måske er vi gået gal af hinanden fra starten. I dit oprindelige spørgsmål skriver du, at \"ref_nr\" sendes fra tabel1 til tabel2, det forstår jeg sådan, at det er en ny post du opretter i tabel1 og derefter ønsker den oprettet i tabel2. Den kode jeg har sendt dig opretter netop en ny post i tabel2 efter du har oprettet den i tabel1.
Har du kontrolleret for stavefejl? I dit sidste svar staver du feltnavnene med stort \"R\". Er det korrekt.
I de første mails skrev jeg \"ref_nr\", men det var før jeg havde checket hvad de hed. Nu har heg givet dem forskellige navne så jeg kan kende forskel på dem.
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.