Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.06.2009, 11:12
morracheg morracheg вне форума
Прохожий
 
Регистрация: 22.06.2009
Сообщения: 2
Репутация: 10
Вопрос Перенос сток, область действия ADO table, ADO query и sql

Мне необходимо рандомно извлекать строки из базы Access (я делаю тест и вопрсы должны быть разные), я придумал рандомно выбирать строчку, юзать ее а затем отправлять ее в конец таблицы чтобы затем брать рандом от меньшего значения, и возник вопрос, а как лучше переносить эти самые строки, и если переносить их в ado table или ado query то изменится ли их расположение в бд?
Ответить с цитированием
  #2  
Старый 22.06.2009, 11:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В принципе, БД не предназначена для таких фокусов. Если очень хочется сделать на БД, то я бы предложил такой фокус.
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  
Старый 22.06.2009, 13:31
morracheg morracheg вне форума
Прохожий
 
Регистрация: 22.06.2009
Сообщения: 2
Репутация: 10
Радость

спасибо, но я напишу по другому, тупо создам массив и рандомно его перемешаю
Ответить с цитированием
  #4  
Старый 22.06.2009, 13:36
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Так вариант 2 как-раз на этом принципе и основан, но отслеживать уже выданные вопросы вам все-же придется.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter