Avatar billede krogstrup Nybegynder
25. januar 2001 - 14:02 Der er 37 kommentarer og
1 løsning

Hjælp til opbygning af array

Jeg har brug for hjælp til at udføre følgende:

Jeg åbner et recordset sorteret efter en AutoID, hvor alle records hentes.

Herefter laver jeg en løkke som gennemgår samtlige records een for een.

For hver record skal ID + Titel sættes ind i et array parvis.

Når alle mine records er lagt ind i mit array, skal det sorteres efter Titel.

Herefter skal en løkke gå gennem mit array (sorteret efter Titel) og punktvis vise ID + Titel


Giver det nogen mening ?
Avatar billede drean Nybegynder
25. januar 2001 - 14:07 #1
Det giver ingen mening hvorfor du vil smide det i et array.
Avatar billede kasseper Nybegynder
25. januar 2001 - 14:09 #2
og hvorfor først sortere det efter ID, for så at sortere efter Titel....?
Avatar billede kasseper Nybegynder
25. januar 2001 - 14:10 #3
Det kan nu være meget smart at smide det i et array, da man så kan lukke sit ercordset, eller genbruge det...REcordset er jo mere resource krævende end array\'s
Avatar billede drean Nybegynder
25. januar 2001 - 14:13 #4
Ja, på den måde er det sikkert meget smart :)
Avatar billede kasseper Nybegynder
25. januar 2001 - 14:15 #5
Men sorteringen er jeg ikke klar på....?
Avatar billede erikjacobsen Ekspert
25. januar 2001 - 14:16 #6
Lad os lige høre hvorfor

  select id,titel from tabellen order by titel

+ et almindeligt gennemløb af recordsættet med henblik på
udskrift ikke kan bruges ?
Avatar billede nil.dk Nybegynder
25. januar 2001 - 14:17 #7
det kan godt være svært og ressourcekrævende at lave en sortering af et array.. især hvis der er mange data.
Avatar billede kasseper Nybegynder
25. januar 2001 - 14:34 #8
nil.dk der findes et hav af sorterings algoritmer...Så svært bliver det ikke, men resourcekrævende ja, men da et recordset i bund og grund også er et array, så er det vel samme surdej....
Avatar billede nil.dk Nybegynder
25. januar 2001 - 14:36 #9
tjaaa. hvis du laver sorteringen med SQL så tror jeg det er noget mindre ressourcekrævende end at bruge BubbleSort eller lign. på arrayet.
Avatar billede kasseper Nybegynder
25. januar 2001 - 14:42 #10
Of course.....Men det er også sortering på database niveau. Så vi er da enige om at det bedre kan betale sig at bede databasen sortere inden at den smider det i et recordset...;)
Avatar billede krogstrup Nybegynder
25. januar 2001 - 14:44 #11
ok, jeg prøver på at forklare mit problem:

Min tabel indeholder en masse sange, som er sat ind i en mappe sorteret efter deres ID. Mit problem opstår når jeg skal genere indholdsfortegnelser til min mappe. At lave en indholdsfortegnelse, der er sorteret efter ID (altså placering i mappe) er selvfølgelig ikke noget problem, MEN at lave en indholdsfortegnelse sorteret alfabetisk er svær, fordi at min database ikke ved hvad nr. sangen har i mappen. Der kan nemlig godt være huller i mine ID´er. Dvs. at feltet ID (som er autonumber) starter med 1,2,3 og så springer den måske til 6 fordi jeg har slettet nogle sange. Derfor kan jeg ikke antage at ID feltet er = sangens placering i mappen.

Derfor er jeg nødt til at starte med at sortere recordsettet efter ID - Dette giver mig sangenes placering i mappen. Herefter kan jeg een for een putte sangens titel + et tal (der angiver placering i mappen) ind i et array.

Sagt med andre ord: Min database fortæller mig ikke hvad sangenes placering er, derfor er jeg nødt til at beregne den selv.

Er det volapyk ?
Avatar billede nil.dk Nybegynder
25. januar 2001 - 14:44 #12
Ja, netop :o)

Med mindre krogstrup har en eller anden mystisk grund til andet???
Avatar billede nil.dk Nybegynder
25. januar 2001 - 14:45 #13
det var et svar til kasseper :o)
Avatar billede erikjacobsen Ekspert
25. januar 2001 - 14:48 #14
Ja, om det er volapyk ved jeg ikke, men jeg kan stadig ikke forstå det. Kan du
komme med et eksempel?
Avatar billede kasseper Nybegynder
25. januar 2001 - 14:51 #15
Du siger at ID\'et fra databasen (det autonumerede id) angiver sangens placering i mappe.
Men hvis du laver \'select id,titel from tabellen order by titel\'
Vil du jo stadig have id\'et der er tilhørende til sangen ????

