Rnd без повторов - это реально?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
alehander
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 08.11.2006 (Ср) 16:09
Откуда: Vologda region

Rnd без повторов - это реально?

Сообщение alehander » 01.12.2006 (Пт) 16:34

Доброе время суток. Господа, прошу помощи.
есть таблица temp_4. Поля id -integer,id_predm-integer,id_vb-counter.
2 таблица vopr_tmp.
Поля id -integer, id_predm-integer,id_vb-counter.
Задача такая рандомно выбирается id из таблицы temp_4 и заносится в таблицу vopr_tmp.
Я рандом делаю так
x=dcout("[id_vb],temp_4")
for a=1 to z
'где z число вносимое userом
c=int ((x*rnd())+1)
docmd.runsql("INSERT INTO vopr_tmp Select temp_4.id,id_predm from temp_4 where id_vb=c")
next a
Это работает без проблем.
вопрос как занести в vopr_tmp рандомно выбранные значения чтобы они не повторялись.
ну чтообы если рандом выбрал число 5, то чтобы он это число затем не выбирал

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.12.2006 (Пт) 21:58

Сделать в vopr_tmp уникальный индекс по нужному полю. Если это sql сервер, добавить опцию игнорирования повторов.
Лучший способ понять что-то самому — объяснить это другому.

alehander
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 08.11.2006 (Ср) 16:09
Откуда: Vologda region

Сообщение alehander » 02.12.2006 (Сб) 15:14

это бд в ACCESS 2000 офис.
Возможно я не правильно изложил вопрос? Как выбрать рандомом определенное количество записей, таким образом, чтобы рандом если он уже выбран больше не выбирался?
Возможно это можно сделать так, я только не могу сообразить код.
создается таблица проба.
рандом выбирает значение например 7.
вызываются все значения из пробы и сравниваются с семеркой,
если 7 уже есть рандом выбирает другое значение и тоже сравнивает со всеми значениями в таблице.
если этого значения в таблице проба нет, то это значение заносится в таблицу проба и происходит
docmd.runsql("INSERT INTO vopr_tmp Select temp_4.id,id_predm from temp_4 where id_vb=c")
Надеюсь выразился понятно. Надеюсь на помощь.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.12.2006 (Пн) 15:31

Создаешь пул, выбираешь случайный элемент, удаляешь элемент из пула.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 04.12.2006 (Пн) 18:01

Еще раз говорю, сделать в vopr_tmp уникальный индекс по этому рандомному полю. В этом случае при добавлении docmd.runsql("INSERT INTO vopr_tmp Select temp_4.id,id_predm from temp_4 where id_vb=c") повторного значения возникнет ошибка, которую можно обработать.
Лучший способ понять что-то самому — объяснить это другому.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 04.12.2006 (Пн) 18:31

Antonariy, мне кажется alibek предложил более интересный вариант.
В твоем случае, когда количество доступных значений (которые выбираются из исходной таблицы) подходит к концу придется обрабатывать все больше исключений (или ошибок, как правильней сказать?).
У alibek'a никаких исключений вообще не должно возникать.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

alehander
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 08.11.2006 (Ср) 16:09
Откуда: Vologda region

Сообщение alehander » 04.12.2006 (Пн) 18:43

Господа, объясните что такое пул? Это какая нибудь временная таблица, я правильно понял? И как можно работать с пулом используя vba and sql?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.12.2006 (Пн) 18:57

Если у тебя есть 500 рублей купюрами по 100, то это пул из пяти элементов... Как с ним работать? Как с любым другим пулом, беря и возвращая (если надо) элементы...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alehander
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 08.11.2006 (Ср) 16:09
Откуда: Vologda region

Сообщение alehander » 04.12.2006 (Пн) 19:12

Спасибо за объяснение. А синтаксис не подскажите а то у меня литературы нормальной нет, есть пара самоучителей, а там про программирование пара строчек. Нормальный литературы не могу найти.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList