Avatar billede tville Juniormester
19. december 2008 - 08:16 Der er 14 kommentarer og
1 løsning

Kopiere en post

jeg har en lille udfordring med en database. Jeg har en formular, hvor data indtastes. Den består af nogle felter samt en indlejret formular, hvori der kan oprettes x antal poster.
Jeg skal lave en funktion, der kan kopiere en post. Indtil videre har jeg gjort det ved at jeg gemmer alle data fra de enkelte felter i formularen, opretter en ny post og sætter data ind i de respektive felter. Mit problem er den indlejrede formular, som kan indeholde x antal poster. Hvordan kan jeg kopiere dem?
Min kode indtil nu ser således ud:
Private Sub KopierPost_Click()
On Error GoTo Err_KopierPost_Click

'  Her kopierer jeg indholdet i felterne
   
    stProjekt = [Forms]![Aktivitet]![projekt_id]
    stTitel = [Forms]![Aktivitet]![a_titel]
    stansvar = [Forms]![Aktivitet]![ansvar_id]
    stindtastetaf = [Forms]![Aktivitet]![Indtast_af]
    stAktivitet = [Forms]![Aktivitet]![a_tekst]
    stStart = [Forms]![Aktivitet]![a_startdato]
    stSlut = [Forms]![Aktivitet]![a_slutdato]
    stAntal = [Forms]![Aktivitet]![antaldeltagere]
    stUvtype = [Forms]![Aktivitet]![tilstedeFjern]
    stUvtimer = [Forms]![Aktivitet]![a_uvtimer]
    stAtimer = [Forms]![Aktivitet]![a_arbtimer]
    stUnvtype = [Forms]![Aktivitet]![løn_id]
    stdeltagerbetaling = [Forms]![Aktivitet]![deltagerbetaling]
    stholdbetaling = [Forms]![Aktivitet]![holdbetaling]
    stfastafdbud = [Forms]![Aktivitet]![fastafdbud]
    stovrig = [Forms]![Aktivitet]![materialeomkost]
    stkantine = [Forms]![Aktivitet]![kantineomkost]
    stdiverse = [Forms]![Aktivitet]![diverseomkost]
    stfremmedlon = [Forms]![Aktivitet]![løn_anden]
    stuvbeskriv = [Forms]![Aktivitet]![Undervisere]
    stuvnotat = [Forms]![Aktivitet]![Notat]
   
'  Der oprettes en ny post
    DoCmd.GoToRecord , , acNewRec
   
'  Indholdet fra sættes ind i felterne i den nye post
    Me!projekt_id = stProjekt
    Me!a_titel = "Kopi af" & stTitel
    Me!ansvar_id = stansvar
    Me!Indtast_af = stindtastetaf
    Me!a_startdato = stStart
    Me!a_slutdato = stSlut
    Me!antaldeltagere = stAntal
    Me!a_uvtimer = stUvtimer
    Me!a_arbtimer = stAtimer
    Me!deltagerbetaling = stdeltagerbetaling
    Me!holdbetaling = stholdbetaling
    Me!fastafdbud = stfastafdbud
    Me!materialeomkost = stovrig
    Me!kantineomkost = stkantine
    Me!diverseomkost = stdiverse
    Me!løn_anden = stfremmedlon
    Me!Undervisere = stuvbeskriv
    Me!Notat = stuvnotat
   
Exit_KopierPost_Click:
    Exit Sub

Err_KopierPost_Click:
    MsgBox Err.Description
    Resume Exit_KopierPost_Click
   
End Sub
Avatar billede mugs Novice
19. december 2008 - 08:24 #1
Det er noget af en kode for at kopiere en post. Jeg plejer at bruge denne:

'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
End Sub

Jeg er på vej ud af døren og har ikke så meget tid, men det ser ud til at du har forskellige feltnavne i formularen, så hvad er nemmest: At kopiere posten og dermed alle felter og bagefter ændre nogle af felterne eller gøre som du gør.

M.h.t. underformularen, skal du sætte fokus på denne og i en løkke indsætte postene i en ny. Men det er lidt svært at komme med gode forslag, for hvis data fra underformularen er bundet til et felt i mainform og desuden kommer fra en anden tabel, kan jeg ikke se hvad nytte det er til, at kopiere dem.
Avatar billede tville Juniormester
19. december 2008 - 08:41 #2
Du har da helt ret i at din kode til at kopiere en post er meget enklere. Jeg er bare ikke lige sådan en haj til at programmere.

Underformularen er ganske rigtig bundet til et felt i mainform og kommer fra en anden tabel. Formålet med at kopiere den er, at undgå at skulle indtaste rigtig mange data flere gange.
Avatar billede mugs Novice
19. december 2008 - 10:08 #3
Du sættet forkus på underformularen således:

Me.Underordnet_objekt10.SetFocus

Hvor Underordnet_objekt er navnet på din underformular

Løkken hvor du kopierer underformularens poster kan se ud således:
Do Until Me.newrecord = true
Din kopieringskode
Loop