så en udskrivning af recordsette, vil da liste sangene alfabetisk, samt deres placering i mappen, eller hur ????

Avatar billede kasseper Nybegynder
25. januar 2001 - 14:53 #16
Hmmm. tjeck denne sætning ud :
\'Derfor kan jeg ikke antage at ID feltet er = sangens placering i mappen\'

og læs så denne :
\'Derfor er jeg nødt til at starte med at sortere recordsettet efter ID - Dette giver mig sangenes placering i mappen. \'

Jeg er snart stået helt af...?
Avatar billede krogstrup Nybegynder
25. januar 2001 - 15:00 #17
Ok - det her er virkelig svært at forklare !

Her er et eks. på tabellen:

AutoID  Titel
****************
1  I love you, yeah yeah yeah
2  She still loves me, yeah
4  I dont hate you anymore
5  Isnt she lovely

Der er et hul i autoID mellem 2 og 4 FORDI jeg har slettet sang nr. 3 på et tidspunkt.

Men når jeg printer mine sange ud og sætter dem ind i min mappe, vil sang nr. 4 blive listet som sang nr. 3 !!!!!

DET ER MIT PROBLEM - ARRRRGGHH


Jeg ønsker altså at gøre følgende:

start recordset løkke
  dim placering
  placering = 0
  indsæt i array: titel & placering + 1
fortsæt løkke

Hmmmm, giver det mening ?
Avatar billede erikjacobsen Ekspert
25. januar 2001 - 15:08 #18
Det behøver du da ikke putte dem ind i et array for :-)
Avatar billede erikjacobsen Ekspert
25. januar 2001 - 15:09 #19
rs.open .....

placering=0
while not rs.eof do
  placering=placering+1;
  response.write placering & \"  \" & rs(\"titel\")
  rs.movenext
endw

(eller hvad det nu hedder i ASP)
Avatar billede kasseper Nybegynder
25. januar 2001 - 15:16 #20
Ahaaaa, jamen erik så kommer det jo ikke ud i alfabetisk rækkefølge...
Jeg tror jeg forstår.
Brygger lige lidt på den...
Avatar billede krogstrup Nybegynder
25. januar 2001 - 15:17 #21
YUHUUUUUUUUUUUUUUUUUU

ENDELIG :-)
Avatar billede krogstrup Nybegynder
25. januar 2001 - 15:17 #22
kasseper >>>

Det er LIGE PRÆCIS mit problem !
Avatar billede erikjacobsen Ekspert
25. januar 2001 - 15:18 #23
Så de skal altså være sorteret efter titel og samtidig have et fortløbende
nummer efter deres placering i tabellen. Ja, ja, den er svære at greje sådan
en torsdag eftermiddag :-))
Avatar billede krogstrup Nybegynder
25. januar 2001 - 15:19 #24
Det er det jeg mener, det er skide svært at forklare !!!
Avatar billede kasseper Nybegynder
25. januar 2001 - 15:25 #25
Yeps.....
Jeg kan nok lave en der skriver dem ud som du vil ha\' og nok ikke den mest effektive er det OK ?????
Avatar billede krogstrup Nybegynder
25. januar 2001 - 15:33 #26
Du behøves egentlig ikke at lave sorterings-rutinen. Jeg har hentet en herfra:
http://watson-net.com/free/asp/s_qsort.asp#Download

Vil den ikke være ok ?
Avatar billede krogstrup Nybegynder
25. januar 2001 - 15:33 #27
Det jeg ikke har forstand på er:

oprettelse af et array
hvordan man putter \"ting\" ind i et array

??
Avatar billede kasseper Nybegynder
25. januar 2001 - 15:37 #28
Du opretter et array sådan her :

Dim MyArray(100)

og putter ting i sådan her :


dim counter
counter = 0
while counter < 100
MyArray(counter) = \"dette er nummer \" & counter
counter + 1
wend

OK ?
Avatar billede kasseper Nybegynder
25. januar 2001 - 15:38 #29
Så kan du evt. bruger :

