10. november 2010 - 08:48Der er
10 kommentarer og 1 løsning
Søgning på flere felter i tabel.
Hej Eksperter
Jeg er helt ny i Visual Basic og Access.
Jeg har lavet en form der via en forespørgsel viser en række kunder. Kundetabellen indeholder både en kolonne for fornavn og en for efternavn. Nu ønsker jeg at foretage søgningen således at det ord jeg skriver i søgefeltet søger på både fornavn og efternavn samtidig således at kunderne 'Hans Jensen' og 'Jens Hansen' vises hvis jeg søger på 'hans'. Desuden ønsker jeg at min liste opdateres hver gang jeg jeg indfører et nyt bogstav i søgefeltet således at når jeg har indført 'han' vises
Hans Jensen Jens Hansen Hanne Olsen
Når jeg så tilføjer s vil Hanne Olsen forsvinde. Man skal altså ikke trykke på en knap 'søg'.
Jeg er nået frem til at sql-stamentet må være
SELECT fornavn,efternavn,adresse FROM kunder WHERE fornavn LIKE [søgeordet] OR efternavn LIKE [søgeordet];
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Selve SQL-sætningen jeg skrev er den rigtige med undtagelse af at det skal være
SELECT kunder.fornavn,kunder.efternavn,kunder.adresse FROM kunder WHERE kunder.fornavn LIKE *[søgeordet]* OR kunder.efternavn LIKE *[søgeordet]*;
Jeg ønsker jo både at der bliver søgt i efternavn og fornavn.
Men problemet er egentlig mere hvordan jeg skriver min visual basic funktion, og hvordan får jeg den til at hente søgeteksten fra input feltet "soegetekst" i formularen "VisKunder" og derefter får den til at opdatere den liste som findes i formularen "VisKunder". Indtil nu viser den alle kunder via anvendelsen af en forespørgsel "ForespoergselVisDeltagere".
Du opretter en Fortløbende formular og benytter et filter.
I formularens hovede placerer du dit søgefelt (soegefelt)
I VBA koden lægger du:
Private Sub Form_Open(Cancel As Integer) Me.soegetekst = Null Me.Refresh Me.FilterOn = False End Sub
Private Sub soegetekst_KeyUp(KeyCode As Integer, Shift As Integer) Me.Refresh If (Me.soegetekst <> "") And (Not IsNull(Me.soegetekst)) Then 'Filtrer posterne Me.Filter = "fornavn Like '*" & Me.soegetekst & "*' OR efternavn Like '*" & Me.soegetekst & "*'" Me.FilterOn = True
'Placer cursoren Me.soegetekst.SelLength = 0 Me.soegetekst.SelStart = Len(Me.soegetekst) End If End Sub
M.h.t. mellemrum drejer det sig om at Access er misforstået venlig og automatisk fjerner alle blanktegn, der tastes sidst i et felt. Det lader så til at du er på samme spor, idet du jo også trimmer strengen.
M.h.t. "Me": Ja, Me er en forkortelse, som refererer til den formular eller rapport, som koden afvikles i.
Ja det kører. Mange tak. Altså med undtagelse af det med mellemrum.
Hvis man for eksempel allerede har tilføjet 'Dorrit' fordi man kender fornavnet, så får man mange resultater. Hvis man så yderligere vil tilføje 'mellemrum e' fordi personen hedder 'Dorrit Eggert' til fornavn ja så bliver mellemrum konstant fjernet i søgefeltet så man slet ikke kan komme til at tilføje 'e'. Hvis der står 'Dorrit E' i søgefeltet vil trim() jo ikke påvirke søgningen. Men så langt får jeg altså ikke lov til at komme fordi mellemrum fjernes hver gang jeg indtaster det. Er der en løsning på dette?
Du kunne jo indbygge en lille finte, der snyder Access. I søgefeltet udskifter du mellemrummet med en underscore - og i filteret bytter du dem så om igen:
Private Sub soegetekst_KeyUp(KeyCode As Integer, Shift As Integer) Me.Refresh If KeyCode = 32 Then Me.soegetekst = Me.soegetekst & "_" If (Me.soegetekst <> "") And (Not IsNull(Me.soegetekst)) Then Me.Filter = "fornavn Like '*" & Replace(Me.soegetekst, "_", " ") & "*' OR efternavn Like '*" & Replace(Me.soegetekst, "_", " ") & "*'" Me.FilterOn = True
Me.soegetekst.SelLength = 0 Me.soegetekst.SelStart = Len(Me.soegetekst) End If End Sub
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.