Avatar billede xzaboo Praktikant
03. april 2005 - 17:14 Der 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.

Hvordan kan jeg løse dette problem?

Mvh.
Steffen..
Avatar billede mugs Novice
03. april 2005 - 17:16 #1
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
Avatar billede xzaboo Praktikant
03. april 2005 - 19:10 #2
HEj mugs..

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.
03. april 2005 - 19:42 #3
prøv evt med denne:

Me.AllowAdditions = True
docmd.RunCommand acCmdSelectRecord
docmd.RunCommand acCmdCopy
docmd.RunCommand acCmdPasteAppend
Me.AllowAdditions = False

Jeg ved ikke om den gør nogen forskel, men jeg får ikke noget spørgsmål om at gemme indhold af udklipsholder
Avatar billede mugs Novice
03. april 2005 - 19:51 #4
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:

Me.AllowAdditions = True

heller ikke.
Avatar billede mugs Novice
03. april 2005 - 19:58 #5
Min kode er afprøvet og fungerer fint.

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.
03. april 2005 - 20:03 #6
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.
Avatar billede -anders- Juniormester
03. april 2005 - 20:57 #7
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
Avatar billede xzaboo Praktikant
04. april 2005 - 17:31 #8
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.
Avatar billede mugs Novice
04. april 2005 - 17:35 #9
Kan du uden at kopiere:

- Redigere eksisterende poster
- Tilføje en post
Avatar billede xzaboo Praktikant
04. april 2005 - 17:39 #10
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
Avatar billede mugs Novice
04. april 2005 - 17:42 #11
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.
Avatar billede xzaboo Praktikant
04. april 2005 - 17:53 #12
det giver desværre ingen ændring
Avatar billede mugs Novice
04. april 2005 - 18:08 #13
Jeg er helt blank. Beklager.
Avatar billede xzaboo Praktikant
04. april 2005 - 21:03 #14
Ærgeligt men tak for forsøget - 

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. :)
04. april 2005 - 21:04 #15
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
Avatar billede xzaboo Praktikant
04. april 2005 - 21:19 #16
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

Ctrl = rs(Ctrl.ControlSource)
04. april 2005 - 21:24 #17
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.
Avatar billede xzaboo Praktikant
04. april 2005 - 21:31 #18
Undskyld, men jeg er ikek helt klar over hvor jeg skal skrive ?Ctrl.name henne?
Avatar billede xzaboo Praktikant
04. april 2005 - 21:56 #19
hvis jeg starter db op via en velkomstside og hovedmenu  melder den ingen fejl men kopiknappen skal aktiveres 2 gange for at kopiere en post ??
04. april 2005 - 22:06 #20
Du skrev, at du fik en fejl, og at når du gik ind i koden er fejlen på linien
Ctrl = rs(Ctrl.ControlSource)

Når denne linie er markeret med gult, kan du trykke Ctrl+G og derefter skrive dette i vinduet:

?ctrl.Name
Avatar billede xzaboo Praktikant
04. april 2005 - 23:03 #21
Okay, den fejl er væk indtil videre.

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?
Avatar billede xzaboo Praktikant
04. april 2005 - 23:22 #22
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
???
Avatar billede xzaboo Praktikant
05. april 2005 - 17:51 #23
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.
05. april 2005 - 20:10 #24
Der er jo også en fejl i linien:

ID = Me!ID

Den skal jo hedde:

varID = Me!ID

På den måde aflæses den aktuelle ID, som så efterfølgende fremsøges og kopieres-
Avatar billede xzaboo Praktikant
05. april 2005 - 20:39 #25
hej thomas
jeg er ved at køre lidt fast i denne - for nu kører det overhovedt ikke mere
er følgende kode rigtig forstået  ??

Private Sub Kommandoknap201_Click()
    Dim rs As DAO.Recordset
    Dim Ctrl As Control
    Dim varID As Long
         
   
    varID = Me!ID
    Me.AllowAdditions = True
    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
    DoCmd.RunCommand acCmdSaveRecord
    Me.AllowAdditions = False
End Sub
05. april 2005 - 20:51 #26
sætningen:
rs.FindFirst "RMtrpnr" = " & varID"

skal se således ud:
rs.FindFirst "RMtrpnr = " & varID

Dog undre det mig, at den ikke skal hedde:
rs.FindFirst "ID = " & varID

Er feltet ID på formularen ikke knyttet til feltet ID i tabellen?
Avatar billede xzaboo Praktikant
05. april 2005 - 21:08 #27
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
05. april 2005 - 21:12 #28
åh åh ;o)

Så må vi hellere få styr på det ;o)

Prøv denne:

Private Sub Kommandoknap201_Click()
    Dim rs As DAO.Recordset
    Dim Ctrl As Control
    Dim varRMtrpnr As Long         
   
    varRMtrpnr = Me!RMtrpnr
    Me.AllowAdditions = True
    DoCmd.GoToRecord , , acNewRec
    Set rs = Me.RecordsetClone
     
    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

Jeg går ud fra, at RMtrpnr er et nummerisk felt?
Avatar billede xzaboo Praktikant
05. april 2005 - 21:18 #29
hu hej  hvor det går  -  mange tak for hjælpen
det kan være jeg kan blære mig lidt når han kommer hjem

mvh
Knud
05. april 2005 - 21:20 #30
Super :o)
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