Just for anyone elses's benefit, I've got a system that works really well for me now.
It goes a little something like this:
- Make sure question one in the quiz asks for the user's email address (a short answer survey question)
- Insert the removeFinish.swf flash file - http://daveperso.mediaenglishonline.com/2009/07/20/how-to-remove-the-finish-button-in-quizmaker-09/ into the "Pass" slide and ensure email results is ticked
- rename "Email Results" to Finish in the template
- Publish the training
- Open flashcommand.js file and replace the Email Results section completely with the following text:
function EmailResults(strAddress)
{
if (!g_oQuizResults.strTitle)
{
g_oQuizResults.strTitle = "";
}
var g_strSubject = "Quiz Results: " + g_oQuizResults.strTitle;
var strQuizResults = "";
var strMainHeader = " " + g_oQuizResults.strTitle + "\nStatus, Raw Score, Passing Score, Max Score, Min Score, Time\n";
var strLineHeader = "\n\nDate, Time, Score, Interaction ID, Objective Id, Interaction Type, Student Response, Result, Weight, Latency\n";
var strMainData = "";
var strLineData = "\n";
var namer = g_arrResults[0].strStudentResponse
strMainData += namer + ",";
strMainData += g_oQuizResults.strTitle + ",";
// Status
// strMainData += g_oQuizResults.strResult + ",";
// Score
// strMainData += g_oQuizResults.strScore + ",";
// Raw Score
strMainData += g_oQuizResults.strPtScore + ",";
// Passing Score
// strMainData += Math.round((g_oQuizResults.strPassingScore/100) * g_oQuizResults.strPtMax) + ",";
// Max Score
// strMainData += g_oQuizResults.strPtMax + ",";
// Min Score
//strMainData += 0 + ",";
// Time
//strMainData += GetTime(g_oQuizResults.dtmFinished) + ",";
strMainData += GetDate(g_arrResults[0].dtmFinished);
for (var i = 0; i
{
//Date
strLineData += GetDate(g_arrResults[i].dtmFinished) + ",";
// Time
strLineData += GetTime(g_arrResults[i].dtmFinished) + ",";
// Score
strLineData += g_arrResults[i].nPoints + ",";
// Interaction Id
strLineData += g_arrResults[i].strInteractionId + ",";
// Objective Id
strLineData += g_arrResults[i].strObjectiveId + ",";
// Interaction Type
strLineData += g_arrResults[i].strType + ",";
// Student Response
var strResponse = g_arrResults[i].strStudentResponse;
strResponse = ReplaceAll(strResponse, "'", "%27");
strLineData += strResponse + ",";
// Result
strLineData += g_arrResults[i].strResult + ",";
// Weight
strLineData += "1,";
// Latency
strLineData += g_arrResults[i].strLatency;
strLineData += "\n";
}
strQuizResults = strMainData;
var sHTML = "";
sHTML += '';
sHTML += '';
sHTML += '';
sHTML += '';
sHTML += '
';
sHTML += '';
document.getElementById("divQuiz").innerHTML = sHTML;
document.getElementById("formQuiz").submit();
}
This collects the person's email address, score, and the quiz name - which are all the results I need. It then posts them to my asp file (SubmitResults.asp) in the same window as the quiz (ie it doesn't open a new window, so there's no confusion as to whether it is finished or not).
6. In that file, I have some asp which writes to my database. It looks a little bit like this:
Dim AdCn
Dim AdRec
Dim TimeRan
Dim i, SQL
Set AdCn = CreateObject("ADODB.Connection")
Set AdRec = CreateObject("ADODB.Recordset")
Dim conn
Set AdCn = Server.CreateObject("ADODB.Connection")
AdCn.Open "Provider=SQLOLEDB; Data Source = slk-tbw-sql1; Initial Catalog = *****; User Id=*****;Password=*****;"
If AdCn.errors.count = 0 Then
SQL = "Insert into Results (EmailAddress, Course, Score) values('"& Request.Form("Quiz") & "', '"& Request.Form("Course") & "', '"& Request.Form("Score") & "')"
AdRec.Open SQL, AdCn,1,1
End If
AdCn.Close
Set AdCn = Nothing
%>
I then finish the asp off with a certificate that says Congratulations, you've passed "this" course on "this" date. "this" is your email address and "this" was your score. It wasn't easy to ensure that everyone put their names in correctly which is why I chose to take their email address. It's also a unique identifier which is something databases like!! 
Of course you could do it to a text file instead if you dont have a database you can use, this works equally well, and the data can be manipulated quite nicely in Excel. You'd need to adapt the asp code to do this though to something maybe a bit like this:
Dim fso
Dim tst
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Set tst = fso.OpenTextFile(Server.MapPath("results.txt"), 8, true)
tst.writeline Request.ServerVariables("AUTH_USER")
tst.close
Set tst = Nothing
Set fso = Nothing
%>
Although this is a very old version that I used over a year ago, so it may not be quite as good as it could be.
Right, I've bored you enough now! If you find this interesting, but would like more info, then ask away. To be honest though, i've kinda fudged all this together with very little actual knowledeg of JavaScript or asp. I just kept changing things until they worked!!!
Chris