Avatar billede lo Nybegynder
08. juli 2004 - 09:24 Der er 36 kommentarer og
1 løsning

Koper fra felt til undertabel

Hejsa!
Jeg har i en database et felt, der indeholder en dato for en udført handling. Denne dato indskrives manuelti feltet . På samme formular, har jeg også en underformular med en tabel indeholdende disse datoer. Det jeg godt kunne tænke mig var, at når jeg skriver en ny dato i det ovenstående handlingsfelt, at denne dato så automatisk kopieres ned i underformularen på en ny række, uden vel at mærke, at slette de datoer, der står der i forvejen. Altså en oversigt over alle de gange, der er udført en handling på den bestemte post i db'en.
Er der nogen, der ved, hvordan dette gøres?
V.H. LO
08. juli 2004 - 09:32 #1
På feltets eller måske endnu bedre: formularens AfterUpdate-hændelse kan du lægge kode som indsætter en ny post i den tabel, som danner grundlag for underformularen:

Docmd.Setwarnings false
docmd.RunSQL "Insert Into [Din underformulartabel] ( [Dato] ) Select " & Me![Dit datofelt på hoedformularen]
Docmd.SetWarnings true

Hvis din underformular indeholder flere nødvendige felter, skal SQL'en se således ud:
docmd.RunSQL "Insert Into [Din underformulartabel] ( [Dato], Felt2, Felt3 ) Select " & Me![Dit datofelt på hoedformularen] & ", værdi2, værdi3"


/Thomas
Avatar billede lo Nybegynder
08. juli 2004 - 09:59 #2
Nu er jeg lidt forvirret....
Jeg ved slet ikke, hvad den der AfterUpdate hændelse er, hvor finder jeg den henne? og hvor er det så, jeg lægger koden ind. Når jeg laver en kode i en forespørgsel, trykker jeg jo bare på vis SQL og lægger det ind der.......
Så er jeg lidt i tvivl om Det du har skrevet som [Dit datofelt på hoedformularen], er det navnet på feltet, eller kontrolelementkilden?
Så vidt jeg kan se, indeholder underformularen kun et nødvendigt felt. Der er selvfølgelig et felt, der binder den sammen med den enkelte post i db'en, men det bliver ikke vist.
Som du nok allerede har fundet ud af, så famler jeg mig tit frem i blinde her, men det plejer altid at lykkes i sidste ende ;)
V.H: LO
08. juli 2004 - 10:07 #3
Ok...vi finder ud af det :o)

I egenskaberne på dit datofelt i hovedformularen, har du en egenskab, som hedder noget med "Ved efter opdatering". Når du stiller markøren i denne egenskab får du en knap med 3 prikker til højre for.
Den åbner en dialogboks, hvor du vælger kodegenerator.

Du er nu i VBA-editoren. Hvis feltet blot hedder Dato, ser koden indtil videre blot således ud:

Private Sub Dato_AfterUpdate()

end Sub

Her skriver du så koden, så der ialt kommer til at stå:

Private Sub Dato_AfterUpdate()
    Docmd.Setwarnings false
    docmd.RunSQL "Insert Into [Din underformulartabel] ( [ID], [Dato] ) Select " & Me!ID & ", " & Me![Dato]
    Docmd.SetWarnings true
    Me![Din underformulartabel].Requery
end Sub

ID og DATO er de 2 felter i underformularen inkl. feltet, som binder dem sammen.
Både Dato og ID er således med i begge tabeller/formularer.

Hjalp det lidt?
Avatar billede lo Nybegynder
08. juli 2004 - 10:34 #4
Ja, det tror jeg...jeg fandt ind til VBA-editoren og har så skrevet koden ovenfor.
Men jeg er stadig lidt i tvivl. ....[Din underformulartabel] ( [ID], [Dato] ) Select " & Me!ID & ", " & Me![Dato]
[ID] og [Dato] er jeg stadig lidt i tvivl om....du skriver det er de to felter i underformularen, inkl feltet som binder dem sammen....
Her tænker jeg så, er det feltet der binder underformularen sammen med selve posten, eller er det, det felt, som datoen skal indsættes i. Og jeg har kun et felt på min underformulartabel - altså datofeltet ( og så selvfølgelig ID'et som binder underformularen sammen med den specifikke post i db'en)
Takker for den foreløbige hjælp :)
/LO
08. juli 2004 - 10:40 #5
ID er netop ID'et som binder formularene sammen og Dato er bare...dato-feltet.

Jeg opdagede forøvrigt lige en skrivefejl. Den sidste linie skal se således ud:
Me![Din underformular].Requery

Hvor [Din underformular] er navnet på dit Underformular-objekt.

