Hej, Jag hittar ingen variabel som heter strSql i ditt skript, ändå försöker du öppna denna med ADODB. Det du antagligen är ute efter med variabeln strSql är att hämta något från databasen. Nu har du öppnat den i varabeln strCon. strSql får sitt värde i andra if-satsen, och jag har testat att skriva ut den precis innan databasanropet och den finns där. Jag tycker det ser rätt ut. Jag är förvisso ingen fantom på sql-uttryck och har tidigare haft det lite struligt med sql-koder i asp mot en accessdatabas (är ju inte exakt samma syntax som i själva access). Hur mycket har du redigerat från den ursprungliga koden? Jag antar att U% är text och då skall det vara enkelfnuttar runt. Jag har testat runt lite med olika fnuttar, för jag har trott tidigare att det måste vara ngt sådant som är fel. I första kodbiten, som ju fungerar, finns nämligen ingen where-sats med. Tack Cougarina, du fick mig på rätt spår. Så, nu sätter jag löst på denna tråden.Fel i databasanrop från ASP-sida?!
skulle behöva hjälp av ett par skickliga ögon.
I nedanstående kod, som skall skriva ut en topplista med alla, bara seniorer eller bara ungdomar utifrån vad man väljer i radioknapparna så får jag ett problem.
Problemet är att när jag väljer "alla" så fungerar det hur bra som helst - men när jag väljer seniorer eller ungdomar så fungerar det inte alls.
Felmeddelandet lyder:
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
/stats_topp20indres4series.asp, line 52
Rad 52 är alltså databasanropet:
rsToplist.Open strSql, strCon
Jag testar att skriva ut både strSql och strCon, och de innehåller värden även vid val av seniorer eller ungdomar.
Koden för sidan ser ut så här:
<code>
<HTML><HEAD><TITLE>Söderkulla Bowlingklubb</TITLE></HEAD><BODY BGCOLOR="FFFFCC">
<%
strLagval = ""
strLagval = request.form("Lagval")
if strLagval = "" then
strLagval = "alla "
end if
%>
<script src="xaramenu.js"></script><script webstyle3 src="expression.js"></script><p></p>
<table border="1">
<tr><td width="500">
<h3>Statistik över de 20 bästa individuella resultaten</h3>
Här ser ni de 20 bästa individuella resultaten, i seriematchsammanhang, som Söderkullare har presterat denna säsongen, över fyra serier.
Obs att om det är flera som har samma resultat som 20:e man så visas de också, och därför kan listan innehålla mer än 20 resultat.
<p></p>
Ni kan även välja om ni vill se en topplista på alla, bara seniorer eller bara ungdomar (spel i U-lagen) genom att
pricka i önskat val (standard är att visa alla).<p></p>
<form action="stats_topp20indres4series.asp" method="post" name="ValForm" id="ValForm">
<%
if strLagval = "alla " then
response.write "<input type=""radio"" name=""Lagval"" value=""alla "" checked> Alla lag <input type=""radio"" name=""Lagval"" value=""senior""> Seniorlag <input type=""radio"" name=""Lagval"" value=""ungdoms""> Ungdomslag<br>"
strSql = "SELECT TOP 20 Namn, Totalt, Omgång, Statusnamn, Hall FROM T_Matchresultat ORDER BY Totalt DESC"
elseif strLagval = "senior" then
response.write "<input type=""radio"" name=""Lagval"" value=""alla ""> Alla lag <input type=""radio"" name=""Lagval"" value=""senior"" checked> Seniorlag <input type=""radio"" name=""Lagval"" value=""ungdoms""> Ungdomslag<br>"
strSql = "SELECT TOP 20 Namn, Totalt, Omgång, Statusnamn, Hall FROM T_Matchresultat WHERE Statusnamn <>""U*"" ORDER BY Totalt DESC"
elseif strLagval = "ungdoms" then
response.write "<input type=""radio"" name=""Lagval"" value=""alla ""> Alla lag <input type=""radio"" name=""Lagval"" value=""senior""> Seniorlag <input type=""radio"" name=""Lagval"" value=""ungdoms"" checked> Ungdomslag<br>"
strSql = "SELECT TOP 20 Namn, Totalt, Omgång, Statusnamn, Hall FROM T_Matchresultat WHERE Statusnamn Like ""U*"" ORDER BY Totalt DESC"
end if
%>
<br><input type="submit" name="BtnSend" value="Visa valda poster!">
</form>
<%
set rsToplist = Server.CreateObject("ADODB.Recordset")
strCon = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath ("sbk_allt.mdb")
rsToplist.Open strSql, strCon
response.write "Tabellen visar säsongens 20 bästa resultat från " & strLagval & "matcherna."
strToplistTabellHeader = "<table border=""1"" bordercolor=""silver""><tr><th>Spelare</th><th><center>Totalt</center></th><th><center>Omg</center></th><th>Lag</th><th>Hall</th></tr>"
do while not rsToplist.eof = true
strToplistTabellResultat = strToplistTabellResultat & "<tr><td>" & rsToplist(0) & "</td><td><center>" & rsToplist(1) & "</center></td><td><center>" & rsToplist(2) & "</center></td><td>" & rsToplist(3) & "</td><td>" & rsToplist(4) & "</td></tr>"
rsToplist.movenext
loop
strToplistTabellFooter = "</table>"
response.write strToplistTabellHeader & strToplistTabellResultat & strToplistTabellFooter
'set rsToplist = nothing
'set strCon = nothing
%>
</td></tr>
</table>
</body>
</html>
</code>
Tips på vad som kan vara galet?Sv: Fel i databasanrop från ASP-sida?!
Något så här kan det se ut istället
<code>
set rsToplist = Server.CreateObject("ADODB.Recordset")
strCon = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath ("sbk_allt.mdb")
strSql = "SELECT * FROM tabell ORDER BY ID DESC"
rsToplist.Open strSql, strCon
</code>
/HenkeSv: Fel i databasanrop från ASP-sida?!
Kolla så att du inte har glömt eller har med fnuttar i SQL satsen.
Är det text ska det vara fnuttar runt, annars inte.
//Anna-KarinSv: Fel i databasanrop från ASP-sida?!
Den ser ut som följer:
<code>
<!-- Alla -->
SELECT TOP 20 Namn, Totalt, Omgång, Statusnamn, Hall FROM T_Matchresultat ORDER BY Totalt DESC
<!-- Seniorer -->
SELECT TOP 20 Namn, Totalt, Omgång, Statusnamn, Hall FROM T_Matchresultat WHERE (Statusnamn <> "U%") ORDER BY Totalt DESC
<!-- Ungdomar -->
SELECT TOP 20 Namn, Totalt, Omgång, Statusnamn, Hall FROM T_Matchresultat WHERE (Statusnamn Like "U%") ORDER BY Totalt DESC
</code>
Förtydligande är alltså att när strSql blir första alternativet, så fungerar det som det skall. I de andra fallen får jag felmeddelandet:
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
/stats_topp20indres4series.asp, line 54 Sv: Fel i databasanrop från ASP-sida?!
Sv: Fel i databasanrop från ASP-sida?!
Nu står inte U% med två dubbelcitattecken omkring sig. Är U% något värde i databasen som måste vara uppfyllt?Sv: Fel i databasanrop från ASP-sida?!
<!-- Seniorer -->
SELECT TOP 20 Namn, Totalt, Omgång, Statusnamn, Hall FROM T_Matchresultat WHERE (Statusnamn <> " ' U% ' ") ORDER BY Totalt DESC
(OBS! Utan mellanslagen, det är bara för att visa vart jag lagt fnuttarna)
Sen är jag osäker på om du kan söka med sk wildcards i en WHERE sats, jag tror du måste använda LIKE istället.
//Anna-KarinSv: Fel i databasanrop från ASP-sida?!
Skall kolla cougarinas lösning, det verkar nästan sannolikt att det är där felet ligger...
U% innebär (eller jag vill iaf att de skall innebära :D ) att lagnamnet skall börja med bokstaven U.
För visst är det väl % och inte * man använder som wildcard i sql?Sv: Fel i databasanrop från ASP-sida?!
<code>
SELECT TOP 20 Namn, Totalt, Omgång, Statusnamn, Hall FROM T_Matchresultat WHERE Statusnamn <> 'U%' ORDER BY Totalt DESC
</code>
Så skall det se ut (för att sortera ut dem som börjar med U iaf). Det var nog mina dubbelfnuttar som lurade dig - eftersom att det inte är ngn konkatenering så behövs ju inte " ' U% ' ", utan bara ' U% '. Det var jag som missat att det skulle vara enkelfnuttar inne i sql-satserna.
Nu skall vi bara se om jag får rätt på att sortera ut alla matcher som INTE har U som första bokstav :D
Tack för hjälpen alla iaf!Sv: Fel i databasanrop från ASP-sida?!
Gjorde en "fullösning" på sista problemet ("OR" på de fyra val som finns som inte börjar med U).