jag har en sökfunktion som fungerar galant där man söker efter ett lag så kommer alla matcher mot det laget fram i en lista. Nu är det så om man skriver in ett lag som inte finns kommer man till en felsida. Jag vill att man skall få fram texten "Inget hittades!".
Varför fungerar inte denna kod?
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("db/amica.mdb")
If Request.QueryString("typ") = "alla" Then
strSQL = "SELECT * FROM Post ORDER BY Datum DESC"
Set Rs = Conn.Execute(strSQL)
ElseIf Request.QueryString("typ") = "sok" Then
strSQL = "SELECT * FROM Post WHERE Motstandare LIKE '%" & Request.Form("sok") & "%' ORDER BY Datum DESC"
Set Rs = Conn.Execute(strSQL)
Else
strSQL = "SELECT * FROM Post WHERE typ = '" & Request.QueryString("typ") & "' ORDER BY Datum DESC"
Set Rs = Conn.Execute(strSQL)
End if
[b]If Rs.EOF Then
Response.Write("Inget hittades!")
Else
Do Until Rs.EOF[/b]
%>
Om jag skriver ett lag som inte finns så kommer jag till detta meddelande:
Error Type:
Körningsfel i Microsoft VBScript (0x800A0006)
Spill
/Matchresultat/test.asp, line 201
<%
Session.lcid = 1053
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("db/amica.mdb")
If Request.QueryString("typ") = "alla" Then
SQL ="SELECT sum(Gjorda) FROM Post"
Set objRS = Conn.Execute(SQL)
goalSum = objRS(0)
SQL ="SELECT sum(Inslappta) FROM Post"
Set objRS = Conn.Execute(SQL)
ungoalSum = objRS(0)
strSQL = "SELECT COUNT(*) FROM Post"
Set objRSM = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda > Inslappta"
Set objRSV = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda = Inslappta"
Set objRSO = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda < Inslappta"
Set objRSF = Conn.Execute(strSQL)
ElseIf Request.QueryString("typ") = "sok" Then
SQL ="SELECT sum(Gjorda) FROM Post WHERE Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRS = Conn.Execute(SQL)
goalSum = objRS(0)
SQL ="SELECT sum(Inslappta) FROM Post WHERE Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRS = Conn.Execute(SQL)
ungoalSum = objRS(0)
strSQL = "SELECT COUNT(*) FROM Post WHERE Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRSM = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda > Inslappta AND Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRSV = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda = Inslappta AND Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRSO = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda < Inslappta AND Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRSF = Conn.Execute(strSQL)
Else
SQL ="SELECT sum(Gjorda) FROM Post WHERE typ = '" & Request.QueryString("typ") & "'"
Set objRS = Conn.Execute(SQL)
goalSum = objRS(0)
SQL ="SELECT sum(Inslappta) FROM Post WHERE typ = '" & Request.QueryString("typ") & "'"
Set objRS = Conn.Execute(SQL)
ungoalSum = objRS(0)
strSQL = "SELECT COUNT(*) FROM Post WHERE typ = '" & Request.QueryString("typ") & "'"
Set objRSM = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda > Inslappta AND typ = '" & Request.QueryString("typ") & "'"
Set objRSV = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda = Inslappta AND typ = '" & Request.QueryString("typ") & "'"
Set objRSO = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda < Inslappta AND typ = '" & Request.QueryString("typ") & "'"
Set objRSF = Conn.Execute(strSQL)
End if
%>
In med alla databasfrågor och recordsets i else-satsen i det kodblock du visade i originalinlägget. Där ska all kod ligga som endast ska köras om det returneras data från sökfrågan.
Du kan effektivisera sql-frågorna en hel del, det känns som att du gör väldigt mycket i onödan.
Likson så vil jag ha det! Om inte ordet man skriver in i fältet "sok" passar ihop med något ord i Kolummen "motstandare" i databasen skall en text komma upp med "motsåndare hittades inte"!
<%
Session.lcid = 1053
[b]Dim bHittades : bHittades = False[/b]
Set Conn = Server.CreateObject("ADODB.Connection")
[b]Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("db/amica.mdb")[/b]
If Request.QueryString("typ") = "alla" Then
SQL ="SELECT sum(Gjorda) FROM Post"
Set objRS = Conn.Execute(SQL)
[b]If Not objRS.EOF Then[/b]
goalSum = objRS(0)
SQL ="SELECT sum(Inslappta) FROM Post"
Set objRS = Conn.Execute(SQL)
ungoalSum = objRS(0)
strSQL = "SELECT COUNT(*) FROM Post"
Set objRSM = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda > Inslappta"
Set objRSV = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda = Inslappta"
Set objRSO = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda < Inslappta"
Set objRSF = Conn.Execute(strSQL)
[b]bHittades = True[/b]
[b]End If[/b]
ElseIf Request.QueryString("typ") = "sok" Then
SQL ="SELECT sum(Gjorda) FROM Post WHERE Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRS = Conn.Execute(SQL)
[b]If Not objRS.EOF Then[/b]
goalSum = objRS(0)
SQL ="SELECT sum(Inslappta) FROM Post WHERE Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRS = Conn.Execute(SQL)
ungoalSum = objRS(0)
strSQL = "SELECT COUNT(*) FROM Post WHERE Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRSM = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda > Inslappta AND Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRSV = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda = Inslappta AND Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRSO = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda < Inslappta AND Motstandare LIKE '%" & Request.Form("sok") & "%'"
Set objRSF = Conn.Execute(strSQL)
[b]bHittades = True[/b]
[b]End If[/b]
Else
SQL ="SELECT sum(Gjorda) FROM Post WHERE typ = '" & Request.QueryString("typ") & "'"
Set objRS = Conn.Execute(SQL)
[b]If Not objRS.EOF Then[/b]
goalSum = objRS(0)
SQL ="SELECT sum(Inslappta) FROM Post WHERE typ = '" & Request.QueryString("typ") & "'"
Set objRS = Conn.Execute(SQL)
ungoalSum = objRS(0)
strSQL = "SELECT COUNT(*) FROM Post WHERE typ = '" & Request.QueryString("typ") & "'"
Set objRSM = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda > Inslappta AND typ = '" & Request.QueryString("typ") & "'"
Set objRSV = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda = Inslappta AND typ = '" & Request.QueryString("typ") & "'"
Set objRSO = Conn.Execute(strSQL)
strSQL = "SELECT COUNT(*) FROM Post WHERE Gjorda < Inslappta AND typ = '" & Request.QueryString("typ") & "'"
Set objRSF = Conn.Execute(strSQL)
[b]bHittades = True[/b]
[b]End If[/b]
End if
If bHittades Then
Select Case Request.QueryString("typ")
Case "alla" : [blue]'Kod[/blue]
Case "sok" : [blue][/blue]
Case Else : [blue][/blue]
End Select
Else
Select Case Request.QueryString("typ")
Case "alla" : [blue]'Tydligen fanns det inga lag...[/blue]
Case "sok" : [blue]'Inget hittades vid sökningen[/blue]
Case Else : [blue]'...[/blue]
End Select
End If
%>
Om nu det här passar dig vet jag inte, men det är en lösning ivarjefall.
Ditt felmeddelande Spill får du eftersom du försöker dela något med ingenting. Det borde heta overflow och inte spill...
Och om jag var du skulle jag ta och göra om frågorna istället för att pula på med en massa olika recordsets.
Då försöker du väl antagligen fortfarande att dela något med ingenting.
If [i]RecordSet[/i].EOF Then
[blue]'Recordset:et är tomt... det går ej att använda det någonstans[/blue]
Else
[blue]'Det finns några poster. Nu kan det gå bra att använda recordset:et[/blue]
End If
328 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e