Avatar billede bbkdk Seniormester
27. januar 2009 - 14:21 Der er 4 kommentarer og
1 løsning

Kopiere post og ændre feltindhold

Jeg er ved at lave et lille regnskabsprogram med en kassekladde.

I den forbindelse ønsker jeg at kopiere en post til næste post, og derefter ændre indholdet i 2 af felterne i den nye post, nemlig "Kontonummer" og "Beløb"

Jeg har fundet nedenstående kode i en tidligere besvarelse på Eksperten, og den fungerer perfekt, således at posten kopieres ved klik på en kommandoknap.

Dim rs As DAO.Recordset
    Dim Ctrl As Control
    Dim varDataID As Long
   
    varDataID = Me!DataID
    Me.AllowAdditions = True
    DoCmd.GoToRecord , , acNewRec
    Set rs = Me.RecordsetClone
     
    rs.FindFirst "DataID = " & varDataID
    For Each Ctrl In Me
      If Ctrl.Tag = "Kopier" Then
          Ctrl = rs(Ctrl.ControlSource)
      End If
    Next
    DoCmd.RunCommand acCmdSaveRecord
    Me.AllowAdditions = False

Men hvordan får jeg ændret feltindholdet i "Kontonummer" og "Beløb" i den nye post. Kontonummeret skal altid være et bestemt tal (9000).
Beløbet skal svare til beløbet i den kopierede post, bare med omvendt fortegn (det er vist noget med at gange tallet med -1, så skulle fortegnet vende).

Håber der er en (eller flere) der kan hjælpe mig.
Avatar billede mugs Novice
27. januar 2009 - 15:31 #1
Jeg tror du kan koge din kode lidt ned:

Me.AllowAdditions = True
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "Form1", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Me.beløb = -felt5
Me.kontonummer = 9000
Me.AllowAdditions = False
Avatar billede bbkdk Seniormester
27. januar 2009 - 20:13 #2
Hej Mugs !!!
Det virker næsten perfekt - men når jeg kører proceduren, kommer der en fejlmelding:
"Hvis du vil foretage ændringer i dette felt, skal du først gemme posten"
Og så bliver "Kontonummer" ikke sat til 9000, men er uændret - derimod bliver resten af posten inkl. "Beløb" korrekt sat ind.
Debugger jeg, viser den, at der er en fejl i Me.Kontonummer = 9000.
Forklaringen på fejlmeddelelsen lyder:
This error occurs when the user is trying to edit a row based on a view or stored query that is based on more than one table.
Og det er korrekt, at forespørgslen til formularen indeholder data fra 2 tabeller.
Nemlig feltet "Kontonavn" der hentes fra tabellen "Konti" og som er afhængig af værdien i feltet "kontonummer".
Har du en løsning på dette forhåbentligt sidste  problem?
M.v.h.
Knud
NB - hvis du har et svar, vender jeg tilbage hurtigst muligt. Det er dog muligt, at det først bliver i morgen aften, jeg får mulighed for at prøve en eventuel løsning.
Avatar billede mugs Novice
27. januar 2009 - 21:56 #3
Prøv at indsætte værdien for "konti" efter kontonummer sådan:

Me.AllowAdditions = True
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "Form1", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Me.beløb = -felt5
Me.kontonummer = 9000
Me.konti = Me.konti
Me.AllowAdditions = True

Du indsætter blot den samme værdi, men måske skal den have en værdi, da den er afhængig af kontonummer. Da kontonummer altid skal være 9000, kan det også være, at du skal give konti en værdi svarende til værdien i kontonummer.
Avatar billede bbkdk Seniormester
28. januar 2009 - 07:32 #4
Hej Mugs !!
Den siger stadig det samme - når jeg har lavet en autopostering, bliver markøren flyttet til det første felt i den oprettede post.. Jeg kan heller ikke manuelt rette "Kontonummer", før jeg har været ude af posten og er vendt tilbage igen.

Men jeg har ændret koden således, og nu virker den perfekt:

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "FrmIndtastning", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Me.Beløb = -Beløb
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToRecord , , acPrevious
Me.Kontonummer = 9000
DoCmd.GoToRecord , , acNext

Det er vist den mest uelegante afslutning på en kode, der har været vist i Eksperten, så har du en bedre og mere korrekt løsning, vil jeg naturligvis gerne have den. Det må være noget med en kode for at gemme posten i stedet for at skifte mellem linierne for gemme.

Mange tak for hjælpen, du får point
Avatar billede mugs Novice
28. januar 2009 - 07:45 #5
Tak for point - Det er ikke alle koder, der er lige elegante, men det vigtigste må være, at skidtet fungerer. Hvis du vil prøve at lagre den nye record, kan du prøve flg. der lagrer en indtastning (record):

docmd.RunCommand acCmdSave
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