03. april 2005 - 17:14Der er
28 kommentarer og 2 løsninger
Dupliker Post
Hej.. Jeg har i en formular behov for at duplikere en post. Der indgår flere tabeller i formularen, som er relaterede (join forbundne). Jeg har prøvet med Access egen guide til en 'Dupliker Post' kommandoknap, men denne virker ikke. Det eneste knappen gør er at kopiere data og ligger dem ind i udklipsholderen.
Udfører kopiering, flyt til ny og indsæt i een arbejdsgang: DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy DoCmd.GoToRecord acForm, "Form1", acNewRec DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdPaste
Jeg har prøvet at indsætte dit stykke kode, og tilpasset den til min formular. Den ser ud som følgende: DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy Me.AllowAdditions = True DoCmd.GoToRecord acForm, "frmTransportReg", acNewRec DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdPaste Me.AllowAdditions = False
Når jeg nu kører denne kommando, så kommer den ikke længere end til at skulle indsætte data i en ny post, men der bliver ikke indsat noget. Hvis jeg efterfølgende prøver at lukke formularen, så skriver den at den har kopieret noget data til udklipsholderen. Vil disse automatisk forsvinde hvis der havde været indsat de rigtige data i en post eller skal jeg kører noget extra for at sikre at den ikke kommer at spørger om jeg vil gemme de data hver gang.
xzaboo > Arbejder du i en formular der tillader tilføjelser / ændringer af en post som thomasjepsen er inde på. Hvis ikke du kan ændre en eksisterende post, kan du heller ikke tilføje en post, og så hjælper:
Men jeg kom til at tænke på en anden ting. Jeg ved ikke om Access kopierer det du ser på skærmen eller det der er skrevet på harddisken.
Hvis det første er tilfældet kopieres formatet jo også. Hvis et felt der indeholder et CPRNR og har længden 10 og der skal indtastes 10 karakterer, vil den gemme 10 karakterer op HD. Men hvis formatet er 111111-1111 altså 11 karakterer, vil Access jo ikke kunne indsætte feltet idet det er for langt.
Som jeg forstår fejlen, så skyldes det, at du har en meget stor post (mange og lange felter). Jeg tror ikke, at man kan gøre så meget ved det, ved brug af denne metode. Det er en "Windows-ting".
Alternativt skal du lave koden helt om, så den kopiere vha recrdsets.
Hvis du markerer alle de felter, som skal kopieres og angiver egenskaben "Mærke" (Tag) til "Kopier", så kan du bruge denne kode i stedet:
Dim rs As DAO.Recordset Dim Ctrl As Control Dim varID As Long
ID = Me!ID DoCmd.GoToRecord , , acNewRec
Set rs = Me.RecordsetClone rs.FindFirst "ID= " & varID For Each Ctrl In Me If Ctrl.Tag = "Kopier" Then Ctrl = rs(Ctrl.ControlSource) End If Next
I koden antages at primærnøglen hedder ID. Dette skal selvfølgelig tilpasses din tabel.
Hej, måske et skud i den berømte tåge: Har selv engang brugt dupliker post hvor den samme fejl opstod, det viste sig at hvis formen er sat til popup, og eller modal virker dupliker post ikke, men det var i access97, blot et bud
Hej igen.. mugs >> Ja, jeg har sat TilladTilføjelser til 'Nej', men kan ikke forstå hvorfor dette skulle blive et problem hvis jeg bruge kommandoen Me.Allowadditions = True før jeg kører koden, og efter koden er endt kører Me.Allowadditions = False..
thomasjepsen >> Jeg har lige prøvet dit kode, og den ser nu ud som følgende: Dim rs As DAO.Recordset Dim Ctrl As Control Dim varID As Long
ID = Me!RMtrpnr DoCmd.GoToRecord , , acNewRec Set rs = Me.RecordsetClone rs.FindFirst "RMtrpnr= " & varID For Each Ctrl In Me If Ctrl.Tag = "Kopier" Then Ctrl = rs(Ctrl.ControlSource) End If Next
Når jeg nu kører dette kode i min formular, så når den ikke rigtig længere end til DoCmd.GoToRecord , , acNewRec , og melder at den ikke kan gå til en angivne post. Jeg prøvede derefter at sætte Tilladtilføjelser til Ja, men alligevel kommer den med samme fejl.
Jeg kan sagtens redigere, men har med vilje slået TilladTilføjelser til 'Nej', da jeg ellers kan støde ind i et problem når jeg kigger på de poster der ligger gemt, og kommer til at gå en længere end der er poster (altså vil til at oprette en ny). Men derfor kan jeg sagtens tilføje nye poster, fordi har bare på min 'Ny Post' knap indsat Me.Allowadditions = True
Jeg har ikke noget kvalificeret bud på fejlen. Prøv at sætte TilladTilføjelser til "Ja" og kør koden. Jeg ved ikke hvad det skulle hjælpe i dette tilfælde. Men et eller andet skal da prøves.
Da brugerne af db'en meget ofte skal bruge de samme oplysninger i flere poster og gerne vil være fri for at skulle indtaste det samme flere gange, ville være rart om andre måske har et bud på hvordan problement kan løses. :)
Jamen du skal vel have Allowadditions med i koden:
Dim rs As DAO.Recordset Dim Ctrl As Control Dim varID As Long
ID = Me!ID Me.AllowAdditions = True DoCmd.GoToRecord , , acNewRec
Set rs = Me.RecordsetClone rs.FindFirst "ID= " & varID For Each Ctrl In Me If Ctrl.Tag = "Kopier" Then Ctrl = rs(Ctrl.ControlSource) End If Next docmd.RunCommand accmdsaverecord Me.AllowAdditions = False
ja nu sker der noget. 1. gang jeg aktiverer knappen melder den fejl 2105 og jeg stopper koden. Fejlen ligger på linien : DoCmd.GoToRecord , , acNewRec
Når jeg så umiddelbart efter aktiverer nok en gang på den samme post melder den fejl 3265 - " elementet blev ikke fundet i denne samling " men der er oprettet en korrekt kopi ??? Hvis jeg går ind i koden er fejlen på denne linie
Du skal sikre dig, at du kun har sat mærket "Kopier" på de tekstbokse som indgår i tabellen. Hvis du fejlagtigt har fået givet en etiket eller lign. det samme mærke, så vil koden fejle.
Du kan evt skrive: ?Ctrl.name
i debug-vinduet, når du er i debug-mode. Derved får du navnet på den kontrol, som fejler.
Jeg har nu fundet ud af et stykke kode som giver den fejlmeddelse der siger: "Du kan ikke gå til den angivne post på nuværende tidspunkt" Dette stykke kode var lagt inder under Form_BeforeUpdate og var:
Private Sub Form_BeforeUpdate(Cancel As Integer) If Me.NewRecord = False Then Me.AllowAdditions = False End If End Sub
Hvad kan det være at dette kode fremprovokere den fejlmeddelelse?
Lige et spørgsmål til, jeg er nu kommet så langt at det så ud til at virke, men så opdagede jeg at den altid kopierede den første post af de viste poster i formularen. Kan dette skyldes følgende sætning i den kode du gav mig: rs.FindFirst "RMtrpnr= " & varID ???
undskyld - ja selvfølgelig vil Findfirst finde den 1. post og kopiere men det var jo ikke lige det der var meningen. Det vil som regel være en tidligere post, men aldrig den første, der skal kopieres - hvordan formulere man at det er den aktuelle post man står i der skal kopieres.
rs.FindFirst "RMtrpnr" = " & varID" For Each Ctrl In Me If Ctrl.Tag = "Kopier" Then Ctrl = rs(Ctrl.ControlSource) End If Next DoCmd.RunCommand acCmdSaveRecord Me.AllowAdditions = False End Sub
jeg kan godt forstå du spørger for jeg kan heller ikke forstå at den var lige ved at lykkedes
der er IKKE noget felt der hedder ID hverken på formular eller i tabel ID felt hedder RMtrpnr
nu er det egentlig min søn der arbejder med denne DB og har problemmet men da han ikke er hjemme prøver jeg at løse problemet for ham - håber ikke jeg har fået det f...d up
rs.FindFirst "RMtrpnr = " & varRMtrpnr For Each Ctrl In Me If Ctrl.Tag = "Kopier" Then Ctrl = rs(Ctrl.ControlSource) End If Next DoCmd.RunCommand acCmdSaveRecord Me.AllowAdditions = False End Sub
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.