Avatar billede plato Juniormester
25. april 2006 - 11:47 Der er 33 kommentarer og
1 løsning

Order by virker ikke

Hejsa NG.

Hvorfor virker min 'ORDER BY' ikke her:

<%
Constr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../../db/data.mdb")
set cn = server.createobject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
cn.connectionstring=constr
cn.open
  Function fncTextChange(strText)
  strTekst = Trim(strText)
  strTekst = Replace(strTekst,"1","Mandag")
  strTekst = Replace(strTekst,"2","Tirsdag")
  strTekst = Replace(strTekst,"3","Onsdag")
  strTekst = Replace(strTekst,"4","Torsdag")
  strTekst = Replace(strTekst,"5","Fredag")
  strTekst = Replace(strTekst,"6","Lørdag")
  strTekst = Replace(strTekst,"7","Søndag")
  fncTextChange=strTekst
  End Function
Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange(Weekday(Now,VbMonday))&"' AND tvactive order by tvtid", Cn,1,3
inDB = rs.RecordCount
If inDB > 10 then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound <10
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
                    Response.write ("<tr>")
                      Response.write ("<td class='boks_indhold_taeller'>"& rs("Titel") &"</td>" & vbcrlf)
                      Response.write ("<td class='boks_indhold_taeller'>"& rs("tvkanal") &"</td>" & vbcrlf)
                      Response.write ("<td class='boks_indhold_taeller'>"& rs("tvtid") &"</td>" & vbcrlf)
                    Response.write ("</tr>")
  next
end if
RS.Close
Set RS = Nothing
Cn.Close
Set Cn = Nothing
%>
Avatar billede stinejh1980 Nybegynder
25. april 2006 - 11:51 #1
Du har glemt Asc eller Desc

Prøv: order by tvid Asc eller order by tvid Desc
Avatar billede plato Juniormester
25. april 2006 - 11:53 #2
Virker stadig ikke. Bruger forøvrigt også denne:
"SELECT * FROM Trailer Where tvdag = '"&fncTextChange(Weekday(Now,VbMonday))&"' AND tvactive order by tvtid"

normalt et andet sted. Og der virker ORDER fint uden ASC, DESC. Men her vil den bare slet ikke ORDER efter noget som helst.
Avatar billede softspot Forsker
25. april 2006 - 11:54 #3
Skal tvactive ikke være lig med et eller andet eller er det en boolean?
Avatar billede eagleeye Praktikant
25. april 2006 - 11:57 #4
Den virker sikkert også med det koden som er her:

  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound <10
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)


Finde X antal tilfældige poster som udskrives lige efet, og det betyder at den kan tage poster: 500,3,76,44,32,1,55 altså de vil ikke være i rækkefølge.
Avatar billede plato Juniormester
25. april 2006 - 11:57 #5
Jo den skal selvfølgelig være tvactive = True. Står egentlig også i min egen kode. Men order by virker stadig ikke.
Avatar billede eagleeye Praktikant
25. april 2006 - 11:58 #6
Hvis de skal være i rækkefølge skal dette array myArr med index'er sorteres.
Avatar billede plato Juniormester
25. april 2006 - 11:58 #7
eagleeye.

Det du siger er faktisk at grundet fundet af de forskellige poster, så kan man ikke soretere efter et givent felt?
Avatar billede eagleeye Praktikant
25. april 2006 - 12:00 #8
Så skal koden laves om, er tvtid et autonummer?
Avatar billede stinejh1980 Nybegynder
25. april 2006 - 12:00 #9
Hvad sker der hvis du sætter ; efter tvtid??
Avatar billede plato Juniormester
25. april 2006 - 12:02 #10
tv er et klokkeslet for hvornår et film begynder i tv. Dvs. et nummer man selv sætter ind. f.eks 22:30.

Randomkoden ovenfor har jeg fundet herinde. Da jeg ikke gad oprette et spm og søgte i stedet for. Så hvornår jeg får den til at 'order' ved jeg ikke. :)
Avatar billede plato Juniormester
25. april 2006 - 12:03 #11
elvstine 25/04-2006 12:00:40

Desværre ingen virkning.
Avatar billede eagleeye Praktikant
25. april 2006 - 12:07 #12
Du kan prøve at lave alt dette om:



Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange(Weekday(Now,VbMonday))&"' AND tvactive order by tvtid", Cn,1,3
inDB = rs.RecordCount
If inDB > 10 then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound <10
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
                    Response.write ("<tr>")
                      Response.write ("<td class='boks_indhold_taeller'>"& rs("Titel") &"</td>" & vbcrlf)
                      Response.write ("<td class='boks_indhold_taeller'>"& rs("tvkanal") &"</td>" & vbcrlf)
                      Response.write ("<td class='boks_indhold_taeller'>"& rs("tvtid") &"</td>" & vbcrlf)
                    Response.write ("</tr>")
  next
