webForumDet fria alternativet

Jämnföra värden i flera formulär mot databas värden

ASP

9 svar · 244 visningar · startad av Danielkun

Medlem sedan maj 2003361 inlägg
Frågan#1

Jag sitter och bygger en liten "Språk test"

Jag har en databas med 3 kolumner som innehåller ID och ord på Japanska och på Engelska.

Meningen är att man ska se det japanska ordet och så kommer det upp ett fält till höger om den där man ska skriva in den engelska ordet som motsvarar det japanska och sen ska man kolla hur många man skrivit rätt.

För att göra "Testen" så läser jag in ID och sätter den på text rutans NAME tag i forumläret och det funkar fint.. Jag får upp en sidan som den ska. Alla text fält med unika namn (ID)

Men jag vet inte hur jag ska kolla värdet på alla text-rutor i formuläret med ID't och kolla om det engelska ordet är rätt skrivet.
Nån som har en bra ide?

Jag gissar att jag måste göra en loop som kollar ID't från databasen mot alla ID värden i formuläret och sen jämnföra engelska ordet, men jag lyckas inte få det att funka!

Vore jätte tacksam för svar :D

Medlem sedan maj 2003361 inlägg
#2

Det kanske är enklare att förstå vad jag menar om ni kollar på det jag byggt fram till nu! Det är ganska provisoriskt och det händer ju inget när man "Check'ar" orden.

Men tanken är att man ska jämnföra alla värden i text rutorna mot rätt ID i databasen och sen verifiera om ordet är rättstavat..

http://www.iremo.com/login/wordgame.asp

Medlem sedan jan. 20032 285 inlägg
#3

Kanske det här kan vara något?

For Each strForm In Request.Form
  strSQL = "SELECT COUNT(*) FROM tabell WHERE (ID = " & strForm & " AND English = '" & Request.Form(strForm) & "')"
  Set objRS = objConn.Execute(strSQL)
  intTotal = intTotal + objRS(0)
Next
Set objRS = Nothing

Response.Write(intTotal & " rätt svar.")
Medlem sedan maj 2003361 inlägg
#4

Tack!!

Men jag lyckas inte få det att funka :(

Jag skrev in det så här men jag får på raden där jag sätter Recordset'et. Felmedelandet säger, Microsoft JET Database Engine (0x80040E10) Det har inte angetts något värde för en eller flera nödvändiga parametrar.

if Request.QueryString("action") = "checkwords" then

Set objConn = server.CreateObject("ADODB.Connection")
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database.mdb")
objConn.Open strConn

For Each strForm In Request.Form
  strSQL = "SELECT COUNT(*) FROM wordgame WHERE (ID = " & strForm & " AND English = '" & Request.Form(strForm) & "')"
  Set objRS = objConn.Execute(strSQL)
  intTotal = intTotal + objRS(0)
Next
Set objRS = Nothing

Response.Write(intTotal & " rätt svar.")

objConn.Close
Set objConn = Nothing

end if
Medlem sedan juni 200032 967 inlägg
#5

Kontrollera tabell- och fältnamn.

Medlem sedan maj 2003361 inlägg
#6

nope, dom är 100% rätt. har kollat dom flera ggr!

Medlem sedan maj 2003361 inlägg
#7

OJ!!! Jag belv så arg nu att jag kopiera hela koden för hand och då funka det!!!!! :e

Jättetack!!!

Kan nån bara förklara vad COUNT(*) funktionen gör riktigt? Jag är van att skriva COUNT(*) AS NÅGONTING, men den här funktionen kanske är annorlunda?

och objRS(0) , blir en array förstår jag, men varför (0) ?

Medlem sedan juni 200032 967 inlägg
#8

COUNT(*) returnerar antalet poster som matchar villkoren i WHERE-satsen.

Om du skriver COUNT(*) AS något så ger du den skapade kolumnen ett alias att referera till i ASP-koden, objRS("något"). Om du inte gör det, så kan du referera till fältet genom att ange dess ordningsnummer i recordsetet, dvs 0. Ordningsnummer och index börjar i stort sett alltid på 0.

Mvh

Medlem sedan maj 2003361 inlägg
#9

Tack!!
Men varför innehåller objRS(0) en 1'a om vilkoret stämmde?

Medlem sedan juni 200032 967 inlägg
#10

Då var det en post i tabellen som matchade villkoren i WHERE-satsen.

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