- Код: Выделить всё
rs.Open "SELECT * FROM s ORDER BY RAND()", cn, adOpenKeyset, adLockOptimistic
Не катит...
пишет что: "Неопределенная функция 'RAND' в выражении"...Следовательно уже никак нельзя будет использовать ее в vb-access&
rs.Open "SELECT * FROM s ORDER BY RAND()", cn, adOpenKeyset, adLockOptimistic
GSerg писал(а):А как ты себе представляешь сортировку по результату функции?
select Rand(), s.*
from S
order by 1
Ennor писал(а):Ну ты еще на DBF сошлись - тоже мне, авторитет нашел, мускул...
Сортировка может быть осуществлена по столбцу, указанному в селект-листе. Также, в некоторых случаях, можно отсортировать по невыводимому столбцу, но каковы критерии применимости этого метода, я сейчас не помню. Кроме того, не факт, что такая фича вообще поддерживается Аксессом.Что-то типа того.
- Код: Выделить всё
select Rand(), s.*
from S
order by 1
GSerg писал(а):Не работает потому, что в Access функция называется rnd.
А не будет работать потому, что rnd в запросе вызывается один раз.
GSerg писал(а):А действительно, почему...
А что у нас в od?
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
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
Сейчас этот форум просматривают: Yandex-бот и гости: 0