Avatar billede mvk Nybegynder
19. maj 2003 - 15:04 Der er 30 kommentarer og
1 løsning

Random record

hvordan tager jeg en random record ud fra min tabel ? (jeg bruger access db)
http://www.capitolshop.dk/information.asp
Featured Product
Avatar billede thomas_regin Nybegynder
19. maj 2003 - 15:20 #1
Hejsa

Det har altid været et helvede at udtrække random records fra en database, men på SQL server er der kommet en løsning på dette. Ved dog ikke om den virker på access, men du kan jo prøve:

Select * from MYTABLE order by NewID()

Dette giver en random record i SQL server.

Mvh,

Thomas Regin.
Avatar billede oasen Nybegynder
19. maj 2003 - 15:26 #2
Havde det været MySQL kunne du bare tilføje ".....order by Rand()", men når det er Access, bliver du nødt til at gå en anden vej:

Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open "Select * From Tabel", Conn, 1, 3

Do While Not Fundet
    rs.MoveFirst
    Randomize
    rs.Move(int(rs.RecordCount * rnd))
    If Not rs.EOF And Not rs.BOF Then
        Fundet = True
    End If
Loop

Response.Write rs("RandomFelt")
Avatar billede mvk Nybegynder
19. maj 2003 - 15:27 #3
dette er min kode:
<%
Dim random_product
Dim random_product_numRows

Set random_product = Server.CreateObject("ADODB.Recordset")
random_product.ActiveConnection = MM_capitol_STRING
random_product.Source = "SELECT * FROM product WHERE Active = '" + Replace(random_product__MMColParam, "'", "''") + "'"
random_product.CursorType = 0
random_product.CursorLocation = 2
random_product.LockType = 1
random_product.Open()

random_product_numRows = 0

%>
Avatar billede mvk Nybegynder
19. maj 2003 - 15:28 #4
ok - svar fra oasen - prøver lige...
Avatar billede mvk Nybegynder
19. maj 2003 - 15:29 #5
ADODB.Recordset error '800a0bb9'

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

/information.asp, line 96
Avatar billede oasen Nybegynder
19. maj 2003 - 15:30 #6
Avatar billede mvk Nybegynder
19. maj 2003 - 15:31 #7
linie 93-99=
<%
Dim random_product__MMColParam
random_product__MMColParam = "Y"
If (Request("MM_EmptyValue") <> "") Then
  random_product__MMColParam = Request("MM_EmptyValue")
End If
%>
Avatar billede oasen Nybegynder
19. maj 2003 - 15:31 #8
Og i linie 96 står der...?
Avatar billede mvk Nybegynder
19. maj 2003 - 15:33 #9
hehe - i know oasen - jeg har siddet og rodet med flere af dem jeg kunne finde, men har ikke kunne få det til at virke
Avatar billede oasen Nybegynder
19. maj 2003 - 15:33 #10
If (Request("MM_EmptyValue") <> "") Then

Hmm...
Avatar billede oasen Nybegynder
19. maj 2003 - 15:34 #11
Det er vist ikke linie 96...
Avatar billede mvk Nybegynder
19. maj 2003 - 15:36 #12
If (Request("MM_EmptyValue") <> "") Then  - er linie 96
Avatar billede mvk Nybegynder
19. maj 2003 - 15:36 #13
linie 93 - 115

<%
Dim random_product__MMColParam
random_product__MMColParam = "Y"
If (Request("MM_EmptyValue") <> "") Then
  random_product__MMColParam = Request("MM_EmptyValue")
End If
%>
<%
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open "SELECT * FROM product WHERE Active = '" + Replace(random_product__MMColParam, "'", "''") + "'", Conn, 1, 3

Do While Not Fundet
    rs.MoveFirst
    Randomize
    rs.Move(int(rs.RecordCount * rnd))
    If Not rs.EOF And Not rs.BOF Then
        Fundet = True
    End If
Loop

Response.Write rs("RandomFelt")

%>
Avatar billede eagleeye Praktikant
19. maj 2003 - 15:56 #14
Den fejl du beskriver
ADODB.Recordset error '800a0bb9'

kan ikke opstå i den linje du har vist som linje 96, det er en som har med et recordset at gøre.
Avatar billede eagleeye Praktikant
19. maj 2003 - 15:56 #15
Prøv at lave din kode som dette, dog skal du lige rette kolonnenanvet til:

