Hej, Jag ser inget syntaxfel i SQL-satsen. Kopplingsdelarna får någon annan granska. Du har inte tagit med koden som presenterar resultatet på sidan, det kanske är där felet finns? "...av -1 möjliga" tyder på att du har använt RecordCount-propertyn. Tror inte det finns stöd för rätt cursortyp i MySQL-drivrutinen, därför fungerar inte den och returnerar -1 istället. Japp, jag använder RecordCount. Vad är motsvarigheten i MySQL i så fall? Jag tror inte det går utan att ställa en separat SQL-fråga eller loopa igenom posterna. Jag skulle loopat ut posterna med istället: Nej det går inte att göra RS.RecordCount med MySql tyvärr... <code>SELECT Count(ID) AS IDCollection FROM TblName</code> Hej Peter! Tack David, jag gräver vidare där och återkommer med resultatet i denna tråd. Det är en SQL-fråga som du ställer till databasen, du har nog skrivit den utan citationstecken... Efter mailkontakt med Johan vid sidan av detta forum, så har jag nu lösningen på hur jag skulle ersätta RecordCount mot Access med ett RecordSet:Fel i SQL-sats mot MySQL?
Håller på att byta från Access till MySQL, och får inte SQL-satserna att fungera då jag byter databaskoppling från Access till MySQL. Jag är nybörjare på detta, så det kan vara något banalt fel...
Det som Select-satsen hämtar matas in i en array som presenteras i en tabell på webbsidan. När jag kör mot Access funkar allt som det skall, men med MySQL blir tabellen bara tom, utan felmeddelande.
Längst ned summeras dessutom antalet rätt man haft (tabellen är ett formulär som jämför dina inmatade svar med de som SELECT-satsen hämtar), men med MySQL står det alltid "Du hade 0 rätt av -1 möjliga", oavsett vad man svarat.
Saknas \, `eller annat för att satserna skall fungera mot MySQL?
Alla tips emottages varmt!
Jakob
+++++++++++++++++++
'MY SQL DATABASE
set Database=server.createobject("adodb.connection")
Database.Open "PROVIDER=MSDASQL;Driver={MySQL ODBC 3.51};SERVER=mySERVER;DATABASE=myDATABASE;UID=myUID;PWD=myPWD;"
' Hämtar rätta svaren
Set rsAnswers = Server.CreateObject("ADODB.Recordset")
sql="SELECT CorrectAnswerId, CourseID, ExerciseID, ExerciseSubID, CorrectAnswer, ExerciseItemId FROM CorrectAnswers WHERE ExerciseId='"& iExerciseId &"' AND ExerciseSubId ='"& Request.Form("exercisesubid") &"' ORDER BY ExerciseItemId"
rsAnswers.Open sql, Database, 3, 3Sv: Fel i SQL-sats mot MySQL?
Sv: Fel i SQL-sats mot MySQL?
/JohanSv:Fel i SQL-sats mot MySQL?
/Jakob
Här kommer delar av resten som presenterar resultatet på sidan:
++++++++++++++++++++++++
' Sätt ToComment Recordset
Set rsComments = Server.CreateObject("ADODB.Recordset")
Dim iAnswers, iRightAnswers
iAnswers = int(rsAnswers.RecordCount)
' Räknar antal rätt
iRightAnswers = 0
Redim arUserAnswers(iAnswers, 1)
' Array med lärarkommentar m.m som vi använder för att skriva ut en array i Javascript
Redim arJscript(iAnswers, 2)
iJscriptCount = 0
' Här läggs det rätta svaret (för att jämföras med user input), iCount är räknare
Dim arCorrectAnswers, iCount, iFoundIt
rsAnswers.MoveFirst
Dim storedCourseID, storedExerciseID, storedExerciseSubID
storedCourseID = rsAnswers.Fields("CourseID").Value
storedExerciseID = rsAnswers.Fields("ExerciseID").Value
storedExerciseSubID = rsAnswers.Fields("ExerciseSubID").Value
for i=1 to rsAnswers.RecordCount
if Len(arExerciseItemId(i)) > 0 AND arExerciseItemId(i) <> arInitValues(Request.Form("exercisesubid"), i) then
' Splitta rätta svaren
arCorrectAnswers = Split(rsAnswers.Fields("CorrectAnswer").Value, "|", -1, 1)
' Kolla efter rätt svar i arrayen
For iCount = 0 to Ubound(arCorrectAnswers)
if arExerciseItemId(i) = arCorrectAnswers(iCount) then
iFoundIt = iFoundIt+1
Exit For
Else
iFoundIt = 0
End if
Next
if iFoundIt > 0 then
arUserAnswers(i,0) = "Rätt!"
arUserAnswers(i,1) = ""
iRightAnswers = iRightAnswers+1
'Annars loopa över mistakes med samma ExerciseItemId
else
++++++++++++
SKIPPAR ETT LÄNGRE STYCKE KOD SOM UPPDATERAR DIV TABELLER
++++++++++++
'//////////////////////////////////////////////////////////////////////////////////////////////////////////
' Funktioner SOM PRESENTERAR RESULTATET
'//////////////////////////////////////////////////////////////////////////////////////////////////////////
Function printAnswers(iWhichExercise, iWhichRecord)
if int(Request.Form("exercisesubid")) = iWhichExercise then
if Not IsEmpty(Request.Form) then
printAnswers = arUserAnswers(iWhichRecord,0)&" "&arUserAnswers(iWhichRecord,1)
else
printAnswers = " "
end if
else
printAnswers = " "
end if
End Function
Function printSummary(iWhichExercise)
if int(Request.Form("exercisesubid")) = iWhichExercise then
if Not IsEmpty(Request.Form) then
printSummary = "<B>Du hade "& iRightAnswers &" rätt av "& iAnswers &" möjliga</B>"
else
printSummary = " "
end if
else
printSummary = " "
end if
End Function
' Skriver ut initvärden samt det användaren skrivit i rutan
Function printInitValues(iWhichExercise, iWhichRecord)
if int(Request.Form("exercisesubid")) = iWhichExercise then
if Not IsEmpty(Request.Form) then
printInitValues = arExerciseItemId(iWhichRecord)
else
printInitValues = arInitValues(iWhichExercise, iWhichRecord)
end if
else
printInitValues = arInitValues(iWhichExercise, iWhichRecord)
end if
End Function
Function radioSelect(iWhichExercise, iWhichRecord, sWhatToLookFor)
if int(Request.Form("exercisesubid")) = iWhichExercise then
if arExerciseItemId(iWhichRecord) = sWhatToLookFor then
radioSelect = "CHECKED"
else
radioSelect = ""
end if
else
radioSelect = ""
end if
End Function
'+++++++++++++++++++++++++++++
' CLOSE DATABASE CONNECTIONS!
'+++++++++++++++++++++++++++++
...Sv: Fel i SQL-sats mot MySQL?
<code>
i = 0
do until rsAnswers.eof
i = i + 1
...
loop
</code>
/JohanSv: Fel i SQL-sats mot MySQL?
Jag löste det en gång genom att skriva <code>SELECT Count(*) FROM <tblnamn></code>
Mer info finns på Developer forum på www.mysql.com
Mvh David
www.frankly.seSv:Fel i SQL-sats mot MySQL?
iAnswers = RS("IDCollection")Sv: Fel i SQL-sats mot MySQL?
Jag får följande felmeddelande:
Microsoft VBScript compilation error '800a03fd'
Expected 'Case'
/spanska1_mysql/lektion3/ejerc3.asp, line 169
SELECT Count(CorrectAnswerID) AS IDCollection FROM CorrectAnswers
-------^
Hls,
JakobSv:Fel i SQL-sats mot MySQL?
JakobSv:Fel i SQL-sats mot MySQL?
Men eftersom du ändå ska loopa ut posterna föreslår jag att du gör om loopen enligt mitt tidigare svar istället.
/JohanSv: Fel i SQL-sats mot MySQL?
...
Dim iAnswers, iRightAnswers
' iAnswers = int(rsAnswers.RecordCount)
'Eftersom .RecordCount inte stöds av MySQL-drivrutinen får vi göra en fuling här... Inte effektivaste lösningen, men den kräver minst omkodning.
Set rsAnswersCount = Server.CreateObject("ADODB.Recordset")
sql="SELECT COUNT(0) FROM CorrectAnswers WHERE ExerciseId="& iExerciseId &" AND ExerciseSubId ="& Request.Form("exercisesubid") &" ORDER BY ExerciseItemId"
rsAnswersCount.Open sql, Database, 3, 3
iAnswers = rsAnswersCount.Fields(0)
...
Stort tack för hjälpen!
/Jakob