Avatar billede notebookonline Nybegynder
27. marts 2007 - 13:26 Der er 19 kommentarer og
1 løsning

Sortere indhold fra db

Hej Eksperter,
Jeg har 18 felter i min db, kaldet 1hcp, 2hcp, 3hcp osv.

Disse felter indeholder tallet 1-18
Hvordan kan jeg udlæse med til 18 variabler kaldet a1, a2, a3 osv
men a1 skal indeholde tallet 1, a2 skal indeholde tallet 2 osv.

Indholdet af de 18 felter i db er selvfølgelig forskellige fra gang til gang
Avatar billede softspot Forsker
27. marts 2007 - 13:35 #1
Du bør benytte et array til at holde data efter udlæsning. Det er lettere at arbejde videre med et array og det er lavet til den slags opgaver.

dim a(17)

set conn = Server.CreateObject("ADODB.Connection")
conn.open dinConnectionString
sql = "select * from tabel"
set rs = conn.execute(sql)
if not rs.eof then
  for i = 0 to 17
    a(i) = rs(i+1 & "hcp")
  next
end if
rs.close
set rs = nothing
conn.close
set conn = nothing

for i = 0 to 17
  response.write i & " = " & a(i)
next
Avatar billede notebookonline Nybegynder
27. marts 2007 - 13:37 #2
Du ved sgu da mange ting :-)
Avatar billede softspot Forsker
27. marts 2007 - 13:40 #3
Har sgu da også arbejdet med programmering længe efterhånden ;-)
Avatar billede notebookonline Nybegynder
27. marts 2007 - 13:43 #4
Haha, ja og det virker sgu, så er jeg ved at tro jeg kan klare resten selv, eller vender jeg tilbage.

Du skal have mange tak for hjælpen.
Avatar billede notebookonline Nybegynder
27. marts 2007 - 13:47 #5
Der var jeg lige lidt hurtig.
Den henter bare indholdet af felterne, den skulle hente det laveste indhold til a1, det næst laveste til a2 osv.

Altså hvis 3hcp indeholder tallet 1 skal a1 være lig med 1
og hvis 18hcp indeholder tallet 4, skal a18 være lig med 4
Avatar billede softspot Forsker
27. marts 2007 - 14:06 #6
Aha! Så skal data jo sorteres efter de er hentet... hmmm... en lille bubblesort burde kunne løse den opgave.

function bubblesort(arr)
  dim tmp, i, j
  for j = (ubound(arr) - 1)  to 1 step -1
    for i = 0 to j
      if arr(i) > arr(i+1) then
        tmp = arr(i)
        arr(i) = arr(i+1)
        arr(i+1) = tmp
      end if
    next
  next
  bubblesort = arr
end function


dim a(17)

set conn = Server.CreateObject("ADODB.Connection")
conn.open dinConnectionString
sql = "select * from tabel"
set rs = conn.execute(sql)
if not rs.eof then
  for i = 0 to 17
    a(i) = rs(i+1 & "hcp")
  next
end if
rs.close
set rs = nothing
conn.close
set conn = nothing

a = bubblesort(a)

for i = 0 to 17
  response.write i & " = " & a(i)
next
Avatar billede softspot Forsker
27. marts 2007 - 14:07 #7
Bubblesort er ikke verdens hurtigste sorteringsrutine, men til små datamængder er den OK...
Avatar billede softspot Forsker
27. marts 2007 - 14:12 #8
Hvis man lige skal kaste sig selv overbord, så kan man jo udvide bubblesort-funktionen med en parameter, så man kan bestemme om sorteringen skal være stigende eller faldende:

function bubblesort(arr,dir)
  dim tmp, i, j
  for j = (ubound(arr) - 1)  to 1 step -1
    for i = 0 to j
      if (arr(i) * dir) > (arr(i+1) * dir) then
        tmp = arr(i)
        arr(i) = arr(i+1)
        arr(i+1) = tmp
      end if
    next
  next
  bubblesort = arr
end function

' sorter stigende
a = bubblesort(a,1)

' sorter faldende
a = bubblesort(a,-1)

Dette fungerer naturligvis kun hvis a indeholder tal.
Avatar billede notebookonline Nybegynder
27. marts 2007 - 14:42 #9
Så får jeg en type mismatch, i denne linie:
a = bubblesort(a)