<%
Dim random_product__MMColParam
random_product__MMColParam = "Y"
If (Request("MM_EmptyValue") <> "") Then
  random_product__MMColParam = Request("MM_EmptyValue")
End If
%>
<%
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open "SELECT * FROM product WHERE Active = '" + Replace(random_product__MMColParam, "'", "''") + "'", Conn, 1, 3
if rs.BOF or rs.EOF then
  Response.write "Ingen poster"
else
  rs.Move(int(rs.RecordCound * rnd())
 
  Response.write rs("klonne navn")
end if
%>
Avatar billede eagleeye Praktikant
19. maj 2003 - 15:57 #16
hmmm flot, ret lige denne linje:
  rs.Move(int(rs.RecordCound * rnd())

til:
  rs.Move(int(rs.RecordCount * rnd())
Avatar billede mvk Nybegynder
19. maj 2003 - 16:08 #17
:) - er ("klonne navn") = IDproduct ?
Avatar billede eagleeye Praktikant
19. maj 2003 - 16:10 #18
Ja det kunne det være, det skal i føste omgang bare være et kolonnenavn du har i din tabel for at se det virker.
Avatar billede eagleeye Praktikant
19. maj 2003 - 16:13 #19
Fejl: "Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another."

For det virker så skal du havde en åben connection til databasen som hedder Conn har du det?
Avatar billede mvk Nybegynder
19. maj 2003 - 16:14 #20
ADODB.Recordset error '800a0bb9'

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

/information.asp, line 96


linie 96 = rs.Open "SELECT * FROM product WHERE Active = '" + Replace(random_product__MMColParam, "'", "''") + "'", Conn, 1, 3
Avatar billede mvk Nybegynder
19. maj 2003 - 16:15 #21
min forbindelse ligger i:
<!--#include file="Connections/capitol.asp" -->

som indeholder:
<%
' FileName="Connection_ado_conn_string.htm"
' Type="ADO"
' DesigntimeType="ADO"
' HTTP="true"
' Catalog=""
' Schema=""
Dim MM_capitol_STRING
MM_capitol_STRING = "Data Source=d:\home\capitolshopdk\db\capitolshop.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"
%>
Avatar billede eagleeye Praktikant
19. maj 2003 - 16:15 #22
Så ret denne:

rs.Open "SELECT * FROM product WHERE Active = '" + Replace(random_product__MMColParam, "'", "''") + "'", Conn, 1, 3

tTil:

rs.Open "SELECT * FROM product WHERE Active = '" + Replace(random_product__MMColParam, "'", "''") + "'", MM_capitol_STRING, 1, 3
Avatar billede mvk Nybegynder
19. maj 2003 - 16:20 #23
det hjælper :)
kan du se den fejl der er nu - linie 138 =
<td class="productBrand"><%=(random_product.Fields.Item("Brand").Value)%> </td>
Avatar billede eagleeye Praktikant
19. maj 2003 - 16:20 #24
Lige en ting mere for den ikke skriver samme tal hele tiden så tilføj linjen:

randomize

Lig før denne:
rs.Move(int(rs.RecordCount * rnd())


Så det bliver

randomize
rs.Move(int(rs.RecordCount * rnd())
Avatar billede eagleeye Praktikant
19. maj 2003 - 16:21 #25
Ja ;)

Det så fordi du skal havde ændre enten rs til random_product eller random_product til rs. Lige nu er det valgte random produkt i recordsetet med nanvet rs.
Avatar billede eagleeye Praktikant
19. maj 2003 - 16:23 #26
Det var tanken at du i stedet for denne ene linje:

Response.write rs("klonne navn")


Hvor du har ændret det til produkID skal være det kode som udskriver det random valgte produkt.
Avatar billede mvk Nybegynder
19. maj 2003 - 16:26 #27
du er for sej eagle
det er for vildt så hurtigt det går når du hjælper
.
really appreciate it man :)

smid et svar - det burde være 100 point, men jeg har kun 11 tilbage
Avatar billede eagleeye Praktikant
19. maj 2003 - 16:58 #28
Ok her et svar ;)
Avatar billede oasen Nybegynder
21. maj 2003 - 15:12 #29
Tilføjet
Avatar billede mvk Nybegynder
26. maj 2003 - 10:57 #30
eagle - har du nogen ide om hvorfor jeg ikke kan tage koden ud i en include fil ?
det vil bare ikke virke...
Avatar billede mvk Nybegynder
26. maj 2003 - 11:07 #31
her har jeg oprettet nyt ?: http://www.eksperten.dk/spm/355356
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