06. marts 2007 - 22:26Der 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
AI-first iværksættere vil integrere AI og gen AI i alt, hvad de gør. AI vil styre, hvordan de handler.
12. august 2024
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
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).
' 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
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),",","")
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
' 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.
...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)
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
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.