Avatar billede fc-dong Nybegynder
30. august 2002 - 17:23 Der er 27 kommentarer og
1 løsning

Find tilfældig post

Jeg har denne kode, som skal vise en tilfældig post fra et recordset.
-------------
SELECT  Top 1 *,  VareID
FROM Vare
ORDER BY Rnd(VareID)
----------------------
Det virker ikke. Den viser hele tiden den sammen post.
Hvad skal jeg gøre for, at denne vil vise en forskellig post hver gang siden loades på ny.
Avatar billede medions Nybegynder
30. august 2002 - 17:25 #1
Hvilken database arbejder du med?

//>Rune
Avatar billede medions Nybegynder
30. august 2002 - 17:26 #2
Hvis det er Access så brug denne:

<%
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"dindatabase.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
myConn.Open strDSN

Sql = \"Select count(*) as Found from [dintabell]\"
Set Record =  myConn.Execute(Sql)
Ialt = Record(\"found\")
Sql = \"Select * from [dintabell]\"
Set Record =  myconn.Execute(Sql)
Randomize
RandNum = Int(Rnd * Ialt) + 1
Record.MoveFirst
For i = 1 to RandNum - 1
    Record.MoveNext
next
response.write ...
myConn.Close
Set myConn = Nothing
%>

//>Rune
Avatar billede medions Nybegynder
30. august 2002 - 17:38 #3
Hvis det så er en MySQL Database, kunne du fx. gøre sådan her:

SELECT * FROM tabel ORDER BY Rand()

//>Rune
Avatar billede medions Nybegynder
30. august 2002 - 17:39 #4
<%
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("dindatabase.mdb")
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN

Sql = "Select count(*) as Found from [dintabell]"
Set Record =  myConn.Execute(Sql)
Ialt = Record("found")
Sql = "Select * from [dintabell]"
Set Record =  myconn.Execute(Sql)
Randomize
RandNum = Int(Rnd * Ialt) + 1
Record.MoveFirst
For i = 1 to RandNum - 1
    Record.MoveNext
next
response.write ...
myConn.Close
Set myConn = Nothing

Her er det finkæmmet lidt ;o)
Avatar billede medions Nybegynder
30. august 2002 - 17:42 #5
Her har du det i en lidt mere enkelt version ;o)

<%
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/jokedb.mdb")

    SQL = "SELECT * FROM tblJokes"
    Set rs = Conn.Execute(SQL)
           
    SQLCount = "SELECT Count(*) As Show FROM tblJokes"
    Set go = Conn.Execute(SQLCount)
           
    Function ShowJoke()
        Randomize
        RandNum = Int(Rnd * go("Show")) + 1
        rs.MoveFirst
            For i = 1 to RandNum - 1
                rs.MoveNext
            Next
        Response.Write(Replace(rs("Joke"),vbCrLf, "<br>") & " " & Replace(rs("Joke"),vbCrLf, "<br>"))
    End Function
%>

//>Rune
Avatar billede eagleeye Praktikant
30. august 2002 - 17:43 #6
Samme kode optimeret lidt, med kommentar :)

strSQL = "SELECT * FROM advert where place = '" & strPlace & "'"
RS.Open strSQL, objConn, 3
'Find antal records
recCount = rs.RecordCount
'Find random nummer
randomize
rec = int(rnd * recCount)
'Flyt til den valgte record
rs.Move rec
'Udskriv
response.write rs("kolonnenavn")

rs.Close
Avatar billede eagleeye Praktikant
30. august 2002 - 17:44 #7
hmm øv SQL'en skal ændres fra:
strSQL = "SELECT * FROM advert where place = '" & strPlace & "'"

Til:
strSQL = "SELECT  * FROM Vare"
Avatar billede medions Nybegynder
30. august 2002 - 17:45 #8
eagleeye: *G*

