Forum Discussion
Storing QuizMaker results in a database
I am an ICT teacher at a school, and have created a solution to save all results to a database automatically after the quiz. I am using a MS SQL Server database, but it could easily be adapted to a MS Access or other database.
We have already taken hundreds of tests, and all results are stored, up to individual answers. The web interface enables you to download results per quiz, per student or per class in CSV format.
All source code is open sourced, and downloadable on http://code.google.com/p/quizbaker/
I am hoping for collaboration from many of you to improve the software. Email me if you like to cooperate on the project.
I have looked at joep's original solution in .NET and have created my own in classic ASP. See http://www.articulate.com/forums/articulate-quizmaker/4317-quiz-database-instructions-code.html
I plan on supporting MS Access, MySQL and port the version to PHP. One of the hardest problems was capturing the user name of the student, which is now done by forcing the student to use Internet Explorer, the only browser that sends the domain user automatically.
- Michielvan-d058Community Member
- summary_id = id of quiz done by a student (link to summary.id)
- interaction_id = a unique identifier combining the question with the student and quiz (I think). Articulate knows more, I don't use it
- objective_id = an id for the question, so that even if the questions are randomized they will be identifiable. This id is used in vwDetails as LEFT(SUBSTRING(dbo.Quiz_Detail.objective_id, 9, 5), LEN(dbo.Quiz_Detail.objective_id) - 10)
- interaction_type = type of question, e.g. multiple choice, yes/no
- weight = always 1, I have no idea why Articulate uses this. Perhaps it's something that is reserved for later use, or maybe it's used in some other tools
- latency = network delay, not very useful, unless there is a consistent delay
- question = the actual question text
I hope this helps a bit. I should put this in the Wiki. It gave me a lot of headaches to find out. But rest assured you can get all necessary data by using the views (or implement them as queries if you like). See the database file at http://code.google.com/p/quizbaker/source/browse/DB/createDB.sql
- Rohan-KCommunity Member
Hey thanks a ton Michiel
Just one question, is there any way to capture the time taken for each question? It is a really important metric that we need to calculate the final score (which will be a function of the time then to answer , the question point value and the no. of attempts)
Thanks
Rohan
Edit: So I've convinced the client to use the overall time rather than individual question time. Don't think will be needing that anymore. Thanks a ton
P.s. I found this link http://www.articulate.com/support/kb_article.php?product=qm9&id=uz26lpzwc4y2
I am assuming the Data reported to quizbaker follows the same format? I ask because I need to capture the no. of attempts per question which I am assuming can be derived from the id field?
- Rohan-KCommunity Member
Also will I be able to capture the username along with the quiz results from a session variable as I will be authenticating the user before he/she starts taking the quiz?
- Michielvan-d058Community Member
from line 35 of quiz.asp:
' if the network user is known, use that name
options.username = Request.ServerVariables("LOGON_USER")
' otherwise, use the name given at the end of the test
If options.username = "" Then
options.username = Req("quiz[oOptions][strName]")
End If
' otherwise, use the session ID as an identifying name
' in this case, the student cannot be tracked!
If options.username = "" Then
options.username = "Session-" & Session.SessionID
End If
So you could also have a user name in a session variable and throw that in, e.g.if Session("UserName")<>"" Thenoptions.username = Session("UserName")end ifI haven't bothered to do this, since I track the login name on the network already. This is the safest way anyway. You could also map a list of usernames to their network login ids, so you could filter it later. - Michielvan-d058Community Member
Oh I think you are right about latency, what a stupid name. I think it actually does mean the time to answer! Remind you I do not work for Articulate and am basically guessing as to what the data means!
- Michielvan-d058Community Member
Rohan K said:
Hey thanks a ton Michiel
Just one question, is there any way to capture the time taken for each question? It is a really important metric that we need to calculate the final score (which will be a function of the time then to answer , the question point value and the no. of attempts)
Thanks
Rohan
Edit: So I've convinced the client to use the overall time rather than individual question time. Don't think will be needing that anymore. Thanks a ton
P.s. I found this link http://www.articulate.com/support/kb_article.php?product=qm9&id=uz26lpzwc4y2
I am assuming the Data reported to quizbaker follows the same format? I ask because I need to capture the no. of attempts per question which I am assuming can be derived from the id field?
OK thanks for the link. Yes that is likely the exact same format. I am not sure about the number of attempts though. I have setup the system to send results only once per quiz, but it would be technically possible to store all 'response tries'. Since the browser itself stores the results, it does mean that when a user is interrupted (by a crash of the pc e.g.) then the results up to that point are lost. - dineshkumarsCommunity Member
Is it possible to track Articulate Output into Asp.net application. could you please provide some example?
- Michielvan-d058Community Member
dineshkumar s said:
Is it possible to track Articulate Output into Asp.net application. could you please provide some example?
Yes it is possible. See http://www.articulate.com/forums/articulate-quizmaker/4317-quiz-database-instructions-code.htmlMy solution is ASP, the original is ASP.NET (or C# perhaps).
- SuzanAllenCommunity Member
Hi Mark,
I previously used this method to save the results of a Quizmaker 09 Survey to a Microsoft SQL Server database. Recently I have tried changing the survey questions and republishing the survey but it no longer works in IE11. Do you have any idea what changes are needed to make it work?
- Michielvan-d058Community Member
Hi
My name is Michiel, not Mark. Don't worry about that though. Sorry to be late with my reply. I hope you have already solved the problem.
I have a new version already, but it's not ready for publishing. I am still working on that. I could send you the code base though.
Right now quizbaker has moved to GitHub, where you can find the code. If you want you can add an Issue here: https://github.com/blonkm/quizbaker/issues
Please use that to put in as much detail as you can about your problem. If you want you can press F12 in the browser (IE) and see in the console if there are any javascript errors. Please indicate which ones you see.
I can then fix the code and update the version. However, as I said this version is quite old and I need to update it with the latest
regards
Michiel
- MarkPickartCommunity Member
I know I am late to the game when responding to this post but is there a simpler way to explain all of this. I want to use this method to create a leaderboard for a game I created in storyline. I had help creating a php and mysql database but now I am stuck trying to get the variables to communicate. I tried using the %Variable% in the javascript but that doesn't seem to work and the php never seems to be called up. Any help?
- Michielvan-d058Community Member
Mark Pickart said:
I know I am late to the game when responding to this post but is there a simpler way to explain all of this. I want to use this method to create a leaderboard for a game I created in storyline. I had help creating a php and mysql database but now I am stuck trying to get the variables to communicate. I tried using the %Variable% in the javascript but that doesn't seem to work and the php never seems to be called up. Any help?
HiI only worked with Articulate Quizmaker (from studio 9). I have no experience with Storyline, so I can't tell.