15. marts 2004 - 03:22Der 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.
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
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 ...
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
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.
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)
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?
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(
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! :)
Synes godt om
Ny brugerNybegynder
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.