SQL1 = \"select title from tabellen\"
SQL2 = \"select count(title) as antal from tabellen\"
set rs1 = myConn.execute(SQL1)
set rs2 = myConn.execute(SQL2)
Dim MyArray(cint(rs2(\"antal\")))
Avatar billede kasseper Nybegynder
25. januar 2001 - 15:39 #30
Så har du oprettet dit array så det passer i størelsen til din mappe....
Avatar billede kasseper Nybegynder
25. januar 2001 - 15:45 #31
Ja nu skal jeg jo ikke fylde dig med løgn :

************<%
SQL1 = \"select title from tabellen\"
SQL2 = \"select count(title) as antal from tabellen\"
set rs1 = myConn.execute(SQL1)
set rs2 = myConn.execute(SQL2)
Dim MyArray(cint(rs2(\"antal\")),0)
dim counter
counter = 0
While NOT rs2.EOF
myArray(counter,0) = rs2(\"title\")
myArray(counter,1) = counter + 1
counter = counter + 1
rs2.movenext
wend

%>

*********
så har du et fler dim. array..
i myArray(0,0) står så titlen og
i myArray(0,1) står så nummeret i dette tilfælde nummer 1.
og så fremdeles.
Avatar billede kasseper Nybegynder
25. januar 2001 - 15:46 #32
aaaarrrgh ja det er jo sidst på dagen :Prøver igen :
************<%
SQL1 = \"select title from tabellen\"
SQL2 = \"select count(title) as antal from tabellen\"
set rs1 = myConn.execute(SQL1)
set rs2 = myConn.execute(SQL2)
Dim MyArray(cint(rs2(\"antal\")),1)
dim counter
counter = 0
While NOT rs2.EOF
myArray(counter,0) = rs2(\"title\")
myArray(counter,1) = counter + 1
counter = counter + 1
rs2.movenext
wend

%>



Avatar billede krogstrup Nybegynder
25. januar 2001 - 16:01 #33
kasseper >>>

Kan jeg få dig til at skimte nedenstående funktion igennem:

http://watson-net.com/free/asp/s_qsort.asp#Download

Vil den kunne bruges ?
Avatar billede slash Nybegynder
26. januar 2001 - 11:49 #34
Bare et lille forslag til en alternativ måde at smide data op i sit array på:

set conn = server.createobject(\"ADODB.Connection\")
conn.open \"DSN\", \"uid\", \"pwd\"
sql = \"select id, titel from musiktabel order by id desc\"

SET RES = Conn.Execute(sql)
n = RES.EOF
If n >= 0 Then
    a = RES.GetRows()
    RES.Close
    for row = 0 to ubound(a,2)
    id = a(0,row)
    titel = a(1,row)
    Response.write row &\" \"&titel
    next
else
    Response.write \"Tomski\"
End If
conn.close
set conn = nothing
Avatar billede krogstrup Nybegynder
26. januar 2001 - 14:31 #35
Hvorfor virker følgende IKKE:

antal = 24
Dim MyArray(antal,1)


Error Type:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0402)
En heltalskonstant var ventet
/pages/indeks/Default.asp, line 24, column 12
Dim MyArray(antal,1)
-----------^
Avatar billede krogstrup Nybegynder
26. januar 2001 - 14:51 #36
Endelig - Nu virker det:
Avatar billede krogstrup Nybegynder
26. januar 2001 - 14:51 #37
<!--#include virtual=\"/includes/asp/createRecordset.inc\"-->
<% strSQL = \"SELECT * FROM sange WHERE sangType = 2 ORDER BY ID ASC\" %>
<!--#include virtual=\"/includes/asp/openReadOnly.inc\"-->

<% antal = rs.RecordCount
antal = antal - 1
Dim MyArray()
redim MyArray(antal,1)
counter = 0 %>

<% while not rs.EOF
    myArray(counter,0) = rs(\"titel\")
    myArray(counter,1) = counter + 1
    counter = counter + 1
    rs.movenext
wend %>

<!--#include virtual=\"/includes/asp/closeRecordset.inc\"-->

<% Call QSort2(MyArray, 0, 0, ubound(MyArray)) %>

<% for i = 0 to antal %>

<li><%=myArray(i,1)%>&nbsp; <%=myArray(i,0)%>

<% next %>
Avatar billede krogstrup Nybegynder
26. januar 2001 - 14:52 #38
Jeg takker for hjælpen

Hvis ovenstående kode kan optimeres yderligere modtager jeg meget gerne kritik :-)
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