Avatar billede sigyn Seniormester
25. januar 2018 - 12:37 Der er 12 kommentarer og
1 løsning

Aktivering af BeforeInsert i formular

Jeg har denne kode i en formular, og den virker efter hensigten. Den tildeler det næste nummer i rækken til min kasse, uden at jeg behøver at bruge autonummerering, hvilket i det aktuelle tilfælde ikke er optimalt.

Private Sub Form_BeforeInsert(Cancel As Integer)
      KasseNr = Nz(DMax("KasseNr", "KasseNrTest")) + 1
End Sub

Formularen har en underformular, hvor linket er ovennævnte KasseNr.

Det der tricker mig, er at når jeg åbner en ny post i formularen, er der selvfølgelig ikke noget nummer. Det kommer, når jeg taster noget i et andet felt. Problemet er, at jeg sådan set ikke har behov for at taste noget i et andet felt, når jeg åbner posten, det kommer først senere. I første omgang har jeg kun behov for at taste i underformularen, men det "aktiverer" ikke mit KasseNr. Er der en smartere løsning, end at sætte et ja/nej felt ind, til at taste i?
25. januar 2018 - 12:41 #1
Hvad med .NewRecord på Current eventet?

Sub NewRecordMark(frm As Form)
    Dim intnewrec As Integer

    intnewrec = frm.NewRecord
    If intnewrec = True Then
    MsgBox "You're in a new record." _
        & "@Do you want to add new data?" _
        & "@If not, move to an existing record."
    End If
End Sub

Stjålet fra

https://msdn.microsoft.com/en-us/library/bb243771(v=office.12).aspx
Avatar billede sigyn Seniormester
25. januar 2018 - 13:02 #2
Uden at jeg har testet, så tror jeg ikke dit forslag helt gør det jeg har brug for, og min kode virker sådan set også. Hvis jeg er startet med KasseNr 700, tildeler den nr 701 til den næste og så  fremdeles. Og jeg er ikke så låst som ved automnummereringen, som ellers umiddelbart var den nemmeste løsning. Det der ikke er optimalt, er at jeg skal taste et eller andet i formularen, for at mit nummer bliver tildelt. Jeg ville jo allerhelst, at det kom, når jeg åbnede en ny post, eller i hvert fald når jeg tastede i underformularen.
KasseNr er primærnøgle i den tilhørende tabel
Avatar billede terry Ekspert
25. januar 2018 - 13:14 #3
Not quite sure I understand exactly what you are trying to achieve :-(

Do you want to enter data into the sub form BEFORE you have created the record in the main form?
Avatar billede terry Ekspert
25. januar 2018 - 13:16 #4
The record in the main form doesn't exist until you are finished entering the required data, so creating related records in the sub form is pointless until the record in main form exists.
Avatar billede terry Ekspert
25. januar 2018 - 13:28 #5
You could add a button to the form which you need to press to create a new record using

DoCmd.GoToRecord acDataForm, "FormName", acNewRec
Avatar billede sigyn Seniormester
25. januar 2018 - 13:31 #6
De eneste data jeg har brug for i hovedformularen er det nummer som koden tildeler. Det er det der er "humlen ved det". Senere skal der også tastes lidt mere, men det kan være både dage og uger senere. Nummeret skal tildeles med det samme.
Jeg kunne løse det med et ja/nej felt f.eks. "Er nummer tildelt". Tænkte bare, om det kunne gøres lidt smartere.
25. januar 2018 - 13:37 #7
Prøv følgende:

Private Sub Form_Current()
    If Me.NewRecord Then
        KasseNr = Nz(DMax("KasseNr", "KasseNrTest")) + 1
    End If
End Sub
Avatar billede terry Ekspert
25. januar 2018 - 13:52 #8
Stil dont understand the problem!

Is it the fact that you need to start entering the data to trigger the BeforeInsert event?

Well Access can do many things, but it cant guess that you want to create a new record. So you have to tell it :-)

So, unless you start entering data into a new record you need some way of telling access that you intend creating a new record. So you can use the method I am suggesting wit a button and then at the same time use your code to calculate next KasseNr and insert into field.
Avatar billede sigyn Seniormester
25. januar 2018 - 13:59 #9
Jeg når ikke lige at teste mere af før i morgen, #6 har overhalet #5 indenom, så den har jeg først lige læst.
Og, jeg har en knap til at åbne en ny post, det har jeg haft hele tiden, det havde jeg bare ikke fået skrevet.
Avatar billede terry Ekspert
25. januar 2018 - 14:03 #10
OK, if you already have a button to go to new record then put the code there and not in BeforeInsert
Avatar billede terry Ekspert
25. januar 2018 - 14:12 #11
So code in OnClick event looks something like this

Private Sub YourButton_Click()
DoCmd.GoToRecord acDataForm, "NameOfFormGoesHere", acNewRec

KasseNr = Nz(DMax("KasseNr", "KasseNrTest")) + 1

End Sub

This will also trigger BeforeInsert event...
Avatar billede sigyn Seniormester
26. januar 2018 - 10:10 #12
Terry, det var lige det der virkede :-)
Thor jeg prøvede ikke din løsning, måske virker den også

Mit problem er, at jeg i hvert fald ikke endnu, har alt for godt styr på alle disse evnets, hvornår jeg skal bruge den ene fremfor en anden. Min beforeInsert løsning var en jeg havde googlet mig frem til, jeg manglede jo så bare lige det sidste.

Tak for hjælpen til jer begge
Avatar billede terry Ekspert
26. januar 2018 - 12:01 #13
selv tak og god weekend :-)
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

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