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.

40 Replies
Subhash Dobhal

Hi Michiel,

I Need some help as I want to understand how to open the tool that you have created. I am Asst.Manager  working with IT company and want to create a online exam so that employee can open IE and complete the assisment . Answers updated by the users to be saved on Database so that I can see and provide the pass /fail report. I have downloaded your tool however not sure how to use it.

Request you to please provide me the steps for the same. my email ID is dobhal.subhash@gmail.com

Thanks you so much for this help in advance!

Regards,

Subhash Dobhal

Munish Sethi

Michiel van der Blonk said:

I have just added the first PHP version to the downloads section. http://code.google.com/p/quizbaker/downloads/list


I have downloaded the php version, but i didnt looked at it yet.

I am trying to develop a solution independent of any LMS, so i may save the results of the quiz in my personal database MySql.

I will update my progress here.

Munish Sethi

Hi Michiel.

Thanks for the great work.

I looked at both the zip files provided. I can see that you have folders 

Report - showing scores etc from db.

Student - images and an index asp file.

DB -  DB connection, persistence support etc.

But i wanted to see how a quiz on completion throws out the result data. Can you pls upload or put here a zip with quiz files and the js files about how data will come out of the quiz.

Shane Robinson

Hi,

Thanks for posting this.

Does anyone know a workaround for the following client request. Maybe it is already addressed by the email to database code that is proposed in this forum. However, I am relatively new to these aspects of deploying live eLearning from the hosting-side, so wanted to ask for clarification or possibly a solution if anyone has one:

·         The emails [quiz results] will need to be able to be sent using an SMTP relay through the company's email system.  We can’t be guaranteed that every user's machine accessing the [training course and quiz] application will have the Outlook client installed or that the user will have a valid MHS email address.

If I understand this question correctly, is there a way to have quizmaker send an email or quiz results in any form, to the client's SQL database, if the end-user's don't have an installed email client like Outlook on their machines? What is an SMTP relay?

Also, this is a time-sensitive question. I am being asked to provide an answer to this question in a couple hours!? HEY YOU GUYS! HELP FROM HEROES NEEDED ASAP.

Thanks,

Shane

Michiel van der Blonk
  • 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  K

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?

Michiel van der Blonk

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")<>"" Then
  options.username = Session("UserName")
end if
I 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.
Michiel van der Blonk

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.

Michiel van der Blonk

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.html

My solution is ASP, the original is ASP.NET (or C# perhaps).

Mark Pickart

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?

Michiel van der Blonk

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?


Hi

I only worked with Articulate Quizmaker (from studio 9). I have no experience with Storyline, so I can't tell.

Trent V

Thanks Ashley!  I just need to know that the code for a published course can be altered to pull content dynamically from a database.  Essentially, our quizzes/tests and all their associated answers are located in a database.  I'd like to be able to generate a quiz that could pull that data from a database. 

What I've seen so far from Articulate Studio is that a lot of this is flash generated content, particularly the player.  I just need to know that it's an option to be able to use it that way.  From what you're saying, I think that I can infer that I'm able to add the code I need to get it done.

Michiel van der Blonk

Actually I also created a solution to create QuizMaker files straight from Excel. This only works with the Quizmaker 2.0 format, but these can be opened by Quizmaker 9.0

It's in Dutch, so I hope the interface is self explanatory. 'Maak CP' means 'export to Word', and 'Opslaan als QuizMaker' means 'Save in Quizmaker format'.

Make sure to enable macros.