Avatar billede themepark Nybegynder
22. december 2004 - 15:25 Der er 14 kommentarer

Ny posts værdi=Forrige posts værdi, but how?

Jeg vil gerne i VBA gøre det, at jeg, når jeg tilføjer en ny post, så bruger de værdi der ligger 5 poster tilbage. Men hvordan kan det gøres?
Avatar billede mugs Novice
22. december 2004 - 15:39 #1
DoCmd.GoToRecord acForm, "Form1", acPrevious, 5
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "Form1", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Avatar billede mugs Novice
22. december 2004 - 15:51 #2
Du skal naturligvis have tilføjet en betingelse der måler, om der er tale om en ny post:

If Me.Newrecord Then
DoCmd.GoToRecord acForm, "Form1", acPrevious, 5
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "Form1", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
End If
Avatar billede themepark Nybegynder
22. december 2004 - 16:03 #3
Kay...men hvad så hvis jeg vil ændre i nogle af de værdier, jeg har i den forrige post, som f.eks. lægge 1 til et ID, men beholde de andre værdier?
Avatar billede mugs Novice
22. december 2004 - 16:25 #4
Skal jeg forstå det på den måde, at det nye ID skal være tabellens max værdi i dette felt + 1?
Avatar billede themepark Nybegynder
22. december 2004 - 16:29 #5
Ja, f.eks, nu er der flere felter der skal ændres, men det er bare et tænkt eksempel :)
Avatar billede mugs Novice
22. december 2004 - 16:35 #6
if Me.Newrecord Then
DoCmd.GoToRecord acForm, "Form1", acPrevious, 5
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "Form1", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
End If
Me.ID =DMax("FELTNAVN", "TABELNAVN"]+1
Avatar billede themepark Nybegynder
22. december 2004 - 16:42 #7
Hmm, kan det ikke gøres noget enklere? Jeg prøvede at bakse med noget lig Recordset("ID")=Recordset.Move(-5)("ID")+1, hvilket ikke virkede naturligvis, men det er noget i den stil jeg tænker på, det må da kunne gøres med noget færre linjer :)
Avatar billede mugs Novice
22. december 2004 - 16:45 #8
OK - Når du finder en løsning med færre kodelinier, så vær så venlig at paste koden ind her, så vi andre kan lære lidt af det :o)
Avatar billede themepark Nybegynder
22. december 2004 - 16:48 #9
Hvis jeg havde en løsning, spurgte jeg jo heller ikke her, vel? ;) Men jeg ved af erfaring, at de fleste ting kan løses med 1 eller 2 linjer, i det her tilfælde er det bare for længe siden, jeg har bakset med VBA :)
Avatar billede mugs Novice
22. december 2004 - 16:50 #10
Jeg skrev NÅR du finder en løsning
Avatar billede themepark Nybegynder
22. december 2004 - 16:54 #11
Jamen, jeg har ikke en løsning, derfor skriver jeg jo her og spørger om andre har en løsning ;) Men det er vel tilladt ikke at godtage hvad som helst, hvis det skaber mere rod end godt er, efter min mening ;)
Avatar billede mugs Novice
22. december 2004 - 16:59 #12
Har du afprøvet koden?
Hvordan kan du sige, at koden skaber mere rod end godt er?

Nej - Du behøver ikke at godtage den første løsning. Ligesom jeg heller ikke behøver at deltage mere.
Avatar billede themepark Nybegynder
22. december 2004 - 17:00 #13
Jeg har ikke udtalt mig om kodens virkning, udelukkende om antallet af linjer ;)
Avatar billede kjulius Novice
25. december 2004 - 20:16 #14
En anden mulighed er at bruge RecordsetClone:

If Me.NewRecord Then
  Me.RecordsetClone.MoveLast
  Me.RecordsetClone.Move(-5)
  Me.feltnavn1 = Me.RecordsetClone.Fields("feltnavn1")
  Me.feltnavn2 = Me.RecordsetClone.Fields("feltnavn2")
End If
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