Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Выбор произвольной записи из таблицы


Автор: Fedor 1.10.2004, 23:45
Собственно, как рэндомом выбрать с помощью Квери запись из таблицы (какой запрос для этого нужен)

Автор: Kesh 2.10.2004, 11:14
Код
Select First(*) from mytable
или я чего-то не понял?

Автор: Fedor 2.10.2004, 16:49
Ну, такой запрос у меня вообще не работает.

Поясняю еще раз. В таблице есть несколько записей. Как из них случайным образом выбрать одну. (Она может быть и первой, и десятой, и сто двадцать пятой).

В принципе, решение может быть получено если бы я знал. как выбрать n-тую запись из таблицы. Причем, запись состоит только из одного поля тектсового вида (никаких индексов и номеров).
И как узнать количество всех записей в таблице.

Автор: Dimich 2.10.2004, 17:02
Не знаю, как в MsAccess, а в Oracle можно узнать сколько строк в таблице так:
Код
select count(1) from mytable;
и соответственно выбрать N-ю так:
Код
select * from mytable where rownum = :N;
...может поможет.......

Автор: boevik 2.10.2004, 23:10
Если про Access, то узнать сколько строк в таблице так:
Код
select count(*) from mytable;

А вот выбрать N-ю запись можно к примеру так:
Код
select top N * from mytable;

из рекордсета взять последнюю запись.

Автор: LSD 2.10.2004, 23:32
Цитата(Dimich @ 2.10.2004, 17:02)
Не знаю, как в MsAccess, а в Oracle можно узнать сколько строк в таблице так:
Код
select count(1) from mytable;
и соответственно выбрать N-ю так:
Код
select * from mytable where rownum = :N;
...может поможет.......

Этод код работать не будет, т.к. вначале строки отбираются согласно условию и только затем они добавляются в результирующий запрос. Таким образом если мы укажем rownum = 5, то в результате получим 0 строк. Хотя такой запрос сработает: rownum < 5.

Автор: Vit 3.10.2004, 16:56
http://forum.vingrad.ru/index.php?showtopic=30703

Автор: Kesh 3.10.2004, 17:12
Для mySQL
Код
SELECT *
FROM `mytable`
ORDER BY RAND()
LIMIT 1

Автор: LSD 3.10.2004, 17:13
Вот такой код работает:
Код
select <columns> from (select <columns>, rownum row_num  from <tables>) where row_num = 10;

Автор: boevik 3.10.2004, 18:34
Господа, вы не забыли что мы ведем речь об MSAccess?

Автор: Kesh 3.10.2004, 18:49
LSD Вложенный запрос для выборки одной записи... ИМХО не есть зеир гуд...

Автор: Vit 3.10.2004, 18:52
Цитата(Kesh @ 3.10.2004, 09:49)
LSD Вложенный запрос для выборки одной записи... ИМХО не есть зеир гуд...


Но и не смертельно

Автор: LSD 3.10.2004, 19:27
Цитата(Kesh @ 3.10.2004, 18:49)
LSD Вложенный запрос для выборки одной записи... ИМХО не есть зеир гуд...

Во первых, он легко модифицируется для выборки произвольного числа столбцов, достаточно лишь изменить условие, так что alles ist in Ordnung.
Во вторых, вопрос был в том:
Цитата(Morpheus @ 1.10.2004, 23:45)
как рэндомом выбрать с помощью Квери запись из таблицы (какой запрос для этого нужен)
.

Автор: dionisiu 31.7.2006, 21:11
Fedor, делай примерно так:
Код

set db=CurrentDb
set rec=db.tabledefs("SuperTable")
rec.MoveFirst
lenght=rec.RecordCount
randNum=RANDOM(lenght)+1
rec.Move randNum
'дальше делаешь со своей записью что угодно
'если надо редактировать, то
rec.Edit
' действие
'

rec.Update

'если просто прочитать
var=rec!FieldNeeded.Value

не забудь объявить базу, рекордсет, переменные, а после - закрыть и уничтожить smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)