//>Rune
Avatar billede fc-dong Nybegynder
30. august 2002 - 21:56 #9
Hej med jer. Ja undskylde det sene svar, men jeg er først lige kommet hjem.
Det er en acces database jeg bruger.
Jeg har brugt en del af medions kode, men det virker ikke endnu.
------------------------------
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="../../Connections/hans.asp" -->
<%
Sql = "Select count(*) as Found from [Vare]"
Set Record =  myConn.Execute(Sql)
Ialt = Record("found")
Sql = "Select * from [Vare]"
Set Record =  myconn.Execute(Sql)
Randomize
RandNum = Int(Rnd * Ialt) + 1
Record.MoveFirst
For i = 1 to RandNum - 1
    Record.MoveNext
next
response.write
myConn.Close
Set myConn = Nothing
%>
----------------------
Her er fejlkoden
-----------------------
Microsoft VBScript runtime error '800a01a8'

Object required: 'myConn'

start.asp, line 5
--------------------------
Jeg har brugt min egen forbindelse til databassen.
<!--#include file="../../Connections/hans.asp" -->
Avatar billede eagleeye Praktikant
30. august 2002 - 22:03 #10
du skal rette myConn til navnet på den connection du laver i include filen.
Avatar billede fc-dong Nybegynder
30. august 2002 - 22:14 #11
Min conn er
' FileName="Connection_ado_conn_string.htm"
' Type="ADO"
' DesigntimeType="ADO"
' HTTP="true"
' Catalog=""
' Schema=""
Dim MM_Lokecykler_STRING
Skal jeg så udskifte Myconn med MM_Lokecykler_STRING ...?
Avatar billede eagleeye Praktikant
30. august 2002 - 22:16 #12
Ja hvis MM_Lokecykler_STRING  er dit connection object.. Der må være en linie et sted hvor der står noget med:

Set xxxx = Server.CreateObject("ADODB.Connection")

og så er xxxx navet på dit connection object.
Avatar billede fc-dong Nybegynder
30. august 2002 - 22:25 #13
Nu får jeg denne fejl
-------------------
Microsoft VBScript runtime error '800a01a8'

Object required: 'MM_Lokecykler_STRING'

start.asp, line 6

------------------
<%
<!--#include file="../../Connections/Hans.asp" -->

Sql = "Select count(*) as Found from [Vare]"
Set Record =  MM_Lokecykler_STRING.Execute(Sql)
Ialt = Record("found")
Sql = "Select * from [Vare]"
Set Record =  MM_Lokecykler_STRING.Execute(Sql)
Randomize
RandNum = Int(Rnd * Ialt) + 1
Record.MoveFirst
For i = 1 to RandNum - 1
    Record.MoveNext
next
response.write
MM_Lokecykler_STRING.Close
Set MM_Lokecykler_STRING = Nothing

%>
-----------------
Jeg synes bare ikke rigtig at jeg har glemt at erstatte det nogen steder
Avatar billede eagleeye Praktikant
30. august 2002 - 22:29 #14
De betyder den ikke kan finde MM_Lokecykler_STRING som et object.
Avatar billede eagleeye Praktikant
30. august 2002 - 22:30 #15
Så MM_Lokecykler_STRING er vist ikke et connection object.
Avatar billede fc-dong Nybegynder
30. august 2002 - 22:36 #16
Her er den side som forbinder min min asp side med min database
<%
' FileName="Connection_ado_conn_string.htm"
' Type="ADO"
' DesigntimeType="ADO"
' HTTP="true"
' Catalog=""
' Schema=""
Dim MM_Lokecykler_STRING
MM_Lokecykler_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= d:\Hans.mdb"
%>
Denne side bliver forbundet til min start.asp med denne her
<!--#include file="../../Connections/hans.asp" -->
----------------
Hvad er min connection object så ...? (en lidt forvirret mand...!)
Avatar billede eagleeye Praktikant
30. august 2002 - 22:39 #17
Ok.. men så er MM_Lokecykler_STRING "bare" en conenction streng som førtæller en connection hvilken driver og hvilken database den skal bruge.

Så prøv at rette koden tilbage til koden med myConn og tilføj disse to linier:

Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open MM_Lokecykler_STRING


lige før din SQL sætning.
Avatar billede fc-dong Nybegynder
30. august 2002 - 22:49 #18
Nu ser fejlen sådan ud
-----------------
Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

