Avatar billede lsskaarup Nybegynder
25. maj 2004 - 16:31 Der er 20 kommentarer og
1 løsning

Søgning/filtrering via formular

Jeg har lavet en formular, som viser indholdet af an tabel.

Jeg vil nu godt udvide denne formular, men en søgefunktion.

Altså muligheden for at skrive et nyt navn i navnetfeltet, derefter trykke på søg-knappen, som så springer til posten som hedder det skrevne navn. Det må ved og mærke ikke opdatere i den post man skriver i.

Hvis I forstår.
Avatar billede mugs Novice
25. maj 2004 - 16:37 #1
Hvis du indtaster noget i navnefeltet, vil posten blive ændret. Denne kode benytter en inputbox hvori du indtaster en værdi, som der så søges efter:

Dim a As String
a = InputBox(Prompt:="Indtast kundenr.", Title:="Find kunde.", Default:="")
DoCmd.GoToControl "kundenr"
DoCmd.FindRecord a, acEntire, False, , True, acCurrent, True
25. maj 2004 - 16:41 #2
Få evt inspiration i "Filter og søgefunktionen", som jeg har liggende her: http://www.makeiteasy.dk/eksempler/Downloads.htm
Avatar billede lsskaarup Nybegynder
25. maj 2004 - 16:43 #3
Jamen hvordan laver jeg det så, skåret helt ud i pap
Avatar billede mugs Novice
25. maj 2004 - 16:45 #4
Lav en komandoknap på din formular og i dennes VedKlik hændelse kopierer du og indsætter min kode. Ret herefter tabel- og feltnavne tilk så de passer til din database.
Avatar billede lsskaarup Nybegynder
25. maj 2004 - 17:01 #5
Nu fatter jeg da slet ikke en klap.
Avatar billede mugs Novice
25. maj 2004 - 17:03 #6
Hvad er problemet?
Avatar billede lsskaarup Nybegynder
25. maj 2004 - 17:11 #7
Til dels at min lille hjerne er brændt sammen. ;-)

Nej, jeg har fået kommendokanppen til et virke nu, men hvad nu hvis jeg godt vil have de skal skrive navnet i en tekstboks, og søgeknappen så skal tage navnet derfra.
Avatar billede mugs Novice
25. maj 2004 - 17:14 #8
Sæt en tekstboks på din formular. Den kan f.eks hedde Tekst0:

Dim a As String
a = Me.Tekst0
DoCmd.GoToControl "kundenr"
DoCmd.FindRecord a, acEntire, False, , True, acCurrent, True
Avatar billede lsskaarup Nybegynder
25. maj 2004 - 22:39 #9
Fantatisk, det virker sgu. Hvis du lige gider forklare hvad koden gør.
Disse kan jeg dog godt selv regne mig frem til, med ret mig endelig, hvis det er forkert.

Dim a As String -> dimitionere variablen (a) som String
a = Me.Tekst0 -> variablen bliver sat lig indholdet af tekstfelt0 på denne form (me)
DoCmd.GoToControl "kundenr" -> udfør commandoen "gå til" feltet (kundenr) i tabellen
DoCmd.FindRecord a -> find record med indhold lig variablen.

Men så kender jeg ikke resten, kan jeg godt se det er noget med om den finde noget eller ej, men hvordan de lige fungerer ved jeg ikke. Kan du hjælpe med det?
Avatar billede mugs Novice
25. maj 2004 - 22:46 #10
Fuldstændig korrekt. Du må have problemer med denne linie:

DoCmd.FindRecord a, acEntire, False, , True, acCurrent, True

DoCmd.FindRecord a siger jo sig selv. Resten er de forskellige argumenter der følger til handlingen. Det nemmeste vil være, hvis du laver en makro og bruger handlingen SøgEfterPost. Når du har valgt denne handling, kan du nederst til venstre se de handlingsargumenter der følger handlingen.

Et fif til at komme videre er, at du laver en makro når du vil programmere. Afprøv makroen i din formular og når det fungerer kan du åbne db i databasevinduet og i menuen Funktioner > Makro > Konverter til VBA "oversætte" dine valg til VBA. Programmeringen indsættes nu i et modul og du kan kopiere relevante linier om indsætte dem  på det sted i din formular, hvor makroen var indsat.

Når dette fungerer kan du slette både makro og modul.
Avatar billede lsskaarup Nybegynder
26. maj 2004 - 08:15 #11
Jeg kan se, at hvis jeg siger Cancel til søgeknappen, eller ikke skriver noget, så får jeg en fejl, og mulighed for debugge. Hvordan kan det løses ?
Avatar billede mugs Novice
26. maj 2004 - 08:22 #12
Hvis du trykker cancel eller søger efter en tom streng får du fejl, da du jo netop har bedt Access om at søge, og nu vil du søge "efter ingenting". Det kan Access ikke klare.

Men når du får en fejl, må du jo også have et fejlnummer. Du kna derfor opfange denne fejl med en rutine der opfanger denne:

On Error GoTo Errorhandler
Her følger din kode
Errorhandler:
If Errornumber = 1234
Then Resume Next
End If

Jeg er ikke sikker på om Errornumber ikke skal erstatttes af Errno eller noget andet. Undersøger det lige.
Avatar billede mugs Novice
26. maj 2004 - 08:24 #13
Sådan:

If Err.Number = 1234 Then
Avatar billede lsskaarup Nybegynder
26. maj 2004 - 08:33 #14
Jeg får stadig en fejl (2142).

Jeg satte dette ind:

On Error GoTo Errorhandler
Errorhandler:
If Err.Number = 1234 Then
Resume Next
End If
Avatar billede mugs Novice
26. maj 2004 - 08:36 #15
Fejl 1234 var blot en prøve:
If Err.Number = 1234 Then
Erstat 1234 med 2142
Avatar billede lsskaarup Nybegynder
26. maj 2004 - 08:38 #16
hjælper ikke
Avatar billede mugs Novice
26. maj 2004 - 08:39 #17
Kan du sende db zippet til:

mugs@mail.dk
Avatar billede lsskaarup Nybegynder
26. maj 2004 - 09:43 #18
sendt
Avatar billede mugs Novice
26. maj 2004 - 10:03 #19
Modtaget, rettet og returneret.
Fejlen opstår hvis variablen a er Null. Jeg har tilføjet:

If a = "" Then
MsgBox "Der er ikke indtastet et søgekriterie."
Exit Sub
End If
og så en normal kode til søgning
Avatar billede lsskaarup Nybegynder
26. maj 2004 - 17:57 #20
Så virkede det. Tak for hjælpen
Avatar billede mugs Novice
26. maj 2004 - 18:08 #21
Selv tak
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