11. februar 2003 - 21:22Der er
13 kommentarer og 2 løsninger
dynasik allokering af array
Ok, hmm Dette spørgsmål kan måske virke simpelt, men alligevel (Det må da kunne lade sig gøre!!) AT allokere et array uden man ved hvor stort det er på forhånd.
dim Ar(100) ''' Jamen hvis jeg f.eks vil løbe igennem dn database med x antal record og fylde en værdi fra databasen ind i et array skal jeg så virkelig først counte på antal record for dynamisk at få allokeret det plads der er nødvendigt. Hurtig illustration af hvad jeg forestiller mig.
dim Aj() As integer Dim i As integer do while not rs.eof Aj(i)=rs!id i=i+1 rs.movenext loop
Men her kommer der subscript out of range. Så har jeg forsøgt noget med redim etc... men har ikke fået det til at spille please VB hajer giv mig et praj :-)
Du skal lige huske på, at når du dimensionerer array, er den først række altid 0. Dvs. at hvis du vil lave et array med 100 rækker i skal du i koden skrive:
Redim Aj(99) 'Fra 0 til 99
Du kan tælle, hvor mange records, der er i databasen ved at sende forespørgslen
Vil det sige at jeg ikke dynamisk kan allokere et array, men at man som udgangspunkt skal vide hvor mange elementer et array mindt skal indeholde. Det er ik for at være på tværs men i andre sprog er der ingen problemer med det.
Må jeg spørge hvad forskellen på et array og en collection er. Spå vidst jeg ved kan man også benytte Collection til at iretere gennem objekter på sin form.
havmaage > jeg mener en collection kan klare nærmest uanede mængder .. Når du når op i meeeget høje tal, tror jeg dog at det ikke er så hukommelsesvenligt..
Men hvis du fylder 20000 records i en array på jørn's metode, udfører du også ReDim Preserve 20000 gange, og det er MEGET slemmere for hukommelsen, da ReDim Preserve er en meget ressourcekrævende funktion.
Jeg overvejer hvilket eksemple jeg vil bruge men begge virker fint. Somalioar tak for dit svar, men som du selv er inde på var de andre besvarelser mere fyldestgørende i forhold til hvad mit spørgsmål gik ud på, måske vi lærte noget begge :-) håber vi er cool selvom du ikke for point i denne omgang.
Du kan evt. anvende jørns metode men køre en redim preserve før do/loop løkken starter. Brug fx rs.count eller kør do/loop igennem for at finde antal records.
Et array yder bedre perfomance til tal en collections - men mikbj har ret i, at helst ikke skal ligge indenfor løkken.
Brobaek's forslag er udmærket. Jeg har et array på omkring 1500 poster på Win98, 1 Ghz og 512 MB ram. Det tager ingen tid, men det fylder så sikkert unødigt op. Det vil jeg prøve at ændre så ReDim Preserve kommer uden for løkken.
M.v.h. Jørn
Synes godt om
Ny brugerNybegynder
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.