13. august 2001 - 14:22Der er
35 kommentarer og 2 løsninger
Søg i kombo felt
Jeg har 4-5 felter i en formular hvor jeg benytter kombo-felter. I alle andre typer felter kan jeg fint søge med en søg-post-kommandoknap, jeg har lavet...
Men hvordan gør jeg hvis det drejer sig om at finde en bestemt værdi i en kombo box, uden at skulle lave en hel forespørgsel hver gang - kan jeg det?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Indholdet i en kombobox er det, der står i selve feltet over listen. Det har samme muligheder med det felt, som med almindelige text felter.
Men det er noget andet, hvis det er de data, der står i selve pull-down delen af feltet. De er ikke umiddelbart tilgængelige, som data, men kun som parametre til selve kombobox feltet.
Prøv at kigge forbi www.access.hugopedersen.dk og se om ikke der skulle være et af mine moduler der indeholder en søgefunktion til en combobox - jeg mener jeg har lavet en.
Hugopedersen -> modcboxutilities.bas ligner det rigtige, men jeg er desværre nybegynder med Access - så jeg har lidt svært ved at gennemskue hvordan jeg indbygger det i min base....
OK - jeg skal lige rode lidt i mine sourcefiler for at finde et sted hvor jeg bruger det. Jeg kan ikke huske i hvilken forbindelse det var jeg lavede det, så jeg skal lige kigge lidt. Måske er det noget jeg har der hjemme og så kan jeg ikke svare før i aften.
Send lige din mailadresse til mail@hugopedersen.dk for en sikkerheds skyld.
Hvis der er tale om en Table/Query, så vil denne paramter angive den tabel eller query, som indeholder mulighederne. Dem får du så fat i, som almindelige records.
Hvis min funktion bruges så er syntaxen intX = fhpSearchComboBox(cboName, \"Search for\") Me.cboName = Me.cboName.ItemData(intX)
Det der sker er at man kalder funktionen fhpSearchComboBox med navnet på comboboxen og den streng man vil søge efter. Man før så et tal tilbage der er det item der indeholder den første forekomst af teksten. Den skiftes der så til i næste kodelinie. Hvis strengen ikke findes, returneres 0 og der vælges bare det første element på listen.
Her er koden jeg fandt på din side - efter beskrivelsen at dømme: \"Purpose: Search for a value in a combobox\" - Er det præcist dét, jeg leder efter...
Men hvordan gør jeg rent praktisk? - det er måske det du vil kigge på senere?
--- On Error GoTo Error_fhpSearchComboBox Dim intLineNum As Integer \'Counter Dim intNumRecs As Integer \'Counter Dim bolFound As Boolean \'Test variable Dim intLowNum As Integer \'Counter Dim intHighNum As Integer \'Counter Dim intMidNum As Integer \'Counter
intLineNum = -1 \'Negative number indicates string not found intNumRecs = cboIn.ListCount \'Number of items bolFound = False \'Initialize to not found intLowNum = 0 \'Lowest number intHighNum = intNumRecs - 1 \'Highest number
Do intMidNum = (intLowNum + intHighNum) \\ 2 If UCase(strSearch) < UCase(cboIn.ItemData(intMidNum)) Then intHighNum = intMidNum - 1 ElseIf UCase(strSearch) > UCase(cboIn.ItemData(intMidNum)) Then intLowNum = intMidNum + 1 Else bolFound = True \'Value found intLineNum = intMidNum End If Loop Until bolFound Or (intHighNum < intLowNum)
fhpSearchComboBox = intLineNum \'Return line found, or -1 if not found
Så vidt jeg kan se, er den angivne funktion fra hugopedersen bygget på en binær søgning, og virker derfor kun, hvis listen af linier i comboboxen er sorteret alfabetisk - hvilket de næppe kan forudsættes at være.
Princippet i funktionen er OK, men man bør bare løbe listen igennem fra en ende af, og som regel er der heller ikke så mange linier i en combobox, at det kan svare sig at lave en binær søgning.
Teksten i do-loopen kan f.eks. udskiftes med:
For intLowNum = 0 to intNumRecs - 1 If cboIn.ItemData(intLowNum) = strSearch then IntLineNum = intLowNum Exit for end if Next
Ved ikke helt om jeg har udtrykt det helt rigtigt, så for en ekstra sikkerheds skyld kommer lige en nærmere forklaring:
Jeg har X antal posteringer(kunder) som jeg bladrer imellem i en formular, ved f.eks. at lave en alm. tekstsøgning i nøgle felter for at finde en kunde (flere kunder) med netop dét kriterie.
Men hvis jeg f.eks. vil finde en kunde med en vis værdi i et felt der er lavet som komboboks i formularen, kan jeg ikke søge med alm. søgefunkt.
Det er altså ikke fordi der findes et hav af forskellige værdier i comco-box jeg har svært ved at finde, der er problemet.
Dét er blot at hvis jeg vil vælger en bestemt værdi (måske er der kun 5-10 stk) i en box og få vist resten af dataerne tilhørende denne værdi.
Se lige denne tekst længere oppe !!!! Det er ikke umiddelbart muligt, men via VBA er det selvfølgelig muligt.
Indholdet i en kombobox er det, der står i selve feltet over listen. Det har samme muligheder med det felt, som med almindelige text felter.
Men det er noget andet, hvis det er de data, der står i selve pull-down delen af feltet. De er ikke umiddelbart tilgængelige, som data, men kun som parametre til selve kombobox feltet.
Kommentar fra jjensen ------------------------------- Hmm - så kan jeg altså ikke søge efter en bestemt værdi som er en af mulighederne i kombox feltet?
Så burde du kunne gøre det med knapperne der hedder noget i retning af \'filter by form\' ( på den engelske - jeg husker ikke hvad det hedder på dansk )
Opdagede lige jeg kunne højre klikke i comboboxen, og filterer efter den teskt jeg skrev - ulempen er lidt at man vel skal skrive det nøjagtigt som angive - og ikke kan vælge værdien i boxen...
Når du har en form freme i Design visning, så har du også Vindiet \"Egenskaber\" / \"Properties\" fremme.
Hvis ikke, så højreklik med musen på øverste venstre hjørne af formen og vælg Egenskaber/Properties. Så komer det i hvert tilfælde frem.
Herefter klikker du en enkelt gang på f.eks. Øverste venstre hjørne af formen, hvorefter du i egeneskabs-vinduet ser alle egenskaber for selve formen. Vælger du dér fanebladet hændelser/events, kan du bl.a se en linie, der hedder OnOpen. Hvis du klikker en gang der og derefter på den lille knap med prikkerne, der så kommer frem til højre for feltet, så kan du der vælge Kode. Nu får du søreme det hele serveret på et sølvfad:
Du skal kun klippe-klistre de to linier:
Me.filter = \"\" Me.FilterOn = True
ind der og så klikke oppe på Access knappen næsten øverst i venstre hjørne af vinduet. Så er du tilbage i Access igen.
Derefter klikker du en enkelt gang på det tekstfelt \"valg\", som du først har placeret i headeren af formen (læg mærke til, at formen faktisk er opdelt i header mellemled og footer). Headeren kan udviddes nedadtil, ved blot at klikke og holde på stregen imellem de fede grå vandrette stolper imens du trækker lidt nedad og så slipper musekanppen igen. Grunde til, at tekstfeltet skal ligge der er, hvis du skulle komme til at definere et kriterie, som ingen records kan opfylde, så vil alt inklusiv dit tekstfelt forsvinde fra mellemleddet af formen ! Når du har klikket den ene gang på tekstfeltet, vælger du \"After Update\" linien ovre i \"Egenskab\"/\"Properties\" under fanebladet \"Hændelser\"/\"Events\". Her klikker du så igen på den lille knap med prikkerne, som komer frem ude til højre for feltet. Og derefter vælger du Kode igen. Vupti - så er det meste arbejde allerede lavet. Du indsætter blot linien:
Tusind tak indtil videre - til jer begge. Problemet er nu løst - vil benytte moses \"brugervenlige\" udgave på et lidt senere tidspunkt!
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.