08. juli 2004 - 09:24Der 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
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
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"
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
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.
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
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)
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...
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......
Prøv at tjekke egenskaberne Underordnedefelter og Overordnedefelter på underformularen. Hvis du har ændret et af feltnavnene, skal du også rette her...?
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 :)
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....
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
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....
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
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 ;) )
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....
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....
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)
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
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.... ;)
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...
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)
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.....
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!
Tror lige, du skal have lidt flere point... :o) Opretter lige et nyt spørgsmål med pint til dig....
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.