Avatar billede woolbox Nybegynder
15. marts 2004 - 03:22 Der er 19 kommentarer og
1 løsning

Me.Currentrecord = første eller sidste record i recordset?

Hej,

Jeg har fjernet Access' default navigationsknapper fra min form, da jeg ikke ønsker at man ved at klikke frem til sidste record og skifte en record frem kan oprette en ny post (skal køre en del scripts i den forbindelse nemlig).

Derfor har jeg oprettet mine egne nav. buttons som laver noget script før de skifter record.

Mit ønske er at scriptet først tjekker om nuværende sag er hhv. første eller sidste record i det aktuelle recordset, sådan at jeg A) undgår fejl hvis man forsøger at gå til en record før den første og B) undgår at der oprettes en record hvis man bladrer forbi sidste record.

På forhånd tak! :)
Avatar billede jensen363 Forsker
15. marts 2004 - 07:14 #1
Du kan navigere rundt imellem dine records med følgende :

    DoCmd.GoToRecord , , acNewRec
    DoCmd.GoToRecord , , acFirst
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToRecord , , acNext
    DoCmd.GoToRecord , , acPrevious
15. marts 2004 - 09:15 #2
Jeg foreslår, at du benytter fejlhåndtering til at undgå fejlene.

I dette tilfælde, vil jeg mene, at man godt kan forsvare at bruge den 'grove' fejlhåndtering: On Error Resume next.

Således:

On Error resume next
DoCmd.GoToRecord , , acNext
Avatar billede jensen363 Forsker
15. marts 2004 - 09:30 #3
Hej Thomas ..

Tja ... det er jo den grove metode, men det virker for det meste ... men måske en anelse farlig måde at foretage fejlbehandling på ;)
15. marts 2004 - 10:07 #4
jensen....ja, men hvad kan der gå galt når man skifter post? Kan data blive slettet/ændret? Kan systemet bryde ned? Kan proceduren på nogen måde få indflydelse på andre dele af systemet? Kan skærmen smelte?

(Nu kommer der en længere - lidt langt ude - argumentation :o)

Jeg mener sagtens, at man kan bruge "On Error resume next" i rigtig mange situationer uden risiko for noget går galt.
Det er jo lidt ligesom, at man lærer sit barn, at man ikke må slå på andre. Den læresætning duer også i 99,99% af tilfældende. Men der er få ekstreme situationer, hvor man godt kan forsvare at man slår (f.eks. for at forsvare sig mod 12 rockere). Men det er lidt omstændigt at skulle forklare barnet dette hver gang.
Det samme gælder her: hvorfor bruge tid og resourcer på at tage højde for rent hypotetiske situationer, når sansynligheden for at noget kan gå galt er næsten nul. Det er at skyde gråspurve med kanoner og jeg betragter det som at sjofle med kundens penge ;o)

Men hvis man endelig er den nervøse type, så kan man gøre det således:

On Error resume next
DoCmd.GoToRecord , , acNext
If Err <> 2105 then msgbox "Fejlkode: " & Err & vbnewline & Err.Description

Hvad siger du til mine argumenter?
Avatar billede jensen363 Forsker
15. marts 2004 - 10:13 #5
I den aktuelle sag er jeg enig, her er risikoen minimal  ;)
15. marts 2004 - 10:22 #6
Øv, jeg troede lige, at vi kunne få en hyggelig fagdiskussion her ;o)
Avatar billede jensen363 Forsker
15. marts 2004 - 10:27 #7
Et andet tidspunkt ... jeg arbejder ... men jeg er enig i din argumentation omkring benyttelsen af On Error Resume Next ... det virker, og mange gange er det ikke umagen værd at beskrive en decideret fejlrutine ...
Avatar billede jensen363 Forsker
15. marts 2004 - 10:31 #8
Men den faglige sparring med dig er helt i top ... ;)
Avatar billede woolbox Nybegynder
15. marts 2004 - 10:38 #9
Skal ellers love for at der er gået debat i den ;)

On error resume, forhindrer det også at en ny sag oprettes hvis man bevæger "forbi" slutningen af recordset'et?

Jeg havde forestillet mig noget i retning af nedenstående pseudokode:

If not LastRecordInRecordset
    DoCmd.GoToRecord , , acNext
End If

Kan 'on error resume' gøre det samme?
15. marts 2004 - 11:00 #10
Med "On error resume next", vil du bare slutte på den nye post (præcis som hvis du havde benyttet navigationsknapperne på formularen)

Hvis du ikke ønsker at brugeren skal kunne oprette poster ved at gå til den ny post i slutningen af recordsettet, så kan du bruge denne kode på cmdNext:
DoCmd.GoToRecord , , acNext
If Me.Newrecord then docmd.Gotorecord ,, acPrevious