Du kan også i stedet for en egentlig kode lave en tilføjelsesforespørgsel, der sender posterne ind i tabellen, og kalde forespørgslen fra koden:

Do Until Me.newrecord = true
docmd.openquery "Forespørgslens navn"
Loop
Avatar billede tville Juniormester
19. december 2008 - 12:37 #4
Hej Mugs
Jeg har brugt den kopieringskode du har angivet ovenfor med nogle små tilretninger - det virker helt perfekt.
Men hvis jeg skal have kopieringen fra underformularen ind, hvor skal det så placeres og kan jeg bruge samme kopieringskode her?
Min kode lige nu ser såldes ud:

Private Sub KopierPost_Click()
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdCopy
    DoCmd.GoToRecord acForm, "Aktivitet", acNewRec
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdPaste
    stTitel = [Forms]![Aktivitet]![a_titel]
    Me!a_titel = "Kopi af " & stTitel
    Me!a_tekst = "xxxx"
    DoCmd.GoToControl "a_tekst"
   
End Sub
Avatar billede mugs Novice
19. december 2008 - 14:35 #5
Du bør også kunne bruge min kode til underformularen. Men du er nødt til først at sætte fokus på denne og stdig i en løkke fordi underformularen kan indeholde flere poster. Men jeg ville nok bruge en insert (Tilføjelsesforespørgsel) da der jo kan komme problemer fordi du jo skal gå til en ny post og derefter tilbasge til den post du kom fra + 1.
Avatar billede tville Juniormester
06. januar 2009 - 11:01 #6
Jeg er kommet lidt videre - min kode ser således ud, men jeg får en fejl om type mismatch som jeg ikke rigtig kan placere. det vedrører den sidste insert.

Private Sub KopierPost_Click()
    ' den aktivitet jeg kopierer fra
    strevnr1 = aktivitet_id
   
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdCopy
    DoCmd.GoToRecord acForm, "Aktivitet", acNewRec
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdPaste
   
    stTitel = [Forms]![Aktivitet]![a_titel]
    Me!a_titel = "Kopi af " & stTitel
    Me!a_tekst = "xxxx"
    DoCmd.GoToControl "a_tekst"
   
    'den nye aktivitet
    strevnr2 = aktivitet_id
   
    DoCmd.RunCommand "Insert into Uaktivitet (aktivitet_id,satsnr,årselevtimer) select " & strevnr2 & ",satsnr,årselevtimer from Uaktivitet where aktivitet_id = " & strevnr1
 
End Sub
Avatar billede mugs Novice
06. januar 2009 - 11:16 #7
Fejlen "type mismatch" kommer typisk, når du prøver at sammenligne alfanumeriske data med numeriske, eller prøver at indsætte alfanumeriske data i et numerisk felt. Du bør også efterse dine variabler at de er døbt korrekt.
Avatar billede tville Juniormester
06. januar 2009 - 12:27 #8
I tabellen uaktivitet har jeg følgende 4 felter:
uaktivitet_id - langt heltal
aktivitet_id - langt heltal
Satsnr - langt heltal
årselevtimer - dobbelt reelt tal

Jeg har prøvet at definere de to variable således:
    Dim strevnr1 As Double
    Dim strevnr2 As Double
(har også prøvet med Integer)

men fejlen kommer stadig.

De angiver også om variablerne er døbt korrekt. Hvad kan der være galt der?
Avatar billede mugs Novice
06. januar 2009 - 12:36 #9
Dim strevnr1 As Double
Dim strevnr2 As Double

Betyder netop at du har døbt (erklæret) dine variabler som Double altså numeriske værdier. Hvis du prøver at sammenligne disse værdier med andre variabler som f.eks alfanumeriske (String), vil du få din skitserede fejl.
Avatar billede tville Juniormester
06. januar 2009 - 12:56 #10
ja - men jeg har jo ingen alfanumeriske variabler. Jeg har kun numeriske.
Avatar billede tville Juniormester
10. januar 2009 - 14:16 #11
I feltet "Satsnr" laves der i tabellen et opslag i en anden tabel. Kan det have betydning for den fejlmeddelelse jeg får?
Avatar billede mugs Novice
10. januar 2009 - 15:10 #12
Det tror jeg ikke såfremt feltet har en værdi der eksisterer i fremmedtabellen eller egenskaben BegrænsTilListe er sat til nej. Men lav dog en testdb og prøv.
Avatar billede tville Juniormester
14. januar 2009 - 09:53 #13
Så har jeg fået det til at fungere. Tak for hjælpen Mugs. Sender du lige et svar så jeg kan tildele point?
Avatar billede mugs Novice
14. januar 2009 - 10:02 #14
Tak.
Hvad var fejlen "mismatch"
Avatar billede tville Juniormester
14. januar 2009 - 10:47 #15
Det var et spørgsmål om hvornår jeg definerede variablen strevnr2. Jeg stod i den gamle post da jeg definerede den og skulle stå i den ny.
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



IT-JOB