Avatar billede heyn Nybegynder
10. november 2010 - 08:48 Der 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];

MVH Christian
Avatar billede jensen363 Forsker
10. november 2010 - 08:57 #1
SELECT DinTabel.Navne
FROM DinTabel
WHERE (((DinTabel.Navne) Like "han*" Or (DinTabel.Navne) Like "*han*"));
Avatar billede heyn Nybegynder
10. november 2010 - 10:08 #2
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".

MVH Christian
Avatar billede fdata Forsker
10. november 2010 - 22:27 #3
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
Avatar billede heyn Nybegynder
11. november 2010 - 00:42 #4
Hej fdata

Det ser godt ud.
Et par enkelte spørgsmål.
Me? Er det formens navn el. betyder den form hvor koden kaldes fra?

Hvad sker der her?

Me.soegetekst.SelLength = 0
Me.soegetekst.SelStart = Len(Me.soegetekst)

Hvad betyder Shift i dette funktionskald?
Private Sub soegetekst_KeyUp(KeyCode As Integer, Shift As Integer)

Skal
If (Me.soegetekst <> "") And (Not IsNull(Me.soegetekst)) Then
...
ikke stå før
Me.Refresh
og
Me.FilterOn = False
før
Me.Refresh
?

Ellers skal du have mange tak. Jeg syntes virkelig dit indlæg giver mig et godt indblik i Access og VBA.

MVH Christian
Avatar billede heyn Nybegynder
11. november 2010 - 09:31 #5
Hurra... Det virker.
Me må altså være den formular funktionen kaldes fra.

Der er et lille problem med koden.

Når jeg skriver mellemrum i søgefeltet bliver det fjernet ved næste indtastning.

Har det ikke noget at gøre med
Me.soegetekst.SelLength = 0
Me.soegetekst.SelStart = Len(Me.soegetekst)
?

Jeg har iøvrigt tilføjet trim() omkring Me.soegetekst i filterdelen. Men kun der.

MVH Christian
Avatar billede heyn Nybegynder
11. november 2010 - 10:02 #6
Jeg tilføjede også

else
  Me.FilterOn = False
Avatar billede fdata Forsker
11. november 2010 - 22:35 #7
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.

Hvad er status? Kører det?
Avatar billede heyn Nybegynder
13. november 2010 - 14:30 #8
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?

MVH Christian
Avatar billede fdata Forsker
14. november 2010 - 18:50 #9
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
Avatar billede heyn Nybegynder
14. november 2010 - 19:30 #10
Mange tak for hjælpen. Du har været mig til stor hjælp og jeg har lært en del om Access / VBA.

MVH Christian
Avatar billede fdata Forsker
15. november 2010 - 17:53 #11
Takker for point (og de pæne ord) :o)
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