Hvis du kan fortælle mig følgende, kan jeg skrive koden ren for dig:
-Navnet på underformular-tabellen
-Navnet på de 2 felter (hvis de hedder noget andet end ID og Dato)
-Navnet på underformular-objektet (det som står i egenskaberne, når du har klikket én gang på underformularen og underformular-rammen er markeret)
-Navnet på Dato- og ID-feltet på hovedformularen (hvis de heller ikke bare er det samme)
Avatar billede lo Nybegynder
08. juli 2004 - 10:53 #6
Hejsa...
Jeg kiggede lige på det, og fandt ud af, at de to ID felter på hhv. undertabel og hovedtabel hed noget forskelligt, jeg havde bare kodet dem sammen med en relation.....jeg prøver lige at rette det til, og ser, om det hjælper...
Avatar billede lo Nybegynder
08. juli 2004 - 11:06 #7
Hmm og det gjorde det måske. Nu kommer der sådan en box op, når man starter formularen, der spørger efter det gamle ID-nr på underformularen. Umiddelbart kan jeg ikke se, at der er nogle steder, jeg mangler at rette det......
08. juli 2004 - 11:08 #8
Prøv at tjekke egenskaberne Underordnedefelter og Overordnedefelter på underformularen. Hvis du har ændret et af feltnavnene, skal du også rette her...?
Avatar billede lo Nybegynder
08. juli 2004 - 11:12 #9
Kan det gennemføres, hvis de to ID-felter er forskellige?
08. juli 2004 - 11:14 #10
ja ja, man skal bare sørge for at referere til dem rigtigt:

docmd.RunSQL "Insert Into [Din underformulartabel] ( [ID i undertabel], [Dato i undertabel] ) Select " & Me![ID i hovedtabel] & ", " & Me![Dato i hovedtabel]
Avatar billede lo Nybegynder
08. juli 2004 - 11:18 #11
ok....så tror jeg nemlig, at jeg henter en version fra i gåraftes ind, og prøver det i den....for nu har jeg vist fået rodet rigtig rundt i den anden desværre... typisk mig :)
08. juli 2004 - 11:19 #12
ja, det kan ofte være uoverskueligt at ændre et feltnavn ;)
Avatar billede lo Nybegynder
08. juli 2004 - 11:46 #13
ok. Nu skriver den ingen fejl eller noget....men jeg synes ikke den indsætter datoen i feltet..........
Min kode ser sådan her ud:

Private Sub Tekst73_AfterUpdate()
    DoCmd.SetWarnings False
    DoCmd.RunSQL "Insert Into [Servicedato_undertabel] ( [aftalenr], [Servicesdato] ) Select " & Me!Aftale_nr & ", " & Me![Udf_ser]
    DoCmd.SetWarnings True
    Me![Servicedato_undertabel underformular].Requery
End Sub

Jeg kan sagtens indstaste en dato i feltet, men den sættes ikke ind i tabellen, heller ikke når jeg prøver at skrive en ny  dato i feltet - da overskrives den gamle dato bare....
08. juli 2004 - 11:49 #14
prøv at fjerne (eller sæt ' foran) linien DoCmd.SetWarnings False

Derved skulle du gerne få besked om om indsættelsesforespørgslen går godt eller skidt.
Avatar billede lo Nybegynder
08. juli 2004 - 11:56 #15
Hmmm DEt har jeg så prøvet at sætte foran. Der sker ikke en dyt....
Jeg skriver datoen i datofeltet på formularen. Det felt, der hedder Tekst73. Så trykker jeg Gem og går videre til næste post i db'en. Når jeg så går tilbage til den oprindelige post, så er den stadig ikke indsat i min undertabel, men står stadig i det felt, jeg har skrevet den i. Og det må den også gerne, indtil jeg indtaster en ny dato, så skulle den gerne rykke ned i undertabellen, hvis den ikke allerede var dernede....
Håber, jeg gør mig  selv forståelig her.....
Godt vi kan glæde os over, at solen skinner i dag ;)
/LO
08. juli 2004 - 12:01 #16
Af en eller anden grund kommer Access aldrig ned i din procedure...?!