start.asp, line 5
-----------------
Koden ser sådan ud nu
-------------------
<%
<!--#include file="../../Connections/Hans.asp" -->
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open MM_Lokecykler_STRING
Sql = "Select count(*) as Found from [Vare]"
Set Record =  myConn.Execute(Sql)
Ialt = Record("found")
Sql = "Select * from [Vare]"
Set Record =  myconn.Execute(Sql)
Randomize
RandNum = Int(Rnd * Ialt) + 1
Record.MoveFirst
For i = 1 to RandNum - 1
    Record.MoveNext
next
response.write
myConn.Close
Set myConn = Nothing
%>
Avatar billede eagleeye Praktikant
30. august 2002 - 22:52 #19
include filen skal stå i HTML delen af koden

<!--#include file="../../Connections/Hans.asp" -->
<%
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open MM_Lokecykler_STRING
.
.
Avatar billede fc-dong Nybegynder
30. august 2002 - 22:54 #20
Nu kommer den med fejl
---------------
error '80004005'
Unspecified error

start.asp, line 9
--------------------
Linje 9 = Set Record =  myConn.Execute(Sql)
Avatar billede eagleeye Praktikant
30. august 2002 - 23:00 #21
hmmm prøv at lave den første SQL sådan her:

Sql = "Select count(*) as Found from Vare"
Avatar billede fc-dong Nybegynder
30. august 2002 - 23:05 #22
Det virker ikke...?
-----------------
Kan man ikke bruge den du har forslået
---------------------
strSQL = "SELECT  * FROM Vare"
RS.Open strSQL, objConn, 3
'Find antal records
recCount = rs.RecordCount
'Find random nummer
randomize
rec = int(rnd * recCount)
'Flyt til den valgte record
rs.Move rec
'Udskriv
response.write rs("kolonnenavn")

rs.Close
-------------
Når jeg bruger denne her, så får jeg fejl
-----------------
Microsoft VBScript runtime error '800a01a8'

Object required: 'RS'

start.asp, line 24
Avatar billede eagleeye Praktikant
30. august 2002 - 23:07 #23
Oppe under denne linie
Set myConn = Server.CreateObject("ADODB.Connection")

Skal du tilføje:
Set rs = Server.CreateObject("ADODB.Recordset")
Avatar billede fc-dong Nybegynder
30. august 2002 - 23:11 #24
Her er min kode nu
----------------
<!--#include file="../../Connections/Hans.asp" -->
<%
Set myConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT  * FROM Vare"
RS.Open strSQL, objConn, 3
'Find antal records
recCount = rs.RecordCount
'Find random nummer
randomize
rec = int(rnd * recCount)
'Flyt til den valgte record
rs.Move rec
'Udskriv
response.write rs("VareID")
rs.Close
-------------
Og her er fejlmeddelsen
------------------
ADODB.Recordset error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

start.asp, line 8
-----------------
Linje 8 = RS.Open strSQL, objConn, 3
Avatar billede eagleeye Praktikant
30. august 2002 - 23:13 #25
Disse linier:

Set myConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT  * FROM Vare"
RS.Open strSQL, objConn, 3

Skal laves om til:

Set myConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
myConn.Open MM_Lokecykler_STRING
strSQL = "SELECT  * FROM Vare"
RS.Open strSQL, myConn, 3
Avatar billede fc-dong Nybegynder
30. august 2002 - 23:22 #26
Nu virker det. Jubiiiiiiii
Jeg takker mange gange for hjælpen, uden dig var det nok ikke lykkedes i dette årti.
Hvis du vil have dine point, så skal du lige give mig et svar, så jeg kan accepter dit svar.
Avatar billede eagleeye Praktikant
30. august 2002 - 23:24 #27
Det lyder godt det kom til at virke.

Ok her er et svar.
Avatar billede fc-dong Nybegynder
30. august 2002 - 23:25 #28
Jeg takker endnu en gang.
Nu er det vist tid til at få en velfortjent søvn.
God weekend til dig eagleeye
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester