Avatar billede mecenor Nybegynder
25. juli 2005 - 01:05 Der er 19 kommentarer og
1 løsning

Søgning i flere felter.

I forbindelse med et site har jeg en søgning, der søger i flere forskellige tabeller, lavet med en query. Problemet er, at hvis der søges på ord fra 2 forskellige felter, fx navn og efternavn, kommer der med OR ingen resultater. En mulighed var at smide al hvad der kan søges på ind i ét felt (men ikke manuelt). Kan man det i access?
Alternative muligheder? Jeg bruger ASP/VB-script.
Avatar billede hugopedersen Nybegynder
25. juli 2005 - 06:14 #1
Du kan sagtens lave en query hvor du laver et felt der består af alle dine felter i dine tabeller - indsæt f.eks.  =[felt1] & [felt2] & [felt3] Så får du et felt der indeholder de valgte felter og du kan søge i dem.
Avatar billede terry Ekspert
25. juli 2005 - 08:12 #2
SELECT * FROM ...... WHERE navn = 'navn1' OR efternavn = 'efternavn1'

does this NOT work?
Avatar billede terry Ekspert
25. juli 2005 - 08:15 #3
you should try building the SQL in ASP and then copy it to Access query builder to see if it works there. Anotehr method is to make it in Access and then when the syntax is correct (working) copy it to ASP!
Avatar billede mecenor Nybegynder
25. juli 2005 - 09:51 #4
Den kode jeg bruger nu:
call dbstart("SELECT * FROM soegning WHERE navn LIKE '%" & felt & "%' or efternavn LIKE '%" & felt & "%' or mail LIKE '%" & felt & "%' ORDER BY navn")
hvor soegning er en query i access.

Hugopedersen:
Det lyder godt, men jeg ved ikke hvor i access jeg skal skrive dette? Et sted når jeg laver en ny query i design view?

Terry:
Da de indtastede søgeord kommer fra et felt, skelnes der ikke mellem navn og efternavn. Kan jeg bygge min SQL anderledes op?
Avatar billede terry Ekspert
25. juli 2005 - 09:59 #5
Your SQL looks OK to me!

Try

Dim sSQL

sSQL = ("SELECT * FROM soegning WHERE navn LIKE '%" & felt & "%' or efternavn LIKE '%" & felt & "%' or mail LIKE '%" & felt & "%' ORDER BY navn")

to see what the SQL looks like before you call dbstart

You could also copy the SQL INTO Access and see whatthe result is, but you may need to change % to *
Avatar billede mecenor Nybegynder
25. juli 2005 - 10:23 #6
Søgningen virker fint med ét ord, men søgningen spørger jo på navn OR efternavn, så hvis den finder en post hvor både navn AND efternavn passer, så 'tæller' den åbenbart ikke.

Min db-kald er:
sub dbStart(sqlstr)
    Set rs = Server.CreateObject("ADODB.Recordset")
    strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("log/db.mdb")
    rs.Open sqlstr, strDSN, 1
end sub
Avatar billede mecenor Nybegynder
25. juli 2005 - 10:25 #7
Jeg har ikke brugt SQL direkte i access før, så hvor skal jeg indsætte det? :)
Avatar billede terry Ekspert
25. juli 2005 - 10:32 #8
25/07-2005 09:51:51
you wrote "....hvor soegning er en query i access."!

So you just make a query in Access. Or is soegning a table?
Avatar billede terry Ekspert
25. juli 2005 - 10:36 #9
Lets say you have the following data in your table

Navn    Efternavn
----    ---------
Jan    Jansen
Jan    Andersen
Kim    Hansen




and you enter Jan in your search field (felt)


You should see these in the result.

Jan    Jansen
Jan    Andersen
Avatar billede mecenor Nybegynder
25. juli 2005 - 10:38 #10
Nej, soegning er en query, men jeg har først lige set nu, at der er noget der hedder SQL View.
Avatar billede mecenor Nybegynder
25. juli 2005 - 10:39 #11
Ja, men hvis jeg søger på både Jan og Jansen, så kommer der intet!
Avatar billede terry Ekspert
25. juli 2005 - 10:47 #12
?
Can I see the SQL?

You can maybe send me your Access DB with the SQL in a query?