end if





Til dette og så skal tvtid være en autonumer kolonne:


Randomize timer
R=clng(100000*rnd)
Rs.Open "SELECT * FROM (SELECT top 10 * FROM Trailer Where tvdag = '"&fncTextChange(Weekday(Now,VbMonday))&"' AND tvactive = true ORDER BY rnd(-(tvtid)*" & R & ")) as t1 order by t1.tvtid", Cn,1,3
Do while not RS.EOF
  Response.write ("<tr>")
  Response.write ("<td class='boks_indhold_taeller'>"& rs("Titel") &"</td>" & vbcrlf)
  Response.write ("<td class='boks_indhold_taeller'>"& rs("tvkanal") &"</td>" & vbcrlf)
  Response.write ("<td class='boks_indhold_taeller'>"& rs("tvtid") &"</td>" & vbcrlf)
  Response.write ("</tr>")
  RS.Movenext
loop
Avatar billede plato Juniormester
25. april 2006 - 12:11 #13
Eagleeye

Men tvtid kan jo ikke være et autonummer. Da det er forskelligt hvilken tid en given film starter?
Avatar billede plato Juniormester
25. april 2006 - 12:18 #14
Ark...Takker for hjælpen. Dropper koden da fncTextChange ændrer i alt på min side så alle tal bliver til en ugedag. :/
Avatar billede eagleeye Praktikant
25. april 2006 - 12:32 #15
har du så ikke en auto nummer kolonne?
Avatar billede eagleeye Praktikant
25. april 2006 - 12:33 #16
Den skal ind i denne ORDER BY hvor der står tvtid :

ORDER BY rnd(-(tvtid)*" & R & "))


hvis du har en autonummer kolonne som hedder id kan du rette det til:

ORDER BY rnd(-(id)*" & R & "))
Avatar billede eagleeye Praktikant
25. april 2006 - 12:34 #17
Jeg læste tvtid som tvt-id og ikke tv-tid ;)
Avatar billede plato Juniormester
25. april 2006 - 12:58 #18
Eagle.

Ark ja, det betyder jo en hel del. ;) Fik min fncTextChange til at virke. Dog giver din order by fejl:
Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = True ORDER BY rnd(-(tvtid)*" & R & "))", Cn,1,3

fejl:
Microsoft JET Database Engine error '80040e14'

Extra ) in query expression 'rnd(-(id)*))'.

/test2/default.asp, line 122
Avatar billede eagleeye Praktikant
25. april 2006 - 13:32 #19
Har du disse to linie lige før Rs.Open ?

Randomize timer
R=clng(100000*rnd)
Avatar billede eagleeye Praktikant
25. april 2006 - 13:35 #20
Er dette den rigtig SQL sætning ?

Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = True ORDER BY rnd(-(tvtid)*" & R & "))", Cn,1,3


Så vidt jeg kan se skriver den 'rnd(-(id)*)) i fejl koden, men det er tvtid der står i Rs.Open linien?
Avatar billede plato Juniormester
25. april 2006 - 13:35 #21
Jepsen :)
Avatar billede plato Juniormester
25. april 2006 - 13:36 #22
Randomize timer
R=clng(100000*rnd)
Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = True ORDER BY rnd(-(tvtid)*" & R & "))", Cn,1,3

Det er vel ikke sådan den på en eller anden måde læser tvtid forkert?
Avatar billede eagleeye Praktikant
25. april 2006 - 13:39 #23
Fejlen kommer i linie 122 så er denne linie i linie 122?

Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = True ORDER BY rnd(-(tvtid)*" & R & "))", Cn,1,3
Avatar billede plato Juniormester
25. april 2006 - 13:41 #24
Ja det er den linie.
Avatar billede eagleeye Praktikant
25. april 2006 - 13:44 #25
Ok det forstår jeg ikke, den laver ikke sådan om på kolonnenavne. Har du oploaded eller gemt filen? prøv at reloade siden igen.
Avatar billede plato Juniormester
25. april 2006 - 13:51 #26
Nu siger den:
Microsoft JET Database Engine error '80040e14'

Extra ) in query expression 'rnd(-(tvtid)*88263))'.

/test2/default.asp, line 124

Samme linie.

Du får lige hele koden igen:

