RAND() не катит?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

RAND() не катит?

Сообщение Boss IT » 07.11.2005 (Пн) 1:11

Сам запрос:
Код: Выделить всё
rs.Open "SELECT * FROM s ORDER BY RAND()", cn, adOpenKeyset, adLockOptimistic


Не катит...

пишет что: "Неопределенная функция 'RAND' в выражении"...Следовательно уже никак нельзя будет использовать ее в vb-access&

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

Сообщение GSerg » 07.11.2005 (Пн) 1:29

А как ты себе представляешь сортировку по результату функции?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 07.11.2005 (Пн) 1:35

GSerg писал(а):А как ты себе представляешь сортировку по результату функции?


Я уже никак непредставляю.... Скажи почему например в mysql идет этот запрос, а в VB нет?

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 07.11.2005 (Пн) 1:41

Ну ты еще на DBF сошлись - тоже мне, авторитет нашел, мускул...

Сортировка может быть осуществлена по столбцу, указанному в селект-листе. Также, в некоторых случаях, можно отсортировать по невыводимому столбцу, но каковы критерии применимости этого метода, я сейчас не помню. Кроме того, не факт, что такая фича вообще поддерживается Аксессом.
Код: Выделить всё
select Rand(), s.*
from S
order by 1
Что-то типа того.

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 07.11.2005 (Пн) 2:29

Ennor писал(а):Ну ты еще на DBF сошлись - тоже мне, авторитет нашел, мускул...

Сортировка может быть осуществлена по столбцу, указанному в селект-листе. Также, в некоторых случаях, можно отсортировать по невыводимому столбцу, но каковы критерии применимости этого метода, я сейчас не помню. Кроме того, не факт, что такая фича вообще поддерживается Аксессом.
Код: Выделить всё
select Rand(), s.*
from S
order by 1
Что-то типа того.


У меня БД Access, твой вариант не работает, пишет: "Куй" =).

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

Сообщение GSerg » 07.11.2005 (Пн) 2:58

Не работает потому, что в Access функция называется rnd.
А не будет работать потому, что rnd в запросе вызывается один раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 07.11.2005 (Пн) 23:25

GSerg писал(а):Не работает потому, что в Access функция называется rnd.
А не будет работать потому, что rnd в запросе вызывается один раз.


"SELECT od FROM s ORDER BY RND(od)"
Вот так он работает, и если присмотреться то выдает всегда одни и те же значения. И все же как и перетасовать чтоб выдавал каждый раз разные значения?

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

Сообщение GSerg » 07.11.2005 (Пн) 23:34

Значение будет одно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 07.11.2005 (Пн) 23:35

Почему?

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

Сообщение GSerg » 07.11.2005 (Пн) 23:40

А действительно, почему...

А что у нас в od?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 07.11.2005 (Пн) 23:43

GSerg писал(а):А действительно, почему...

А что у нас в od?


:D :D :D

od - это у нас поле в таблице s. Type = Text.

Но пока там просто числа, а не текст.

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

Сообщение GSerg » 07.11.2005 (Пн) 23:56

А вот сделай там число, или не там, но число сделай...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 08.11.2005 (Вт) 0:04

Не, народ, это вам не Огакул. Продукты Microsoft ведут себя в этом вопросе именно так, и исправить это можно, только изменив алгоритм. Обрабатывать по одной строке за раз, тогда значения будут меняться.

Причем, по-моему, проще это сделать на клиенте - пробежаться по рекордсету, на каждом шаге делая Rnd() для этого поля, а потом по нему отсортировать.

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 08.11.2005 (Вт) 0:05

GSerg писал(а):А вот сделай там число, или не там, но число сделай...


And?

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

Сообщение GSerg » 08.11.2005 (Вт) 0:09

And use it as the argument for RND function...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 08.11.2005 (Вт) 0:14

Example it is possible?

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 08.11.2005 (Вт) 0:22

Код: Выделить всё
Private Sub Form_Load()
Randomize
Dim n As Long
Dim c As Long
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=True;Data Source=" & App.Path _
& "\aa.mdb;Mode=ReadWrite;Jet OLEDB"
rs.Open "SELECT od FROM s", cn, adOpenKeyset, adLockOptimistic
c = rs.RecordCount * Rnd(Rnd * c)
Set rs = Nothing
rs.Open "SELECT od FROM s ORDER BY RND(od-" & c & ")", cn, adOpenKeyset, adLockOptimistic
Do Until rs.EOF
    List1.AddItem rs.Fields("od")
    rs.MoveNext
Loop
Set rs = Nothing
End Sub


Вот что получилось :shock: :roll: =))

2GSerg сойдет :?:

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

Сообщение GSerg » 08.11.2005 (Вт) 0:39

Код: Выделить всё
Option Explicit

Private Sub Form_Load()
  CreateObject("ADOX.Catalog").Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\1.mdb"
 
  With CreateObject("ADODB.Connection")
    .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\1.mdb"
    .Execute "CREATE TABLE Table1 (RowID counter NOT NULL PRIMARY KEY, SomeStuff Text(100))", , 1& Or &H80&
    .Execute "CREATE PROCEDURE Query1 AS SELECT * FROM Table1 ORDER BY Rnd(RowID)", , 1& Or &H80&
   
    .Execute "INSERT INTO Table1 (SomeStuff) VALUES ('One')", , 1& Or &H80&
    .Execute "INSERT INTO Table1 (SomeStuff) VALUES ('Two')", , 1& Or &H80&
    .Execute "INSERT INTO Table1 (SomeStuff) VALUES ('Three')", , 1& Or &H80&
    .Execute "INSERT INTO Table1 (SomeStuff) VALUES ('Four')", , 1& Or &H80&
   
    MsgBox .Execute("Query1", , 4&).GetString(ColumnDelimeter:=vbTab, RowDelimeter:=vbNewLine)
    MsgBox .Execute("Query1", , 4&).GetString(ColumnDelimeter:=vbTab, RowDelimeter:=vbNewLine)
    MsgBox .Execute("Query1", , 4&).GetString(ColumnDelimeter:=vbTab, RowDelimeter:=vbNewLine)
    MsgBox .Execute("Query1", , 4&).GetString(ColumnDelimeter:=vbTab, RowDelimeter:=vbNewLine)
   
    .Close
  End With
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Boss IT
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 01.07.2005 (Пт) 21:23
Откуда: Челябинск city

Сообщение Boss IT » 08.11.2005 (Вт) 1:52

8)


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList