webForumDet fria alternativet

två sökmotorfrågor

ASP

10 svar · 333 visningar · startad av magnusfeldth

Medlem sedan jan. 20034 480 inlägg
Frågan#1

detta är min kod för en enkel sökmotor:

 <% Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("addemalmbergadmin/tubsockan.mdb")

SQL2 = "select top 5 * from sockrates where rubrik like '%" & request.form("search1") & "%' ORDER BY ID DESC"
set RecSet = connect.execute(SQL2)

do until recset.EOF
%>
<% If RecSet.EOF Then %>
Sökordet <b>" & Request.Form("sokord") & "</b> gav inga träffar! 
<% end if %>
<%=recset("ID")%>&nbsp;<%=recset("Rubrik")%><br>
<%
recset.Movenext
Loop
recset.Close %>

Vad jag vill lägga till är ett meddelande om sökningen inte gav några träffar, samt ett meddelande om en sökning ger mer än 5 träffar att man kan gå till "länk" för att se samtliga sökresultat.
Mitt försök med

<% If RecSet.EOF Then %>
Sökordet <b>" & Request.Form("sokord") & "</b> gav inga träffar! 
<% end if %>

visade sig helt felaktigt...

Medlem sedan juli 20003 825 inlägg
#2
<%

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("addemalmbergadmin/tubsockan.mdb")

SQL2 = "select top 5 * from sockrates where rubrik like '%" & request.form("search1") & "%' ORDER BY ID DESC"
set RecSet = connect.execute(SQL2)

If RecSet.EOF Then
	response.write "Sökordet <b>" & Request.Form("sokord") & "</b> gav inga träffar!" 

ELSE
	do until recset.EOF
	response.write recset("ID") & " " & recset("Rubrik") & "<BR>"

	recset.Movenext

	Loop

	recset.Close
END IF
%>

Detta är din kod men i en annan ordning. Jag är inte helt säker på att ett fält vid namn ID fungerar. Testa intID i stället och se om det blir någon skillnad. ID kan vara reserverat.

Medlem sedan juni 200032 967 inlägg
#3

ID är icke reserverat, och kan således användas fritt. :)

För att lösa den andra frågan om "fler än fem träffar", så är det ju bara att ställa en SELECT COUNT-fråga med samma villkor som sökfrågan.

Mvh

Medlem sedan jan. 20034 480 inlägg
#4

och hur skriver jag det? (n00bie men jag lär mig!)

Medlem sedan juni 200032 967 inlägg
#5
strSQL = "select count(*) from sockrates where rubrik like '%" & request.form("search1") & "%' ORDER BY ID DESC"
set objRS = connect.execute(strSQL)
intAntal = CInt(objRS(0))
if intAntal > 5 then
  ' Alldeles för många, för böveln!
end if

Mvh

Medlem sedan jan. 20034 480 inlägg
#6

och den skall ställas istället för den andra söksträngen

SQL2 = "select top 5 * from sockrates where rubrik like '%" & request.form("search1") & "%' ORDER BY ID DESC"
set RecSet = connect.execute(SQL2)

, eller?

Medlem sedan juni 200032 967 inlägg
#7

Du ville väl ha det resultatet utskrivet också? Alltså; koden utöver den kod som skriver ut de 5 första av sökresultaten.

Medlem sedan jan. 20034 480 inlägg
#8

då har jag problem var den skall sättas in...

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'ID' as part of an aggregate function. 

/assistenten.asp, line 379
<h3><b>Sökresultat:</b><br>
              <% Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("addemalmbergadmin/tubsockan.mdb")

SQL2 = "select top 5 * from sockrates where rubrik like '%" & request.form("search1") & "%' ORDER BY ID DESC"
set RecSet = connect.execute(SQL2)

If RecSet.EOF Then %>
Sökordet <b><%= Request.Form("search1") %></b> gav inga träffar! Du är tydligen för puckad för att söka! Kan du ens öppna en dörr? Om du kan det, gå ut och skäms!
<% else %>
<% do until recset.EOF
%>

<%=recset("ID")%>&nbsp;<%=recset("Rubrik")%><br>
<%
recset.Movenext
Loop 
recset.Close %>
<% end if %>
<% Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("addemalmbergadmin/tubsockan.mdb")

strSQL = "select count(*) from sockrates where rubrik like '%" & request.form("search1") & "%' ORDER BY ID DESC"
set objRS = connect.execute(strSQL)
intAntal = CInt(objRS(0))
if intAntal > 5 then %>
Alldeles för många, för böveln!
<% end if %>
</h3>
Medlem sedan jan. 20032 285 inlägg
#9

Jag tror nog att detta ska funka.

strSQL = "select ID, (select count(*) from sockrates where rubrik like '%" & request.form("search1") & "%') as ggr from sockrates where rubrik like '%" & request.form("search1") & "%' ORDER BY ID DESC"
------
intAntal = objRS("ggr")

Hoppas nu inte att jag har helt fel. :r

Medlem sedan juni 200032 967 inlägg
#10

Hemskt ledsen, bort med ORDER BY ur den andra SQL-frågan:

strSQL = "select count(*) from sockrates where rubrik like '%" & request.form("search1") & "%'"

Mitt misstag. Kattenpejst slog till igen.

Mvh

Medlem sedan jan. 20034 480 inlägg
#11

thanks, nu funkar det!

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)