Avatar billede pelskee Nybegynder
30. januar 2004 - 11:20 Der er 51 kommentarer og
2 løsninger

Randomize kommer med fejl

jeg har nedenstående kode, men den kommer nogle gange med fejl. hvis den ikke finder en record - kan nogen hjælpe mig med at rette koden til + en lille forklaring :)

<% 
Set Taeller = Server.CreateObject("ADODB.Recordset") 
Taeller.ActiveConnection = MM_scandlines_STRING 

Taeller.Open "SELECT * FROM Vin WHERE Salgstype = 'Best Buy' AND Aktiv_Dansk = 'Y'", MM_scandlines_STRING, 1, 3
tael = 0
while not Taeller.eof
    tael = tael + 1
Taeller.movenext
wend

Taeller.Close()
Set Taeller = Nothing

Set rsRandom = Server.CreateObject("ADODB.Recordset") 
rsRandom.ActiveConnection = MM_scandlines_STRING 
rsRandom.Open "SELECT * FROM Vin WHERE Salgstype = 'Best Buy' AND Aktiv_Dansk = 'Y'", MM_scandlines_STRING, 1, 3 
If rsRandom.BOF or rsRandom.EOF Then 
      Response.write "Ingen poster" 
else 
    randomize
    randomNr = CInt(rnd() * tael) 
    rsRandom.Move(randomNr)
end if 
%>
Avatar billede madschristensen Nybegynder
30. januar 2004 - 11:37 #1
Hvilken fejl - hvad skriver den ?
Avatar billede pelskee Nybegynder
30. januar 2004 - 12:17 #2
Avatar billede pelskee Nybegynder
30. januar 2004 - 12:17 #3
Microsoft VBScript runtime error '800a01fb'

An exception occurred: 'rsRandom.Move'

/etgodttilbud.asp, line 25
Avatar billede madschristensen Nybegynder
30. januar 2004 - 12:31 #4
Cint(rnd()*teal) returnere et tal mellem 0 og tael-1...

prøv med cInt=(rnd()*tael)+1
Avatar billede pelskee Nybegynder
30. januar 2004 - 12:48 #5
Microsoft VBScript runtime error '800a01fb'
An exception occurred: 'rsRandom.Move'
/etgodttilbud.asp, line 25

kommer stadig
Avatar billede pelskee Nybegynder
30. januar 2004 - 12:53 #6
´det er fanme vildt - hver gang jeg uploader den fil går hele sitet faktisk ned. Kan du hjælpe mig med en lave en random funktion fra bunden
Avatar billede pelskee Nybegynder
30. januar 2004 - 13:00 #7
dette virker ikke:
<%
Set rsRandom = Server.CreateObject("ADODB.Recordset")
rsRandom.Open "SELECT *  FROM Vin  WHERE Salgstype = 'Best Buy' AND Aktiv_Dansk = 'Y'", MM_scandlines_STRING, 1, 3
If rsRandom.BOF or rsRandom.EOF Then
  Response.write "Ingen poster"
else
randomize
randomNr = Int(rsRandom.RecordCount * rnd())
rsRandom.Move(randomNr)
end if
%>
Avatar billede madschristensen Nybegynder
30. januar 2004 - 13:01 #8
Som jeg læser det, vil du hente et antal vine fra databasen og vælge en tilfældig vin ud ?

Hvis recordcount virker i asp - skulle dette kunne gøre det...

is rsRandom.recordcount>0 then
  rsRandom.move(cInt(rnd()*rsRandom.recordcount)+1)
else
  'der er ingen poster
end if
Avatar billede madschristensen Nybegynder
30. januar 2004 - 13:02 #9
Du kan bare rette din oprindelse kode til:
Avatar billede madschristensen Nybegynder
30. januar 2004 - 13:02 #10
randomNr = CInt(rnd() * tael)+1
Avatar billede pelskee Nybegynder
30. januar 2004 - 14:48 #11
det skal være en helt ny/anden random funktion. hver gang jeg prøver at køre den side er der ingen fil på sitet der virker. underligt - men det passer...
Avatar billede stingbat Nybegynder
30. januar 2004 - 14:53 #12
Hvorfor ikke benytte den indbyggede RANDom-funktion i SQLen? Samt en TOP 1 (MSSQL/Access) eller LIMIT 1 (MySQL)
Avatar billede pelskee Nybegynder
30. januar 2004 - 14:55 #13
stingbat - helt sikkert. men så meget styr har jeg ikke så sql
Avatar billede stingbat Nybegynder
30. januar 2004 - 14:57 #14
SELECT TOP 1 * FROM Vin WHERE Salgstype = 'Best Buy' AND Aktiv_Dansk = 'Y' ORDER BY RAND()
Avatar billede stingbat Nybegynder
30. januar 2004 - 14:59 #15
Ellers prøv at kigge lidt her, hvis du vil lave alternative løsninger:
http://authors.aspalliance.com/mamanze/articles/?p=randomrecords
Avatar billede eagleeye Praktikant
30. januar 2004 - 15:37 #16
stingbat >> måske fordi RAND() kun virker på mysql!!

