В принципе, БД не предназначена для таких фокусов. Если очень хочется сделать на БД, то я бы предложил такой фокус.
1. Заводим поле-флаг "Вопрос использован" (USED).
2. Перед началом теста этому полю присваиваем некоторое значение (например, 0).
3. Делаем выборку с условием WHERE USED = 0
4. Генерим номер записи из условия полученного кол-ва строк (Random(ADOQuery.RecordCount + 1).
5. Для полученной строки ставим поле USED в 1.
6. Повторяем с п. 3 ло окончания генерации списка вопросов.
А вообще, можно слелать чуть проще.
1. Должен быть уникальный ID записи (первичный ключ). Лучше, если он будет типа Integer.
2. Заводим массив.
3. Получаем список ID всех вопросов.
4. Генерим номер записи и сохраняем ее ID в массиве.
5. Повторяем с п. 4, пока не получим полный список.
6. Начинаем тест, где по ID из масива получаем соответсвующие вопросы и т.д.
А если оторваться от БД вообще, то можно вполне написать просто классики вопросов-ответов, хранить их в TObjectList и генерировать оттуда. Ес-но, классики должны уметь себя писать/читать в/из файл(а).
|