<%
Constr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../../db/data.mdb")
set cn = server.createobject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
cn.connectionstring=constr
cn.open
  Function fncTextChange2(strText2)
            strTV = Trim(strText2)
              strTV = Replace(strTV,"1","Mandag")
              strTV = Replace(strTV,"2","Tirsdag")
              strTV = Replace(strTV,"3","Onsdag")
              strTV = Replace(strTV,"4","Torsdag")
              strTV = Replace(strTV,"5","Fredag")
              strTV = Replace(strTV,"6","Lørdag")
              strTV = Replace(strTV,"7","Søndag")
              fncTextChange2=strTV
            End Function
Randomize timer
R=clng(100000*rnd)
Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = True ORDER BY rnd(-(tvtid)*" & R & "))", Cn,1,3
inDB = rs.RecordCount
If inDB > 10 then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound <10
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
                    Response.write ("<tr>")
                      Response.write ("<td class='boks_indhold_taeller'><a class='boks' href='tvguide.asp'>"& rs("Titel") &"</a></td>" & vbcrlf)
                      Response.write ("<td class='boks_indhold_taeller'>"& rs("tvkanal") &"</td>" & vbcrlf)
                      Response.write ("<td class='boks_indhold_taeller'>"& rs("tvtid") &"</td>" & vbcrlf)
                    Response.write ("</tr>")
  next
end if
RS.Close
Set RS = Nothing
Cn.Close
Set Cn = Nothing
%>
Avatar billede eagleeye Praktikant
25. april 2006 - 13:54 #27
Ja ok nu kommer den med den rigtige kolonne:

Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = True ORDER BY rnd(-(tvtid)*" & R & "))", Cn,1,3


Prøv at rette den til dette jeg har vist fåret sat en ) for meget ind:

Rs.Open "SELECT * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = True ORDER BY rnd(-(tvtid)*" & R & ")", Cn,1,3
Avatar billede eagleeye Praktikant
25. april 2006 - 14:00 #28
Men den order by ændre ikke på at du ikke får sortere dem, hvis du vil kunne sortere på en kolonne samt den vælger ti tilfældige ud skal du bruge det kode som jeg har vist 25/04-2006 12:07:45. Dog skal SQL sætningen nok tilpasses til dine kolonner.
Avatar billede eagleeye Praktikant
25. april 2006 - 14:32 #29
Det koden jeg har vist med:

Randomize timer
R=clng(100000*rnd)

og ORDER BY rnd(-(tvtid)*" & R & ") bruges til at sortere indholdet tilfældigt.


det kan erstatte det koden du har som finder 10 tilfældige poster, det er i princippet dette kode:

inDB = rs.RecordCount
If inDB > 10 then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound <10
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
    'Udskriver data
  next
end if


Når du både vil havde 10 tilfældige poset og de skal sorteres efter tvtid så skal det laves med en sub-select som finder 10 tilfældige poser som så sorteres:

Rs.Open "SELECT * FROM (SELECT top 10 * FROM Trailer Where tvdag = '"&fncTextChange(Weekday(Now,VbMonday))&"' AND tvactive = true ORDER BY rnd(-(tvtid)*" & R & ")) as t1 order by t1.tvtid", Cn,1,3


Og derfor skal koden laves i stil med det som er vist 25/04-2006 12:07:45
Avatar billede plato Juniormester
26. april 2006 - 08:29 #30
Uanset hvordan jeg gør siger den:
Microsoft JET Database Engine error '80040e07'

Data type mismatch in criteria expression.

/test2/Default.asp, line 124

Denne linie:
Rs.Open "SELECT * FROM (SELECT top 10 * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = true ORDER BY rnd(-(tvtid)*" & R & ")) as t1 order by t1.tvtid", Cn,1,3
Avatar billede stinejh1980 Nybegynder
26. april 2006 - 11:57 #31
det kan være fordi du har et felt i din Db som tekst, men du har kommet til at sætte ' ' rundt om eller modsat
Avatar billede stinejh1980 Nybegynder
26. april 2006 - 11:58 #32
Ups jeg mener.
Hvis kolonnen i din Db er teskt skal du sætte ' ' rundt om.
Hvis den er tal skal det bare stå " & & "
Avatar billede eagleeye Praktikant
26. april 2006 - 12:51 #33
mit bud er fordi tvtid ikke er en tal kolonne, men enten teskt eller dato type så fejler rnd. Du skal i denne hvor der står XX skrive navnet på din autonummer kolonne som er i tabellen Trailer:

Rs.Open "SELECT * FROM (SELECT top 10 * FROM Trailer Where tvdag = '"&fncTextChange2(Weekday(Now,VbMonday))&"' AND tvactive = true ORDER BY rnd(-(XX)*" & R & ")) as t1 order by t1.tvtid", Cn,1,3
Avatar billede plato Juniormester
14. maj 2006 - 14:46 #34
Lukket. Kører videre uden order by.
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