Avatar billede kartolux Nybegynder
23. maj 2001 - 21:58 Der er 5 kommentarer og
1 løsning

Random udtræk antal med formular?

Jeg får følgende fejl:

Microsoft OLE DB Provider for ODBC Drivers error \'80040e24\'

Rowset does not support fetching backward.

/random.asp, line 35


til denne kode, som skal kunne udtrække et random antal fra min database.

Hvad er der galt???

Kode:

<%  Response.Expires = 0 %>   
 
     
<html>   
<head> 
<meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;charset=windows-1252\"> 
<title>Random Recordset</title> 
</head> 
 
<body> 
<% 
 
        Dim objConn 
        Dim objRst 
        Dim strSQL 
        Dim strConnection 
        Dim str 
        Dim str1 
        Dim cnt 
        Dim cnt1 
        Dim rndMax 
        Dim RndNumber 
 
        strConnection=\"driver={Microsoft Access Driver (*.mdb)};dbq=\" & server.mappath(\"_private/articledb.mdb\") 
        strSQL = \"SELECT ArticleId FROM Articles\" 
 
        set objConn = Server.CreateObject(\"ADODB.Connection\") 
        Set objRst = Server.CreateObject(\"ADODB.Recordset\") 
        objConn.Open strConnection 
        set objRst.ActiveConnection = objConn 
        objRst.LockType = adLockOptimistic 
        objRst.CursorType = adOpenKeySet 
        objRst.Open strSQL 
 
        objRst.MoveLast 
        cnt = objRst.RecordCount 
        cnt1 = cnt 
        rndMax = cnt 
 
        If CInt(Request.Form(\"maxNumber\")) <  cnt Then 
        cnt1 = CInt(Request.Form(\"maxNumber\")) 
        End If 
 
        str = \",\" 
        str1 = \",\" 
 
        Do Until cnt1 = 0 
                Randomize 
                RndNumber = Int(Rnd * rndMax) 
               
                If (InStr(1, str1, \",\" & RndNumber & \",\" ) = 0) Then 
                str1 = str1 & RndNumber & \",\" 
                cnt1 = cnt1 - 1 
                objRst.MoveFirst 
                objRst.Move RndNumber 
                        str = str & objRst(\"id\") & \",\" 
        End If 
 
        Loop 
 
        objRst.Close 
        Set objRst = Nothing 
 
        sql = \"SELECT * FROM Articles WHERE (((InStr(1,\'\"  & str & \"\',(\',\' & [id] & \',\')))<>0)) ORDER BY Rnd(IsNull([id])*0+1)\" 
        Set objRst = Server.CreateObject(\"ADODB.Recordset\") 
        set objRst.ActiveConnection = objConn 
        objRst.LockType = adLockOptimistic 
        objRst.CursorType = adOpenStatic 
        objRst.Open sql 
%> 
<p><a href=\"viewcode.asp?source=/demo/random.asp\">View the code</a></p> 
<table width=\"100%\" BORDER=\"0\" BGCOLOR=\"#ffffff\" CELLSPACING=\"0\"> 
<tr> 
<td> 
<font FACE=\"Arial\" COLOR=\"#000000\"><b>SQL Statement =</b> <%=sql%> 
</td> 
</tr> 
</table> 
<br> 
<table BORDER=\"1\" BGCOLOR=\"#ffffff\" CELLSPACING=\"0\"> 
    <font FACE=\"Arial\" COLOR=\"#000000\"><caption><b>Random Recordset</b></caption> 
<thead> 
    <tr> 
        <th BGCOLOR=\"#c0c0c0\" BORDERCOLOR=\"#000000\"><font SIZE=\"2\" FACE=\"Arial\" COLOR=\"#000000\">Count</font></th> 
        <th BGCOLOR=\"#c0c0c0\" BORDERCOLOR=\"#000000\"><font SIZE=\"2\" FACE=\"Arial\" COLOR=\"#000000\">Id</font></th> 
        <th BGCOLOR=\"#c0c0c0\" BORDERCOLOR=\"#000000\"><font SIZE=\"2\" FACE=\"Arial\" COLOR=\"#000000\">AdmDate</font></th> 
        <th BGCOLOR=\"#c0c0c0\" BORDERCOLOR=\"#000000\"><font SIZE=\"2\" FACE=\"Arial\" COLOR=\"#000000\">DischDate</font></th> 
    </tr> 
</thead> 
<tbody> 
<% 
objRst.MoveFirst 
Dim ccnt 
ccnt = 0 
do while Not objRst.eof 
ccnt = ccnt + 1 
%> 
    <tr VALIGN=\"TOP\"> 
          <td BORDERCOLOR=\"#c0c0c0\"><font SIZE=\"2\" FACE=\"Arial\" COLOR=\"#000000\"><%=ccnt%><br> 
        </font></td> 
        <td BORDERCOLOR=\"#c0c0c0\"><font SIZE=\"2\" FACE=\"Arial\" COLOR=\"#000000\"><%=objRst.Fields(\"id\")%><br> 
        </font></td> 
        <td BORDERCOLOR=\"#c0c0c0\"><font SIZE=\"2\" FACE=\"Arial\" COLOR=\"#000000\"><%=objRst.Fields(\"AdmDate\")%><br> 
        </font></td> 
        <td BORDERCOLOR=\"#c0c0c0\"><font SIZE=\"2\" FACE=\"Arial\" COLOR=\"#000000\"><%=objRst.Fields(\"DischDate\")%><br> 
        </font></td> 
    </tr> 
<% 
objRst.MoveNext 
loop 
 
objRst.Close 
Set objRst = Nothing 
 
objConn.Close 
Set objConn = Nothing 
%> 
</tbody> 
<tfoot> 
</tfoot> 
</table> 
</font> 
</body> 
</html>
Avatar billede erikjacobsen Ekspert
23. maj 2001 - 22:07 #1
Mit bedste bud er at lave en
    objRst.CursorType = adOpenDynamic
i stedet for.
Avatar billede kartolux Nybegynder
23. maj 2001 - 22:14 #2
Okay - det har jeg prøvet nu, men får følgende fejl:

ADODB.Recordset error \'800a0bb9\'

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

/random.asp, line 31


Jeg må erkende, at jeg ikke aner en hujende fis om, hvad scriptet laver...
Avatar billede tofte Juniormester
23. maj 2001 - 22:16 #3
jeg er ikke nogen haj på området men prøv lige
objRst.Open strSQL,strConnection,1,3
i stedet for
objRst.Open strSQL

jeg kan ikke lige finde min dokumentation, men det plejer at virke
Avatar billede tofte Juniormester
23. maj 2001 - 22:28 #4
det svarer til
CursorType=adOpenStatic
LockType=adLockReadOnly
Avatar billede erikjacobsen Ekspert
24. maj 2001 - 04:35 #5
Hmm, man kunne nok med fordel læse alle id-erne ind i et array, og lave
udvælgelsen af de forskellige derfra.
Avatar billede kartolux Nybegynder
16. maj 2002 - 22:30 #6
Lukker
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