25. maj 2004 - 16:31Der 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 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
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.
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.
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?
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.
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.
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.