eksperten@NOSPAMsanthell.dk
remove NOSPAM
Avatar billede terry Ekspert
25. juli 2005 - 15:35 #13
If you dont find a solution then drop a comment here around the end of august and I'll see if I can find a bit more time :o)

mvh
Terry
Avatar billede mecenor Nybegynder
25. juli 2005 - 15:42 #14
Takker, go ferie ;)
Avatar billede fdata Forsker
25. juli 2005 - 21:30 #15
Hvad mener du med "hvis jeg søger på både Jan og Jansen, så kommer der intet!"?
Du søger vel på Jan eller på Jansen (altså 2 søgninger) - eller hvad?
- Jan burde jo give 2 hit
- Jansen burde give 1 hit
Virker det ikke?
... og så husk lige, at "Navn" i visse situationer opfattes af Access som et reserveret ord. Brug hellere Fornavn.
Avatar billede mecenor Nybegynder
26. juli 2005 - 11:19 #16
En søgning på Jan ville give 2 hits og på Jansen, 1 hit, ja. Men jeg vil kunne søge på 'Jan Jansen' - og der får jeg 0 hit. Søgefelt (Jan Jansen) er ikke nok LIKE Jansen...eller hvad?
Man kunne løse det ved at have et felt med begge navne, i.e. Jan Jansen, men så ville en søgning på fornavn og fx email stadig ikke virke (Jan mail@Jansen.dk).
Nogle bud?

Jeg tager info om navn/fornavn til efterretning, tak.
Avatar billede hugopedersen Nybegynder
26. juli 2005 - 11:27 #17
Hvis du kun vil have et søgefelt, så er du nødt til at lave et felt med alle informationerne som vi startede ud med, men det er heller ikke nogen garanti for at det vil give dig de resultater du ønsker.
Avatar billede mecenor Nybegynder
26. juli 2005 - 11:55 #18
Hugopedersen:
Ja, der er kun et søgefelt til rådighed, så selv om et felt i DB med al info måske ikke er optimalt, så er det nok det bedste p.t.
Hvor sætter man (som du skrev) =[felt1] & [felt2] & [felt3] ind i en query?

Min sogning-query ser sådan ud:
SELECT Huse.ID AS Huse_ID, Huse.Navn AS Huse_Navn, Vine.ID AS Vine_ID, Vine.Hus, Vine.Navn AS Vine_Navn, Vine.Slags, Vine.Aargang, Vine.Pris, Vine.Drue, Vine.Meta, Huse.Område, Huse.Land, Vine.Lager
FROM Huse INNER JOIN Vine ON Huse.ID = Vine.Hus;
Avatar billede hugopedersen Nybegynder
26. juli 2005 - 12:01 #19
SELECT [fldName] & " " & [fldLastName] AS fldSearch FROM tblNames;
Læg mærke til '& " " &' mellem felterne - det er nødvendigt hvis du vil kunne søge på f.eks. Jan Jansen  Uden mellemrum vil din søgning ikke returnere noget.
Avatar billede mecenor Nybegynder
26. juli 2005 - 13:12 #20
Sådan, hella sweet! Det var præcis det jeg søgte. Jeg opretter et spg. til dig med point (da de oprindelig point gik til hjælp fra Terry).
Det eneste der nu mangler, er en slags opdeling af søgeord, så orderne ikke behøves at komme i samme rækkefølge i søgningen, fx med:

SELECT fldName & " " & fldLastName & " " & fldEmail AS fldSearch FROM tblNames;
giver en søgning på 'Jan Jansen mail@Jansen.dk' det rigtige hit, mens søgningen 'Jan mail@Jansen.dk Jansen' ikke gør. Det er et ekstra spørgemål og får selvfølgelig ekstra point (opretter det separat, hvis der ikke lige er en hurtig løsning).

Man kunne også som nødløsning tilpasse rækkefølge i query i forskellige kombinationer (fx 'fldName & " " & fldLastName & " " & fldEmail' og 'fldName & " " & fldEmail & " " & fldLastName'), men med 10+ felter bliver det ret omfattende - hvordan med hastighed, ville det betyde noget at femdobble længden på det felt der søges i (250 felter, med ca. 1.000 tegn(i.e. normalt 200 tegn))?
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