Avatar billede quarkb Nybegynder
26. marts 2009 - 22:47 Der er 10 kommentarer og
1 løsning

Array med løk

for idy = 1 to 10
ManT = rs.Fields("ManT")
TirsT = rs.Fields("TirsT")
OnsT = rs.Fields("OnsT")

tid = cInt(ManT) + cInt(TirsT) + cInt(OnsT)
next

Ovenstående løber som sagt 10 gange og de 10 x tid vil jeg gerne havde lagt sammen, hvordan??
Avatar billede softspot Forsker
26. marts 2009 - 23:00 #1
arrFld = Array("ManT", "TirT", "OnsT")
tid = 0
for idy = 1 to 10
  for each fld in arrFld
    tid = tid + cint(rs(fld))
  next
next
Avatar billede quarkb Nybegynder
26. marts 2009 - 23:16 #2
hmm. jeg må heller beskrive det lidt bedere.

Nedenstående er udtrak fra database:

idy = 1
for idy = 1 to AntalLinjer

UgeseddelNrLinje = UgeseddelNr & "-" & UgeseddelAntal

sql = "SELECT * FROM [Linje] WHERE UgeseddelNr = '" & UgeseddelNrLinje & "' AND LinjeNr = " & idy
           
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql, conn, 3,3
       
if rs.eof or rs.bof then
       
else

ManT = rs.Fields("ManT")
TirsT = rs.Fields("TirsT")
OnsT = rs.Fields("OnsT")
tid = cInt(ManT) + cInt(TirsT) + cInt(OnsT)
       
end if
rs.close
set rs = nothing

next

response.write tid

AntalLinjer er antal af poster i databasen som opfylder sql krav
for hver gennemløb findes der værdi i ManT, TirsT ovs. disse værdier skal så til slut lægges sammen, og udskrives.
f.eks. 1. gemmenløb giver 4 og 2. gennemløb giver 5
ialt 9
Avatar billede softspot Forsker
26. marts 2009 - 23:25 #3
Det ændrer nu ikke på mit forslag, det skal bare flettes ind i din kode, men rent bort set fra det, så kan du vel klare dig med at skrive

tid = tid + Cint(rs("ManT")) + CInt(rs("TirT")) + CInt(rs("OnsT"))

så du akkumulerer tid på tværs af dine databasekald i stedet for at skulle holde styr på tid for hver enkelt iteration...

Det er vel totalen der er interessant og ikke de mellemliggende resultater... eller hvad?
Avatar billede quarkb Nybegynder
26. marts 2009 - 23:33 #4
Jo, det er kun totalen der er interessant.
Avatar billede softspot Forsker
26. marts 2009 - 23:36 #5
I så fald vil jeg mene det sidste jeg foreslå er det eneste der er nødvendigt. Den første løsning er bare en lidt mere fancy måde at summere på (måske...).
Avatar billede quarkb Nybegynder
26. marts 2009 - 23:39 #6
Du mener altså at det skal se sådan ud?

idy = 1
for idy = 1 to AntalLinjer

UgeseddelNrLinje = UgeseddelNr & "-" & UgeseddelAntal

sql = "SELECT * FROM [Linje] WHERE UgeseddelNr = '" & UgeseddelNrLinje & "' AND LinjeNr = " & idy
           
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql, conn, 3,3
       
if rs.eof or rs.bof then
       
else
   
tid = tid + Cint(rs("ManT")) + CInt(rs("TirT")) + CInt(rs("OnsT"))

end if
rs.close
set rs = nothing

next

response.write tid
Avatar billede quarkb Nybegynder
26. marts 2009 - 23:43 #7
Det ser ud til at virke efter hensigten.
Avatar billede quarkb Nybegynder
26. marts 2009 - 23:50 #8
Mange tak for din hjælp, hvis du laver et svar skal du få de 125 point.

:o)
Avatar billede softspot Forsker
26. marts 2009 - 23:55 #9
Velbekomme :-)

NB: det er altid en god skik at initialisere sine variable inden man bruger dem, så tid bør sættes til 0 (nul) inden løkken over idy...
Avatar billede quarkb Nybegynder
27. marts 2009 - 00:24 #10
OK, takker
Avatar billede softspot Forsker
06. april 2009 - 22:31 #11
Tak for point :)
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