Det er næsten umuligt for mig, at sige hvad der går galt. Det eneste jeg kan foreslå, er at du sletter koden og tekstboksen og så opretter det igen, men denne gang kalder feltet for Udf_ser, så det passer med feltet i tabellen....
Avatar billede lo Nybegynder
08. juli 2004 - 12:01 #17
Når jeg nu bagefter går ind i VB hvor ' står foran den sætning, så er den blevet grøn. Det går jeg udfra er et godt tegn?
Det skal lige siges, at det eneste felt, jeg kan se på min formular, er det felt der hedder "Servicesdato". det er ikke fordi datoen bliver indsat i et andet felt vel?
:o)
/LO
Avatar billede lo Nybegynder
08. juli 2004 - 12:07 #18
Ok. Det du mener er, at jeg skal ændre det, der hedder Tekst73 til Udf_ser? (skal bare være helt sikker på, at det er de rigtige ting, jeg piller ved ;)  )
08. juli 2004 - 12:19 #19
Udf_ser er din dato i hovedtabellen, hvis jeg har fortået det rigtigt??
Avatar billede lo Nybegynder
08. juli 2004 - 12:20 #20
Jeg tror, jeg forstod, hvad du skrev ;)
Og når jeg så prøver at lukke formularen ned, efter at have indskrevet nogle datoer, skriver den nu:
"The changes you requested to the table were not successful because they would create dublicate values in the index, primery key, or relationship. Change the data in the field or fields that contain dublicate data, remove the index, or redefine the index to permit dublicate entries and try again"
Så vidt jeg kan se, er der ingen af de datoer, jeg har indtastet, der er de samme....
Avatar billede lo Nybegynder
08. juli 2004 - 12:24 #21
Det her er meget indviklet....nu kommer den ikke med den meddelelse...jeg gjorde ingen ting, accepterede bare at lukke uden at gemme....
Og ja...Udf_ser er navnet på kolonnen i hovedtabellen, som datoen i formularen indtastes i. Servicesdato er navnet på kolonnen i undertabellen, hvor de forskellige datoer gerne skulle lagres....
08. juli 2004 - 12:35 #22
hmm, du har ikke mulighed for at sende mig db'en vel? Det er næsten umuligt for mig at gennemskue hvad der kan være galt - det er så små bagateller, dom kan vælte hele korthuset ;o)
Avatar billede lo Nybegynder
08. juli 2004 - 13:26 #23
Den er på vej med posten.....
Men mine tabeller osv. bagved, de er nok ikke så gennemskuelige. Fra opstartsformularen er det den knap, der hedder rediger service aftale, der giver adgang til den omtalte formular.....
:)
/LO
Avatar billede lo Nybegynder
08. juli 2004 - 13:28 #24
By the way, hvis du synes, der ellers er nogle ret "prof." ting i db'en og undre dig over min uvidenhed, så skyldes det, at jeg bare har "overtaget" den.... ;)
08. juli 2004 - 13:31 #25
øh, hvordan og hvortil har du sendt den? Men Snail-mail eller E-mail?

Jeg har ikke modtaget den endnu... ;o)
Avatar billede lo Nybegynder
08. juli 2004 - 13:35 #26
Hæ hæ....nej...jeg har også lige fået en fejlmeddelelse om, at den er for stor til, at jeg kan sende den. jeg har sendt den på tj@makeiteasy.dk
Jeg prøver lige fra en anden email....2 sek...
08. juli 2004 - 13:35 #27
:o)
Avatar billede lo Nybegynder
08. juli 2004 - 13:41 #28
Nu håber jeg, den er på vej........ ;)
Avatar billede lo Nybegynder
08. juli 2004 - 14:39 #29
Hmmm det er sjovt, den vil gerne tilføje den ene dato man skriver, hvis datofeltet er tomt. Men vil man tilføje endnu en dato, så vil den ikke det....
08. juli 2004 - 14:41 #30
Det er nok fordi, at din undertabel skal være unik på datoen?
Avatar billede lo Nybegynder
08. juli 2004 - 14:44 #31
Ok, kan du hurtigt fortælle mig, hvordan man gør det?
Jeg har snart meget dårlig samvittighed over at bruge alt din tid.... :(
/LO
08. juli 2004 - 14:49 #32
Jeg kiggede lige selv i din db og kan se, at det er aftalenr, som jo er primærnøglen i tabellen, hvorfor du ikke kan indtaaste samme aftalenr flere gange.

Åbn tabellen i design og se om du måske kan oprette en ny primærnøgle (f.eks. et autonummer)
Avatar billede lo Nybegynder
08. juli 2004 - 14:52 #33
Ahh, det havde jeg faktisk tidligere....der skulle være et felt til det i undertabellen.....et nr. felt....jeg lavede den bare om, fordi jeg troede, jeg skulle være smart.. ;) (hvilket jeg så ikke var)
Hmm men nu hvor jeg prøver at ændre den, siger den, at primary key ikke må indeholde en nullværdi.....det skrev den ikke før jeg rettede den om.....
Avatar billede lo Nybegynder
08. juli 2004 - 14:55 #34
...så derfor oprettede jeg et nyt nummerfelt med autonummerering og slettede det gamle, men det virker stadig ikke som om, det virker.....
Avatar billede lo Nybegynder
08. juli 2004 - 14:57 #35
Jammen jammen jammen...nu virker det jo.....hold da op.... :D Er vildt glad nu...det kommer til at spare os for så mange problemer, når vi skal køre db sammen med vores C5......TUSIND TAK!
08. juli 2004 - 14:58 #36
:o)
Avatar billede lo Nybegynder
08. juli 2004 - 15:08 #37
Tror lige, du skal have lidt flere point... :o) Opretter lige et nyt spørgsmål med pint til dig....
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