Men egentlige ville jeg hellere anbefale dig at slå form-egenskaben "Tillad tilføjelser" fra. Derved findes den ny post slet ikke.
Når du skal oprette, skal du bare sørge for at sætte denne egenskab vha kode lige inden du hopper til den ny post:
Me.Allowadditions=True
DoCmd.GoToRecord , , acNewRec
Avatar billede hekla Nybegynder
15. marts 2004 - 19:51 #11
Hvis du har et felt(f.eks ID), som har max ved sidste post, kan du sætte følgende ind i formularens VedAktuel hændelse:

Private Sub Form_Current()

If Me.id = DMax("id", "[Tabel1]") Then
Me!Kommandoknap.Visible = False
Else
Me!Kommandoknap.Visible = True
End If

End Sub

Så er knappen ikke synlig, hvis det er sidste post. Tilsvarende med Dmin ved første post. Der er sikkert en mere elegant måde til at fortælle den den, at det er første eller sidste post, men den kender jeg ikke.
15. marts 2004 - 19:57 #12
Hekla, jeg tror at denne kode er hurtigere:

If Me.Currentrecord = Dcount("*", "[Tabel1]") Then
  Me!cmdNext.Visible = False
Else
  Me!cmdNext.Visible = True
End If

og

If Me.Currentrecord = 1 Then
  Me!cmdPrevious.Visible = False
Else
  Me!cmdPrevious.Visible = True
End If


PS: Tak for den pæne Karma, du gav mig (er jeg dog virkelig så hidsig? Hmm, det må jeg arbejde med ;)
Avatar billede hekla Nybegynder
15. marts 2004 - 20:26 #13
Thomas. Jeg tror dig når du siger, at det er hurtigere. Det undrer mig, hvis der ikke findes en direkte måde at hente oplysningen om at man står på sidste post - et eller andet i stil med acLast, men den kan jeg ikke få til at virke.

Tak i lige måde med hensyn til karmaen. Det er jo altid svært at kritisere en, der er bedre end en selv på det faglige. Og så kan man jo altid gribe til det personlige :o)
Avatar billede hekla Nybegynder
19. marts 2004 - 17:33 #14
Fandt du ud af det?
Avatar billede hekla Nybegynder
08. april 2004 - 11:06 #15
.
Avatar billede woolbox Nybegynder
14. april 2004 - 01:21 #16
Hej alle sammen,

Beklager ventetiden, min ADSL forbindelse blev pillet ned for nylig og i ved hvad ventetiden er på en ny! :o)

Hekla/Thomas -> Det ser jo fornuftigt ud, dog er jeg lidt i tvivl om hvad jeg skal indsætte som [Tabel1] da mit recordset bygger på en query (kun åbne sager vises). Kan jeg i stedet for Dcount("*", "[Tabel1]") skrive Dcount("*", Me.Recordset) eller noget tilsvarende?

Håber i kan hjælpe mig med det sidste! &#61514;

Ellers haft en god påske?

/Rasmus
Avatar billede woolbox Nybegynder
15. april 2004 - 01:58 #17
Hmmm, on Error Resume virker pefekt mht. fejlbeskeden.

Og ved at sætte allowAdditons til True når der klikkes på min egen NySag knap og slå den fra umiddelbart efter er alt OK :)

Tak for hjælpen!
Avatar billede woolbox Nybegynder
09. maj 2004 - 03:19 #18
Hvad fanden sker der her? - Havde sgu givet point her??

Og thomasjepsen, hvad fanden skete der med det spørgsmål vi havde gang i mht. det der UFO query snask?

Hvad sker deR??
09. maj 2004 - 07:44 #19
Hej Woolbox....velkommen tilbage til Eksperten :o)
Sidste weekend havde Eksperten et systemnedbrud, som kostede 13.000 indlæg (og en hulens masse point - 4-5.000 for mit vedkommende) :o(

Du skal bare lukke og give point igen.

Men fik du afklaret problemerne??
Avatar billede woolbox Nybegynder
16. maj 2004 - 00:01 #20
Hey Thomas, dobbelt nedbrud! :(

Men mystisk, ser ud til at de har fået merget noget gammelt med noget nyt!? - Jeg nåede at skirve ovenstående indlæg inden Exp gik ned igen, men samtidig har den fået fat i at jeg lukkede spørgsmålet fra før det første nedbrud.

Fuck mand, selv med 2 diske i et RAID-5 der står af burde man sgu da kun tabe data siden sidste backup, som naturligvis er fra natten inden nedbruddet, eller ....?

Well, nu hvor vi er online igen skal jeg lige tjekke mine to nyere spørgsmål, som først var forsvundet men nu er dukket op igen :) - Filmen skal lige spoles tilbage, du hører fra mig på spørgsmålet! :)
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