Avatar billede jessrasmussen Nybegynder
06. marts 2007 - 22:26 Der er 8 kommentarer og
1 løsning

Søg i database

Hej eksperter

Jeg har et problem med en søgefunktion i access database.

Hvis man søger i databasen efter kunstner på feks "kim larsen", så kommer der ikke noget frem, men hvis du søger på "kim" kommer alle frem med "kim" og hvis du søger på "larsen" kommer alle frem med larsen.
kim larsen er lagt ind i databasen som "larsen, kim" og hvis man søger på larsen, kim kommer alle frem, men hvis man søger "larsen kim" (uden komma) kommer der heller ikke noget frem.

1. Er det muligt at få den til at se bort fra det komma
2. Er det muligt at få den til at søge så den er ligeglad med om det er fornavn eller efternavn der skrives først.


Her er koden:

set rsdvd=server.CreateObject("ADODB.Recordset")
rsdvd.open "SELECT * FROM products WHERE lcase(producttype) LIKE'dvd %' AND ((lcase(productname) LIKE '%"&soeg&"%') OR (lcase(skuespiller) LIKE '%"&soeg&"%')) AND skjul = FALSE ORDER BY productname",conn,3


mvh

Jess
Avatar billede Slettet bruger
06. marts 2007 - 22:31 #1
tjae... men hvilken kollonne er det vi skal søge i?

her et eksempel:

set rsdvd=server.CreateObject("ADODB.Recordset")
rsdvd.open "SELECT * FROM products WHERE lcase(producttype) LIKE'dvd %' AND ((replace(lcase(productname),",","") LIKE '%"&soeg&"%') OR (replace(lcase(skuespiller),",","") LIKE '%"&soeg&"%')) AND skjul = FALSE ORDER BY productname",conn,3


\Dan
Avatar billede softspot Forsker
06. marts 2007 - 22:33 #2
prøv at smide et % ind i stedet for komma (og evt. mellemrum og andre whitepacetegn). Du kan evt. bruge replace til at udskifte med (eller regular expressions).

' udskift ", " (komma+mellemrum) med %
soeg = replace(soeg, ", ", "%")

' søg efter det specificerede
set rsdvd = server.CreateObject("ADODB.Recordset")
rsdvd.open "SELECT * FROM products WHERE lcase(producttype) LIKE'dvd %' AND ((lcase(productname) LIKE '%"&soeg&"%') OR (lcase(skuespiller) LIKE '%"&soeg&"%')) AND skjul = FALSE ORDER BY productname",conn,3
Avatar billede jessrasmussen Nybegynder
12. marts 2007 - 19:06 #3
undskyld den lange ventetid jeg røg lige på en forretningsrejse.

jeg har prøvet at sætte det ind dannielsen skriver men det lader til at der er problemer med det midtereste komma i ((replace(lcase(productname),",","")
og det midtereste komma i (replace(lcase(skuespiller),",","")

så det virker ikke
Avatar billede softspot Forsker
12. marts 2007 - 22:06 #4
Prøvede du mit eksempel?
Avatar billede jessrasmussen Nybegynder
13. marts 2007 - 17:47 #5
softspot, nej det prøver jeg iaften når ungerne er lagt
Avatar billede jessrasmussen Nybegynder
13. marts 2007 - 21:40 #6
Hej softspot

Jeg er ikke nogle ørn til dette. mener du imellem "".
Jeg kan ikke rigtigt forstå hvad du mener, kan du prøve at sætte det ind i formen.

set conn=server.createobject("adodb.connection")
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath("/database/service.mdb")&";" 'Access2000
conn.Open strConnect

set rscd=server.CreateObject("ADODB.Recordset")
rscd.open "SELECT * FROM products WHERE producttype LIKE'CD_%' AND ((lcase(productname) LIKE '%"&soeg&"%') OR (lcase(skuespiller) LIKE '%"&soeg&"%')) AND skjul = FALSE  ORDER BY productname",conn,3
Avatar billede softspot Forsker
13. marts 2007 - 21:53 #7
Jeg skulle mene nedenstående ville give dig et søgekriterie som tillod søgte. 

set conn=server.createobject("adodb.connection")
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath("/database/service.mdb")&";" 'Access2000
conn.Open strConnect

' udskift ", " (komma+mellemrum) med %
soeg = replace(soeg, ", ", "%")

' søg efter det specificerede
set rscd=server.CreateObject("ADODB.Recordset")
rscd.open "SELECT * FROM products WHERE producttype LIKE 'CD_%' AND (productname LIKE '%"&soeg&"%') OR (skuespiller LIKE '%"&soeg&"%')) AND skjul = FALSE  ORDER BY productname",conn,3


Vær dog opmærksom på at du stadig ikke, med dette, vil finde rækker med "larsen, kim", hvis din søgestreng indeholder "kim larsen". Til dette skal du over i at adskille ordene i søgestrengen og søge på dem enkeltvis.
Avatar billede softspot Forsker
13. marts 2007 - 22:08 #8
...og det var jo så krav nr. 2 ovenstående ikke kunne håndtere... :)

Dvs. løsingen så skal splitte søgestrengen op i de enkelte ord og komponere SQL-sætningen med hver enkelt ord:

' opdel alle kriterier i de enkelte ord (adskilt af mellemrum)
' komma'er fjernes fra søgestrengen inden den opdeles...
arrparts = split(replace(soeg, ",", ""), " ")
for each s in arrparts
  if len(s) > 0 then
    if len(sqlw) > 0 then
      sqlw = sqlw & " OR "
    end if
    sqlw = sqlw & "productname LIKE '%" & s & "%' OR skuespiller LIKE '%" & s & "%' "
  end if
next

' Hvis der var nogle søgeord, så omstilles kriterierne med parantes
' da de skal evalueres som en samlet enhed ifht. de andre kriterier
' i SQL-sætningen...
if len(sqlw) > 0 then
  sqlw = "AND (" & sqlw & ") "
end if

' Dan den endelige SQL-sætning
sql = "SELECT * " & _
    "FROM products " & _
    "WHERE producttype LIKE 'CD_%' " & _
    "AND skjul = FALSE " & _
    sqlw & _
    "ORDER BY productname"

' Hent data i databasen
set conn = server.createobject("adodb.connection")
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath("/database/service.mdb")&";" 'Access2000
conn.Open strConnect
set rscd = conn.Execute(sql)
Avatar billede jessrasmussen Nybegynder
13. marts 2007 - 22:19 #9
det gav det samme resultat.
jeg tror at jeg vil finde et sted jeg kan læse om det og på den måde få en bedre forståelse for hvad der sker med søgningen, for lige nu er jeg ret blank. Så håber jeg at kan bygge det op som jeg gerne vil have det.
men tusind tak for jeres hjælp og tid.

mvh

Jess
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
Kurser inden for grundlæggende programmering

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