Hejsan!! Något åt detta hållet borde fungera. Har inte testat koden så du får labborera lite. <code> Bara så att du är medveten om det, denna sökning kommer att ta _lång_ tid om tabellen är stor, eftersom databasmotorn måste kontrollera varje rad för att se om ordet/orden finns med. Den kan alltså inte använda sig av något index på kolumnen. Tackar!! Jo, visst kan den det, men indexet går inte att utnyttja i denna frågan. Indexet är ju uppbyggt i den ordningen som tecknen kommer i, dvs strängar som börjar på a ligger först, därefter b osv. Men eftersom din fråga inte specificerar början på villkoret, så vet den ju inte var den ska börja, alltså måste den göra en full table-scan för att kontrollera varje rad. Nepp!! Innan du kör execute(stmSQL) så kan du lägga in Lägger ut koden istället... lyckades inte med utskrift :( Pröva detta. Om du får ett felmeddelande så skicka detta + enbart den kodraden. En lite rackare på slutet Nu börjar det likna nåt..Sökning i DB
Finns det nåt sätt att söka fram fler än ett enda ord ur databasen.
Nedan exempel plockar fram ett ord, med jag skulle vilja kunna plocka ut fler om strängen innehåller kommatecken eller mellanslag mellan orden.
SokOrd = Request.Form("sokord")
SQL="SELECT * FROM tabell WHERE text LIKE '%" & SokOrd & "%' "
Det kanske finns nåt sätt att sortera upp strängen innan den körs i databasen??
mvh
TorbjörnSv: Sökning i DB
<%
stmSQL = "Select * From MinTabell Where "
varSeek = Split(Trim(Request.Form("Seek")))
For Each varSeekWord In varSeek
If varMoreWord Then stmSQL = stmSQL & " Or"
stmSQL = stmSQL & " MittFält Like '%" & varSeekWord & "%'"
varMoreWord = True
Next
%>
/JanneSv: Sökning i DB
dim criterias
dim criteria
dim slike
dim ssql
criterias = split(request.form("search"), ",")
for each criteria in criterias
slike = slike & " LIKE '%" & criteria & "%' OR"
next
slike = left(slike, len(slike) - 2)
ssql = "SELECT Name, Adress, Phone FROM Kings WHERE " & slike & ";"
</code>Sv: Sökning i DB
Sv: Sökning i DB
Skall testa lite och se vilket som funkar!
Tänkte på Christoffers inlägg om index. Kan inte databasen indexera den aktuella kolumnen, eller är jag ute och snedseglar nånstans..? :)
mvh
TorbjörnSv: Sökning i DB
Sv: Sökning i DB
Det vill sig inte..!
Har testat att använda bägge exemplen ovan, men lyckas inte få något av dessa att fungera. Nåt fel gör jag säkert....
Har nog lyckats producera de flesta felmeddelanden som finns, så jag tror inte det kan ge någon ledning heller.
Finns det nån som kanske kan utveckla exemplen ovan lite mer så vore jag tacksam. vb-funktionen Split verkar vara en smidig lösning att dela upp strängar så om det går att spinna vidare på detta kanske..??
Liksom tidigare så är det endast en kolumn inblandad, vilken tillfrågas från ett formulärfält. Tabb eller komma-separatorer bör förekomma mellan sökord.
mvh
TorbjörnSv: Sökning i DB
respons.write stmSQL
Då får du en utskrift av SQL uttrycket innan felmeddelandet kommer. Genom denna går det lättare att leta fel. Lägg gärna ut felmeddelande inkl kod så blir det lättare att hjälpa dig.
/JanneSv: Sökning i DB
Ibland känner man sig oduglig... :o
Well here it is !
-------------------------------------------------------------
val = Split(Request.Form("val"), ",")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("data/travel.mdb"))
SQL ="SELECT * FROM tbtraveller WHERE"
varSeek = Split(Trim(Request.Form("val")))
Response.Write(SQL)
Set RS = Conn.Execute(SQL)
For Each varSeekWord In varSeek
If varMoreWord Then SQL = SQL &" OR "SQL = SQL & " intresse LIKE '%" & varSeekWord & "%'
varMoreWord = True
Next
Do until RS.EOF
Response.Write(RS("fnamn"))
RS.MoveNext
Loop
-----------------------------------------------------------------
mvh TorbjörnSv: Sökning i DB
Oduglig? Äsch, vem kan vara proffs på allt...?
/Janne
--------------------------
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("/data/travel.mdb"))
stmSQL ="SELECT * FROM tbtraveller WHERE"
varSeek = Split(Trim(Request.Form("val")))
For Each varSeekWord In varSeek
If varMoreWord Then stmSQL = stmSQL & " OR "
stmSQL = stmSQL & " intresse LIKE '%" & varSeekWord & "%'
varMoreWord = True
Next
Response.Write stmSQL
Set RS = Conn.Execute(stmSQL)
Do until RS.EOF
Response.Write(RS("fnamn"))
RS.MoveNext
Loop
------------------------------------Sv: Sökning i DB
Försökte att dubbelfnutta in satsen lite här och var, men den är lite grinig.. :)
Felmeddelande:
Oavslutad strängkonstant
/travel/test_search.asp, line 12, column 57
stmSQL = stmSQL & " intresse LIKE '%" & varSeekWord & "%'
--------------------------------------------------------^
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("data/travel.mdb"))
stmSQL ="SELECT * FROM tbtraveller WHERE"
varSeek = Split(Trim(Request.Form("val")))
For Each varSeekWord In varSeek
If varMoreWord Then stmSQL = stmSQL & " OR "
stmSQL = stmSQL & " intresse LIKE '%" & varSeekWord & "%'
varMoreWord = True
Next
Response.Write stmSQL
Set RS = Conn.Execute(stmSQL)
Do until RS.EOF
Response.Write(RS("fnamn"))
RS.MoveNext
LoopSv: Sökning i DB
stmSQL = stmSQL & " intresse LIKE '%" & varSeekWord & "%'"
/JanneSv: Sökning i DB
Det funkar................
Och ett stort tack för hjälpen.
mvh
Torbjörn