|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Перенос сток, область действия ADO table, ADO query и sql
Мне необходимо рандомно извлекать строки из базы Access (я делаю тест и вопрсы должны быть разные), я придумал рандомно выбирать строчку, юзать ее а затем отправлять ее в конец таблицы чтобы затем брать рандом от меньшего значения, и возник вопрос, а как лучше переносить эти самые строки, и если переносить их в ado table или ado query то изменится ли их расположение в бд?
|
#2
|
|||
|
|||
В принципе, БД не предназначена для таких фокусов. Если очень хочется сделать на БД, то я бы предложил такой фокус.
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 и генерировать оттуда. Ес-но, классики должны уметь себя писать/читать в/из файл(а). |
#3
|
|||
|
|||
спасибо, но я напишу по другому, тупо создам массив и рандомно его перемешаю
|
#4
|
||||
|
||||
Так вариант 2 как-раз на этом принципе и основан, но отслеживать уже выданные вопросы вам все-же придется.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |