webForumDet fria alternativet

Om inget hittas?

ASP

21 svar · 373 visningar · startad av asp

Medlem sedan aug. 2002733 inlägg
Frågan#1

Hej!

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

Detta står på rad 201:

<% Response.Write("<b>" & objRSV(0) & "</b> (" & Round(objRSV(0)/objRSM(0)*100, 1) & "%)") %>
Medlem sedan juni 200032 967 inlägg
#2

Var ligger den kodraden i resten av koden? Ligger den inne i else-blocket?

Medlem sedan aug. 2002733 inlägg
#3

Nej, den ligger över den..

Medlem sedan aug. 2002733 inlägg
#4

Är det inte bara att se om något passar ihop med databsen, om inte. response.write("Inget resultat!!")

Medlem sedan juni 200032 967 inlägg
#5

Om recordsetet är tomt har du ju inga värden att räkna med. objRSV och objRSM är väl recordset? Var skapar du dem?

In med hela klabbet i en if-sats så du inte kör kod i onödan (och så du inte skapar felmeddelanden i onödan).

Medlem sedan aug. 2002733 inlägg
#6

Här är alla denna kod...

Var skall jag lägga If satsen...

<%
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
%>
Medlem sedan juni 200032 967 inlägg
#7

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.

Medlem sedan aug. 2002733 inlägg
#8

Det går inte sätta in alla SQL-kod i Else satsen eftersom jag skriver ut lite från SQL-koden innan...........

Medlem sedan juni 200032 967 inlägg
#9

Jag förstår inte vad du menar.

Medlem sedan aug. 2002733 inlägg
#10

Om jag skriver SQL koden i Else satsen så får jag felmeddelande eftersom jag skriver ut all statistik ovanför Else satsen..

Jag skriver inte ut allt mellan Rs.Eof och Rs.Movenext...........

Medlem sedan juni 200032 967 inlägg
#11

asp skrev:

Om jag skriver SQL koden i Else satsen så får jag felmeddelande eftersom jag skriver ut all statistik ovanför Else satsen..

Då får du flytta på den koden. All kod som endast ska köras om SQL-frågan genererar resultat skall ligga i else-blocket.

Medlem sedan jan. 2003247 inlägg
#12

Orkade inte kolaligenom koden men..

if objRSV.EOF OR objRSV.BOF then
Response.Write "Hittade inga poster"
else
Response.Write "Hittade massa poster"
end if

Borde inte detta fungera

Medlem sedan aug. 2002733 inlägg
#13

någon som vet?

det ända jag vill är att det skall komma upp en alert ruta där det står "inget hittades" om inte sökresultatet stämmer..

Medlem sedan aug. 2002733 inlägg
#14

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"!

Att det skall vara så svårt :P

Medlem sedan aug. 2002733 inlägg
#15

please..

Medlem sedan aug. 20012 349 inlägg
#16

Jag fattar inte... Börja om från början, visa lämplig del av din kod och tala om vart det inte fungerar, gärna ev felmeddelande med.

Medlem sedan dec. 20003 887 inlägg
#17
<%
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.

Medlem sedan aug. 2002733 inlägg
#18

Jag tog den koden exakt den koden du hade men det fungerade ändå inte.. den reagerar fortfarande på "Spill".

Är det något mer jag skall göra?

Medlem sedan aug. 20012 349 inlägg
#19

gör du såhär så lär du inte dividera med noll eller minus iallfall.

<% 
if NOT objRSM.EOF  or cdbl(objRSM(0)) =< 0 then
Response.Write("<b>" & objRSV(0) & "</b> (" & Round(objRSV(0)/objRSM(0)*100, 1) & "%)") 
end if
%>
Medlem sedan dec. 20003 887 inlägg
#20

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
183 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
183 ms — ändringar (db)