N Top Выбор записей на основе собственного оператора SQL в MS-Access - PullRequest
1 голос
/ 28 июля 2010

Я переписываю небольшое приложение ms-access для сдачи экзаменов.

Они хотят, чтобы тесты брали набор случайных вопросов в зависимости от размера экзамена.

Если бы в каждом экзамене было определенное количество вопросов, я мог бы просто вставить число в утверждение TOP и покончить с ним, но для каждого экзамена есть переменное количество вопросов, поэтому я хочу заменить константу число рядом с TOP с полем из запроса.

Что я в основном хочу, так это:

SELECT TOP tblExam.[ExamSize] * 
FROM tblExamQuestions INNER JOIN tblExam 
ON tblExamQuestions.ExamID = tblExam.ExamID
WHERE tblExam.ExamID = 10
ORDER BY Rnd(tblExamQuestions.ExamQuestionID);

Я предоставляю новый ExamID для этого запроса для каждой сессии экзамена, когда я открываю отчет, так что это, вероятно, будет мешать.

DoCmd.OpenForm strExamName, , , "tblExam.ExamID = " & strExamID

1 Ответ

2 голосов
/ 28 июля 2010

Я думаю, вам придется динамически создавать запрос.

 sSQL="SELECT TOP " & DlookUp("ExamSize","tblExam","ExamID = 10") _
     & " FROM tblExamQuestions INNER JOIN tblExam " _
     & "ON tblExamQuestions.ExamID = tblExam.ExamID " _
     & "WHERE tblExam.ExamID = 10 " _
     & "ORDER BY Rnd(tblExamQuestions.ExamQuestionID)"

'' Permanently change an existing query
CurrentDB.QueryDefs("MyReportQuery").SQL=sSQL
...