function bubblesort(arr)
  dim tmp, i, j
  for j = (ubound(arr) - 1)  to 1 step -1
    for i = 0 to j
      if arr(i) > arr(i+1) then
        tmp = arr(i)
        arr(i) = arr(i+1)
        arr(i+1) = tmp
      end if
    next
  next
  bubblesort = arr
end function


dim a(17)

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("dkgolf.mdb")
Conn.Open DSN
sql="select * from baner where banenavn='"&request("retter1") &"'"
set rs1a=conn.execute(sql)
if not rs1a.eof then
  for i = 0 to 17
    a(i) = rs1a(i+1 & "hcp")
  next
end if

a = bubblesort(a)

for i = 0 to 17
  response.write i & " = " & a(i)
next

point1=a(0)
point2=a(1)
point3=a(2)
point4=a(3)
point5=a(4)
point6=a(5)
point7=a(6)
point8=a(7)
point9=a(8)
point10=a(9)
point11=a(10)
point12=a(11)
point13=a(12)
point14=a(13)
point15=a(14)
point16=a(15)
point17=a(16)
point18=a(17)
Avatar billede softspot Forsker
27. marts 2007 - 14:48 #10
Prøv lige at udskifte denne linie

dim a(17)

med disse to

dim a
redim a(17)
Avatar billede notebookonline Nybegynder
27. marts 2007 - 14:57 #11
Så virker det næsten, men den sorterer ikke rigtigt.

Prøv at se på www.dkgolf.dk
login med 99-1956/99-1956 vælg 'se gamle scorekort'
Klik på den øverste.

Du vil nu se et scorekort, hvis du kikker i kolonnen 'hcp'kan du se tallene 1 til 18
Kikker du ude til højre under point ser du sorteringen.

HCP1 altså hul nummer 14, skal have tallet fra 'a1' som gerne skulle være 1
HCP4 altså hu4 nummer 5, skal have tallet fra 'a4' som gerne skulle være 4
Avatar billede notebookonline Nybegynder
27. marts 2007 - 14:59 #12
Jeg ser også at tallet 12 forekommer 2 gange.
Avatar billede softspot Forsker
27. marts 2007 - 15:30 #13
Hmm... jeg er lidt forvirret over hvilke data der hører til hvor, men umiddelbart synes jeg det må være data i din database der ikke er korrekte (eller det regelsæt du har opstillet her i tråden som ikke er forstået helt). Hvilke data der fyldes i array'et er jeg ikke herre over, men jeg kan hjælpe dig med at få dem sorteret i numerisk rækkefølge (dvs. det troede jeg da :)).

Spørgsmålet er om sorteringsrutinen ikke bliver helt færdig med at sortere siden der hænger et ettal helt dernede ved hul 16, men ellers synes jeg det ser ud til at fungere.

Jeg spekulerede på om du har skrevet point1 i stedet for point16 ud for hul 16...?
Eller om du har overført den forkerte værdi til point16...?

Vis evt. den kode som overfører værdierne eller i det hele taget den kode der ligger til grund for genereringen af scorekortet.
Avatar billede notebookonline Nybegynder
27. marts 2007 - 15:37 #14
Jeg vil gerne give dig koden, men ikke her, du kan sende en mail til mig på salg@notebookonline.dk

Jeg har et par andre ting du måske kan hjælpe mig med mod betaling.
Avatar billede softspot Forsker
27. marts 2007 - 17:21 #15
Det med 1-tallet i pointkolonnen ud for hul 16 skyldes at du har hardcoded det ind i tabellen... :)
Avatar billede softspot Forsker
27. marts 2007 - 19:41 #16
...og de 12 point på hul 12 går igen fordi, der med de givne slag og handicap, sammenholdt med hullets par ikke giver nogle point. Derfor skal den akkumulerede score ikke ændre sig for dette hul.
Avatar billede notebookonline Nybegynder
27. marts 2007 - 22:15 #17
Jeg lukker lige dette spørgsmål da du jo er i fuld gang :-)
Avatar billede softspot Forsker
27. marts 2007 - 22:22 #18
Tak for point :)
Avatar billede notebookonline Nybegynder
27. marts 2007 - 22:30 #19
Jeg går udfra du har fået mine to mails her fra ca. kl. 2215
Avatar billede softspot Forsker
27. marts 2007 - 22:34 #20
jeps!
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