Avatar billede bombur Nybegynder
21. maj 2003 - 21:47 Der er 6 kommentarer og
1 løsning

Random udtræk fra tabel i Acces database

Jeg har det problem at alle spørgsmål her på stedet går på vbScript og jeg koder altså i JScript. Derfor kan jeg ikke finde det jeg skal bruge.

Jeg skal bruge et script der fra en tabel, med RIGTIGT mange records, random henter en record ud.

Det skal altså være 100% tilfældigt hver gang hvilken record der bliver hentet!

Sådan åbner jeg databasen:
<%
conn = Server.CreateObject("ADODB.Connection");
DBPath = "DBQ=" + Server.mappath("/dbase/infodb.mdb");
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; " + DBPath);
%>
Avatar billede -master-d- Nybegynder
21. maj 2003 - 21:52 #1
Du kan vel rette denne her til, det skulle ikke være så svært.

Randomize Timer

Set Rs = Conn.Execute("SELECT * FROM Tabel WHERE ID = ("&_
    "SELECT Min(ID) FROM Tabel WHERE ID >= (" &_
    "SELECT Round(CDbl(" & Replace(Rnd(),",",".") &_
    "*Max(ID))) FROM Tabel))")
Avatar billede bombur Nybegynder
21. maj 2003 - 22:03 #2
Jeg kender ikke JScript koden for de der ting :(
Avatar billede -master-d- Nybegynder
21. maj 2003 - 22:16 #3
okay, jeg koder ikke selv i JScript, men jeg kan da godt prøve.

Mit forsøg kommer her :

Randomize Timer

Set Rs = Conn.Execute("SELECT * FROM Tabel WHERE ID = ("SELECT Min(ID) FROM Tabel WHERE ID >= ("SELECT Round(CDbl(" + Replace(Rnd(),",",".") + " *Max(ID))) FROM Tabel))")
Avatar billede bombur Nybegynder
21. maj 2003 - 22:20 #4
Uhauha... nej den kan den ikke lide :D
Den siger den ikke kan finde ud af at compilere det!
Avatar billede eagleeye Praktikant
21. maj 2003 - 22:26 #5
Hvis du har RIGTIGT mange records kan du lave en SQL som hendter alle ID (autonummer) kolonnnen ud. Og vælger et tilfældigt ID der i blandt. Man kan nemlig ikke nøjes med antal hvis man har slettet nogle records.


Så koden bliver lidt mere besværlig:


conn = Server.CreateObject("ADODB.Connection");
rs = Server.CreateObject("ADODB.Recordset");

DBPath = "DBQ=" + Server.mappath("/dbase/infodb.mdb");
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; " + DBPath);

SQL = "SELECT ID FROM xyzTabel";
rs = Conn.Execute(SQL)

var listID,IDarr;
var antal, visI;
antal = 0;
listID = "";
while (!rs.EOF) {
  listID += rs("ID");
  rs.MoveNext();
  if (!rs.EOF) {
    listID += ",";
  }
  antal++
}
IDarr = listID.split(",");
visI = Math.floor(Math.random()*antal);

SQL = "SELECT * FROM xyzTabel WHERE ID = " + IDarr[visI];
rs = Conn.Execute(SQL)

Response.Write (rs("navn"));

Conn.Close();
Avatar billede bombur Nybegynder
21. maj 2003 - 22:32 #6
Fed kode... det virker dude.. du er min helt! Hvis jeg havde været tøs eller gay havde jeg omfavnet dig!
Avatar billede eagleeye Praktikant
21. maj 2003 - 23:10 #7
Man kan enda korte det lidt med ved at bruge rs.GetRows() til at få alle ID ud:


conn = Server.CreateObject("ADODB.Connection");
rs = Server.CreateObject("ADODB.Recordset");

DBPath = "DBQ=" + Server.mappath("/dbase/infodb.mdb");
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; " + DBPath);

var SQL, antalID, tempArray, idArr, visI;

SQL = "SELECT ID FROM xyzTabel";
rs = Conn.Execute(SQL)

tempArray = rs.GetRows();
idArr = tempArray.toArray();
antalID = idArr.length;
visI = Math.floor(Math.random()*antalID);

SQL = "SELECT * FROM xyzTabel WHERE ID = " + idArr[visI];
rs = Conn.Execute(SQL)

Response.Write (rs("navn"));

Conn.Close();
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