Hvilken database bruger du?
Avatar billede stingbat Nybegynder
30. januar 2004 - 15:51 #17
RAND() skulle også virke under MSSQL og MySQL

Under Access, er det derimod RND() ...
Avatar billede eagleeye Praktikant
30. januar 2004 - 16:12 #18
pelskee >> hvilken database bruger du?
Det har betydning for hvordan det skal laves.
Avatar billede pelskee Nybegynder
30. januar 2004 - 16:19 #19
MySQL
Avatar billede eagleeye Praktikant
30. januar 2004 - 16:23 #20
Så der derfor det ikke virker, recordCount vil være 0 når man bruger mySQL..
Prøv:

Set rsRandom = Server.CreateObject("ADODB.Recordset") 
rsRandom.ActiveConnection = MM_scandlines_STRING 
rsRandom.Open "SELECT * FROM Vin WHERE Salgstype = 'Best Buy' AND Aktiv_Dansk = 'Y' ORDER BY RAND() limit 1", MM_scandlines_STRING, 1, 3 
If rsRandom.BOF Then 
      Response.write "Ingen poster" 
else 
    response.write rsRandom("kolonne_her")
end if
Avatar billede stingbat Nybegynder
30. januar 2004 - 16:27 #21
Det er jo det ;-)
Selvom svaret nu lå allerede tidl. i "debatten", før databasetypen blev oplyst
Avatar billede eagleeye Praktikant
30. januar 2004 - 16:29 #22
det kan jeg nu ikke se
Avatar billede pelskee Nybegynder
30. januar 2004 - 16:33 #23
kan man i en sql lave en løkke så de eksempelvis ud fra en WHERE ganger pris med antal så man kan beregne en totalpris ? - et lille tillægsspørgsmål som ikke kræver svar
Avatar billede pelskee Nybegynder
30. januar 2004 - 16:34 #24
sådan ser det ud, og det virker :)
<%
Dim rsRandom
Dim rsRandom_numRows

Set rsRandom = Server.CreateObject("ADODB.Recordset")
rsRandom.ActiveConnection = MM_scandlines_STRING
rsRandom.Source = "SELECT * FROM Vin WHERE Salgstype = 'Best Buy' AND Aktiv_Dansk = 'Y' ORDER BY RAND()"
rsRandom.CursorType = 0
rsRandom.CursorLocation = 2
rsRandom.LockType = 1
rsRandom.Open()

rsRandom_numRows = 0
%>
Avatar billede eagleeye Praktikant
30. januar 2004 - 16:36 #25
Er det to kolonne navne du har som hedder pris og antal?
Avatar billede stingbat Nybegynder
30. januar 2004 - 16:38 #26
1. Nævnte RANDom op til flere gange
2. Nævnte LIMIT 1
Var jo det svaret endte med?

pelskee:
Husk evt. lige LIMIT 1 ... som skrevet tidl. Dermed får du kun én record ud, i stedet for flere (og ikke belaster unødigt)... Men med mindre at du selvfølgelig gerne vil have flere ud, så i orden :)
Avatar billede pelskee Nybegynder
30. januar 2004 - 16:42 #27
eagle: ja. i den tabel jeg henter har jeg kolonne pris og kolonne antal

stingbat: når jeg bruger LIMIT 1 virker det ikke
Avatar billede eagleeye Praktikant
30. januar 2004 - 16:44 #28
Det kan laves direkt i SQL sætningen så:

rsRandom.Source = "SELECT (pris*antal) as totalpris, * FROM Vin WHERE Salgstype = 'Best Buy' AND Aktiv_Dansk = 'Y' ORDER BY RAND()"


og du kan udskrive total som en kolonne:

Response.Write rsRandom("totalpris")
Avatar billede stingbat Nybegynder
30. januar 2004 - 16:55 #29
Prøv med "LIMIT 0,1" i stedet (MySQL)... Blot lige for at checke
Hvis ikke det virker, så prøv "SELECT TOP 1 * FROM ..." (Access/MSSQL)

Evt. prøv at benytte ADODB.Connection i stedet, hvis du ender denne...
Så kan du bruge Conn.Execute("SELECT ....") i stedet...
Avatar billede pelskee Nybegynder
30. januar 2004 - 16:58 #30
tusinde tak - jeg hæver med 30 point så får i 30 hver
Avatar billede stingbat Nybegynder
30. januar 2004 - 17:04 #31
Okay :-) Håber da at det hele så virker nu
Avatar billede eagleeye Praktikant
30. januar 2004 - 17:04 #32
ok, så skal vi vel lige svare? ;)
Avatar billede pelskee Nybegynder
30. januar 2004 - 17:06 #33
eagle - det var en jeg skulle bruge til noget andet:
rsTotal.Source = "SELECT (pris*antal) as totalpris  FROM Indkoebskurv  WHERE SessionID = " + Replace(rsTotal__MMColParam, "'", "''") + " GROUP BY Pris, Overskrift"
Avatar billede eagleeye Praktikant
30. januar 2004 - 17:07 #34
ok, men det er det samme, når du bruge GROUP BY skal de kolonner også med i select delen

rsTotal.Source = "SELECT (pris*antal) as totalpris, pris, Overskrift  FROM Indkoebskurv  WHERE SessionID = " + Replace(rsTotal__MMColParam, "'", "''") + " GROUP BY Pris, Overskrift"
Avatar billede stingbat Nybegynder
30. januar 2004 - 17:09 #35
Er det ikke det samlede, hvor du kun får én kolonne ud? Så prøv evt. "SELECT SUM(pris*antal) AS totalpris ...." ...
Avatar billede stingbat Nybegynder
30. januar 2004 - 17:12 #36
Eller rettere... du kan prøve at lege lidt med det.... Ved ikke lige umildbart præcis hvilke og hvor meget du får listet ud... Men kunne evt. gøres vha. nogle af de andre funktioner også
Avatar billede pelskee Nybegynder
30. januar 2004 - 17:15 #37
http://border-wines.dk.virker.nu/final.asp - jeg ville bruge den til at tælle sammen hvor meget en bruger har købt for. den tager det første men hvis du klikker ind under en 'Læs mere' og ligger 6 stk i kurven så tæller den ikke sammen... strange
Avatar billede stingbat Nybegynder
30. januar 2004 - 17:16 #38
Under indkøbskurv ser det rigtigt nok ud, med de enkelte linier - er blot den subtotalen der fejler...
Avatar billede pelskee Nybegynder
30. januar 2004 - 17:17 #39
http://border-wines.dk.virker.nu/test.asp kan man se hvad der er i kurven
Avatar billede stingbat Nybegynder
30. januar 2004 - 17:17 #40
Hov... ved ikke om du har bemærket det - hvis du ændre tallet, og trykker opdater, bliver tallet ændret tilbage?!
Ved ikke om du var nået så langt - men ville lige nævne det, i tilfælde af at du ikke havde bemærket det.
Avatar billede pelskee Nybegynder
30. januar 2004 - 17:17 #41
ja - jeg kan ikke få den til at gange det hele ud
Avatar billede pelskee Nybegynder
30. januar 2004 - 17:19 #42
hehe i know - stingbat - endnu en ting jeg er gået i stå ved. kan ikke lave en multiple update af records
Avatar billede eagleeye Praktikant
30. januar 2004 - 17:20 #43
Hvis du vil havde en enkelt total pris for alle vare, så skal du ikke havde GROUP BY på for den gruppere recordsne efter prisen. Så prøv:

rsTotal.Source = "SELECT sum(pris*antal) as totalpris FROM Indkoebskurv  WHERE SessionID = " + Replace(rsTotal__MMColParam, "'", "''")
Avatar billede stingbat Nybegynder
30. januar 2004 - 17:23 #44
Kan ikke huske om den vil acceptere i Access, når du prøver at sende flere UPDATE's af gangen... men ellers må du blot nøjes med én af gangen... desværre.
Avatar billede eagleeye Praktikant
30. januar 2004 - 17:24 #45
Kommentar: pelskee
30/01-2004 16:19:32 MySQL
Avatar billede pelskee Nybegynder
30. januar 2004 - 17:26 #46
u da man eagle!!! :)
Avatar billede stingbat Nybegynder
30. januar 2004 - 17:27 #47
ups... mente ASP ;)
Bare under PHP, kan du nemlig IKKE få den til at eksekvere flere SQL-strenge af gangen... ret skod :(
Avatar billede pelskee Nybegynder
30. januar 2004 - 17:51 #48
ahhhhh - tak fordi jeg lagde mig ud med ASP :)

tak for hjælpen og ha en super weekend!

nu skal jeg ud og spise med tøsen
Avatar billede pelskee Nybegynder
30. januar 2004 - 17:51 #49
nu virker alle totalerne :) - fedt
Avatar billede eagleeye Praktikant
30. januar 2004 - 17:55 #50
det lyder godt du må også havde en god weekend
Avatar billede stingbat Nybegynder
30. januar 2004 - 18:04 #51
Nice nok... Go appetit - og ha' en hyggelig aften :)
Avatar billede pelskee Nybegynder
30. januar 2004 - 18:05 #52
thankz guyz - im out... ;)
Avatar billede stingbat Nybegynder
30. januar 2004 - 18:07 #53
Hov... hvad blev egentlig det endelige resultat af "total" delen?
rsTotal.Source = "SELECT sum(pris*antal) as totalpris FROM Indkoebskurv  WHERE SessionID = " + Replace(rsTotal__MMColParam, "'", "''")
bør være:
rsTotal.Source = "SELECT sum(pris*antal) as totalpris FROM Indkoebskurv  WHERE SessionID = " & Replace(rsTotal__MMColParam, "'", "''")

hvis det skal gå rigtigt til (når det er i ASP)... :) Blot lige en sidebemærkning ;)
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