Avatar billede betting Nybegynder
03. marts 2004 - 10:50 Der er 14 kommentarer og
1 løsning

Problem med løkke - udskrivning af tabel

Jeg vil gerne udskrive en tabel med et udseende som i følgende link:

http://www.cybertech.dk/Test/testtabel.jpg

Jeg vil gerne udskrive tabellen med en løkke der ligner følgende:

for i=1 to count
ID.movefirst
Nfi_ra = ID("fornavn")
Nei_ra = ID("efternavn")
Andi_ra = ID("andele")
mdr = ID("mdr")
Jai_ra = ID("indskud")
Jai=Replace(FormatCurrency(Jai_ra,0), "kr", "")
ID.MoveNext
Fei_ra= ID("indskud")
Fei=Replace(FormatCurrency(Fei_ra,0), "kr", "")
ID.MoveNext
Mri_ra= ID("indskud")
Mri=Replace(FormatCurrency(Mri_ra,0), "kr", "")
ID.MoveNext
Api_ra= ID("indskud")
Api=Replace(FormatCurrency(Api_ra,0), "kr", "")
ID.MoveNext
Mai_ra= ID("indskud")
Mai=Replace(FormatCurrency(Mai_ra,0), "kr", "")
ID.MoveNext
Jni_ra= ID("indskud")
Jni=Replace(FormatCurrency(Jni_ra,0), "kr", "")
ID.MoveNext
Jli_ra= ID("indskud")
Jli=Replace(FormatCurrency(Jli_ra,0), "kr", "")
ID.MoveNext
Agi_ra= ID("indskud")
Agi=Replace(FormatCurrency(Agi_ra,0), "kr", "")
ID.MoveNext
Sei_ra= ID("indskud")
Sei=Replace(FormatCurrency(Sei_ra,0), "kr", "")
ID.MoveNext
Oki_ra= ID("indskud")
Oki=Replace(FormatCurrency(Oki_ra,0), "kr", "")
ID.MoveNext
Noi_ra= ID("indskud")
Noi=Replace(FormatCurrency(Noi_ra,0), "kr", "")
ID.MoveNext
Dei_ra= ID("indskud")
Dei=Replace(FormatCurrency(Dei_ra,0), "kr", "")
Totali_ra=Jai_ra+Fei_ra+Mri_ra+Api_ra+Mai_ra+Jni_ra+Jli_ra+Agi_ra+Sei_ra+Oki_ra+Noi_ra+Dei_ra
Totali=Replace(FormatCurrency(Totali_ra,0), "kr", "")
aarstot_rai=RST("total")
aartot_kundei = aarstot_rai/12
aarstot_kundei=Replace(FormatCurrency(aartot_kundei,0), "kr", "")
tillaeg_rai= aartot_kundei-totali_ra
tillaegi=Replace(FormatCurrency(tillaeg_rai,2), "kr", "")
ID.MoveNext
next

Jeg må dog konstruere mine variable -sammen med i - forkert fordi jeg kan ikke få udskrevet noget i min tabel.

<tr>
<td bgcolor="#D4D4DB"><img src="Img/RetWhite.gif" width="15" height="13" alt="" border="0"></td>
<td bgcolor="#ffffff" nowrap> <%= Nf1_ra%>&nbsp;<%= Ne1_ra%></td>
<td bgcolor="#ffffff" align="right"><%= And1_ra%></td>
<td bgcolor="#ffffff" align="right"><%=Ja1%></td>
<td bgcolor="#ffffff" align="right"><%=Fe1%></td>
<td bgcolor="#ffffff" align="right"><%=Mr1%></td>
<td bgcolor="#ffffff" align="right"><%=Ap1%></td>
<td bgcolor="#ffffff" align="right"><%=Ma1%></td>
<td bgcolor="#ffffff" align="right"><%=Jn1%></td>
<td bgcolor="#ffffff" align="right"><%=Jl1%></td>
<td bgcolor="#ffffff" align="right"><%=Ag1%></td>
<td bgcolor="#ffffff" align="right"><%=Se1%></td>
<td bgcolor="#ffffff" align="right"><%=Ok1%></td>
<td bgcolor="#ffffff" align="right"><%=No1%></td>
<td bgcolor="#ffffff" align="right"><%=De1%></td>
<td bgcolor="#ffffff" align="right"><%=Total1%></td>
<td bgcolor="#ffffff" align="right"><%=aarstot_kunde1%></td>
<td bgcolor="#ffffff" align="right"><%=tillaeg1%></td>
</tr>

Kan du se hvad der er galt???
Avatar billede nute Nybegynder
03. marts 2004 - 11:19 #1
eh ?!?! hvorfor lader du ikke din løkke tage hånd om itereringen ?? Det kan da ikke være nødvendig at manuelt skulle bruge 'ID.MoveNext' ???

har du 12 kolonner i din database der hedder 'indskud' ? dine beregninger er jo hellere ikke nødt til at gøres i ASP, de kan du jo lave direkte i dit SQL kald.

men... hvordan ser din datamodel ud ? hvilke tabeller er indvolveret og hvilke kolonner vil du hive ud ?

/nute
Avatar billede betting Nybegynder
03. marts 2004 - 11:39 #2
Hej Nute

Alle gode forslag modtages gerne. Nej jeg har ikke 12 kolonner med indskud - de ligger i hver sin række - men det mener du måske også er forkert??

Den tabel hvor indskudsoplysningerne ligger i hedder t_investorindskud og ser ud som følgende (Acces):

Felt navn          Datatype
indskudsnr    Autonummeriring
ks        Tal
aar        Tal
mdr        Tal
knr        Tal
indskud        Tal
frist        Dato og klokkes
gebyr        Tal
tekstA        Tekst
andet        Tal
tekstB        Tekst
total        Tal
betalt        Tal
PBSdato        Dato og klokkes
PBStype        Tekst
oprettet    Tekst
opdat_dato    Tekst   
opdat_navn    Tekst

Min Sql'er ser ud som følgende:

indskudSQL = "SELECT t_kunder.knr, t_kunder.fornavn, t_kunder.efternavn, t_investeringer.andele, t_investorindskud.aar, t_investorindskud.mdr, t_investorindskud.indskud, t_investeringer.ks, t_investeringer.investor_type FROM (t_kunder INNER JOIN t_investeringer ON t_kunder.knr=t_investeringer.knr) INNER JOIN t_investorindskud ON t_kunder.knr=t_investorindskud.knr WHERE (((t_investorindskud.aar)=2004) AND ((t_investeringer.ks)=17) AND ((t_investorindskud.ks)=17));"
Set ID = indskudcon.Execute(indskudSQL)

aarstotSQL = "SELECT t_aarstot.totaar, t_aarstot.ks, t_aarstot.aar, t_aarstot.total, t_aarstot.tot_tekst FROM t_aarstot WHERE (((t_aarstot.ks)=17) AND ((t_aarstot.aar)=2004));"
Set RST = indskudcon.Execute(aarstotSQL)

håber det er hvad du skal bruge
Avatar billede nute Nybegynder
03. marts 2004 - 11:53 #3
det er helt fint at de ligger i en række på den måde du har gjort, men jeg tror nok jeg ville have kodet det lidt anderledes. Jeg ville have gjort følgende (pseudo-kode):

' Udskriv tabel headere
Response.Write( "<table><tr><td>ret</td><td>navn</td>...<td>Tillæg</td></tr>
SQL = "SELECT * FROM t_kunder INNER JOIN t_investeringer ON blabla"
Set RS = Conn.Execute( SQL )
while not RS.EOF
    ' Udskriv række med personoplysninger først
    Response.write( "<tr><td><img src="Img/RetWhite.gif" width="15" height="13" alt="" border="0"></td>" )
    Response.Write( "<td>" & RS("Navn") & "</td><td>" & RS("andele") & "</td>" )
   
    ' Hænt investor oplysninger
    investorSQL = "SELECT * FROM t_investorindskud WHERE knr = " & RS("knr") & " ORDER BY aar, mdr"
    Set RSInvestor = Conn.Execute( investorSQL  )
    While not RSInvestor.EOF
        Reponse.Write( "<td>" & RSInvestor("indskud") & "</td>")
        RSInvestor.MoveNext
    wend
    RSInvestor.Close
    Response.Write( "</tr>" )
    RS.MoveNext
wend
RS.Close

ser du min pointe ? det er meget nemmere, og meget pænere :o]

/nute
Avatar billede betting Nybegynder
03. marts 2004 - 12:53 #4
Hej Nute

Hvor blev mine beregninger af? Hvordan vil du lægge dem ind i din løkke??
Avatar billede nute Nybegynder
03. marts 2004 - 13:04 #5
ahh ... undskyld ... fx:

Set RSInvestor = Conn.Execute( investorSQL  )
Totali_ra = 0
While not RSInvestor.EOF
    strIndSkud = Trim( Replace( RSInvestor("indskud"), "kr", "" ) )
    Reponse.Write( "<td>" & strIndskud & "</td>")
    Totali_ra = Totali_ra + CInt( strIndskud )
    RSInvestor.MoveNext
wend
Response.Write( "<td>" & Totali_ra & "</td>" )

Det ser ud til at 'total' er ens for alle udtræk, så din 'aarstotSQL' kan køres helt i starten, hvor du lægger værdierne ind i variabler. du bør også lave beregningerne udenfor dine loops, da det for mig ikke kan se ud som om dette er noget der har behov for at blive beregnet for hver kunde.

jeg ser helelre ikke hvor 'tillaeg1' kommer fra, men dette ser også ud til at være et "kunde relateret" felt, som du hiver ud for hver kunde ?!

det er hellere ikke en fuld løsning jeg har givet - mere et løsningsforslag. Jeg ville i udgangspunktet bare høre om du kunne følge mig i måden at gøre det på.

/nute
Avatar billede betting Nybegynder
04. marts 2004 - 13:55 #6
Hej Nute

Efter nogle tilretninger så har jeg fået din kode til at virke - og jo den er virkelig smart.

Der er kun en ting jeg mangler og det er at tælle kolonnerne sammen pr. månede. Du talte noget om at man kan foretage beregninger direkte i SQL'en - måske var det en mulighed her??
Avatar billede betting Nybegynder
04. marts 2004 - 13:56 #7
Hej Nute

Jeg sender lige den kode som kom til at virke:

                        <% If RS.EOF Then%>
                            <tr>
                                <td bgcolor="#D4D4DB"><img src="Img/Spacer.gif" width="15" height="13" alt="" border="0"></td>
                                <td bgcolor="#ffffff" colspan="17" align="center" nowrap><br><b class="red">Der er ikke dannet invester indskud endnu.</b><br><span class=""><a href="PBS/OpretAar.asp" onClick="NewWindow(this.href,'OpretAar','400','300','no','center');return false" onFocus="this.blur()"><b>Dan år</b> klik her</a></span><br><br></td>
                            </tr>
                        <%else
                        kunde1=0
                        kunde2=0

                    while not RS.EOF
                    If not kunde1=kunde2 then
                    kunde1= RS("knr")
    ' Udskriv de første to felter med personoplysninger

    Response.Write "<tr><td bgcolor=""#D4D4DB""><img src=""Img/RetWhite.gif"" width=""15"" height=""13"" border=""0""></td>"
    Response.Write "<td bgcolor=""#ffffff"" nowrap>" & RS("fornavn")& "&nbsp;" & RS("efternavn") & "</td>"
    Response.Write "<td bgcolor=""#ffffff"" align=""right"">" & RS("andele") & "&nbsp;% </td>"


    'Hent investorindskud pr. månede
      investorSQL = "SELECT t_investorindskud.* FROM t_investorindskud WHERE (((t_investorindskud.ks)=17) AND ((t_investorindskud.aar)=2004) AND ((t_investorindskud.knr)="&RS("knr")&"))ORDER BY t_investorindskud.mdr;"
    Set RSInvestor = indskudcon.Execute(investorSQL)   
   
            Totali_ra = 0
       
        While not RSInvestor.EOF
            indskud_regn=RSInvestor("indskud")
            Response.Write "<td bgcolor=""#ffffff"" align=""right"">" & Replace(FormatCurrency(RSInvestor("indskud"),0), "kr", "")& "</td>"
            Totali_ra = Totali_ra + indskud_regn
            RSInvestor.MoveNext
        wend   
        RSInvestor.Close
       
        'Beregninger til de sidste tre kolonner i tabellen
        aarstot_rai=RST("total")
        aartot_kunde = aarstot_rai/12
        tillaeg_ra= aartot_kunde-Totali_ra
                       
        Response.Write "<td bgcolor=""#ffffff"" align=""right"">" & Replace(FormatCurrency(totali_ra,0), "kr", "")& "</td>"
        Response.Write "<td bgcolor=""#ffffff"" align=""right"">" & Replace(FormatCurrency(aartot_kunde,0), "kr", "")& "</td>"
        Response.Write "<td bgcolor=""#ffffff"" align=""right"">" & Replace(FormatCurrency(tillaeg_ra,2), "kr", "")& "</td>"
   
    Response.Write "</tr>"
    end if
    RS.MoveNext
    if not RS.EOF then
    kunde2= RS("knr")
    else
    end if
wend
RS.Close
Avatar billede nute Nybegynder
04. marts 2004 - 14:04 #8
ah ... det kan du gøre ved at bruge en array der indeholder dine månedsbeløb. noget ála dette:

i toppen af din side, opretter du en array sådan:

Dim arrMaanedTotal(12)

derefter, når du looper gennem dine måneder, så gør du bare sådan:

intCounter = 0
While not RSInvestor.EOF
            indskud_regn=RSInvestor("indskud")
            Response.Write "<td bgcolor=""#ffffff"" align=""right"">" & Replace(FormatCurrency(RSInvestor("indskud"),0), "kr", "")& "</td>"
            Totali_ra = Totali_ra + indskud_regn
            RSInvestor.MoveNext
            arrMaanedTotal( i ) = arrMaanedTotal( i ) + CInt( indskud_regn )
            intCounter = intCounter + 1
        wend 


når du så skal skrive ud dine månedstotaler, skal du bare gøre sådan:

for i = 0 To UBound(arrMaanedTotal)
    Response.Write( "<td>" & arrMaanedTotal( i ) & "</td>" )
next

/nute
Avatar billede betting Nybegynder
05. marts 2004 - 13:12 #9
Hej Nute

Nu har jeg indsat koden - men den summer desværre vandret - altså pr. kunde. Den skulle summe lodret - pr. månede.

Hvordan kan det lade sig gøre - måske skulle vi gøre det i SQL'en?
Avatar billede nute Nybegynder
05. marts 2004 - 13:33 #10
ehh ... det bør den ikke gøre. Grunden er følgende:

- For hver kunde, skriver du ut oplysninger
- For hver kunde, sættes 'intCounter' til 0
- For hver kunde skriver du ud alle indskud (1-12)
- For hvert indskud, lægges værdien af 'indskud' ind i arrayet 'arrMaanedTotal' i den gældende måned, ved hjælp af værdien i 'intCounter'.Med andre ord:

det første inskud bliver lagt i dit array ved index 0
det andet indskud bliver lagt i dit array ved index 1

ved næste kunde bliver din tæller nulstillet, og den samme funktionalitet gentager sig:

det første inskud bliver lagt til værdien i dit array ved index 0
det andet indskud bliver lagt til værdien i dit array ved index 1

jeg vil skyde på at du har glemt *enten*

intCounter = 0

eller

intCounter = intCounter + 1

i din loop ??

/nute
Avatar billede nute Nybegynder
05. marts 2004 - 13:41 #11
og som bevis kan du se her (dette viser også princippet jeg har prøvet at vise dig i sin enkleste form :o] ):

<%
Dim myArray(12)
for i = 0 to 4
    intCounter = 0
    for j=0 To 12
        myArray(j) = myArray(j) + j
        intCounter = intCounter + 1
    next
next
Response.Write( "<table border=""1""><tr><td>Regnestykke</td><td>Beregnet</td><td>Faktisk</td></tr>" )
for i = 0 to UBound( myArray )
    Response.Write( "<tr><td>5 * " & i & "</td><td>" & (5*i) & "</td><td>" & myArray( i ) & "</td></tr>" )
next
Response.Write( "</table>" )
%>

/nute
Avatar billede betting Nybegynder
10. marts 2004 - 11:01 #12
Hej Nute

Jeg vil gerne give dig dine 100 poient for den første del af tabellen - den var ret smart.

Jeg har oprettet et nyt spørgsmål omkring det at summe lodret (spm nr = 475461), som jeg stadig ikke kan få til at virke.

Vil du oprette et svar så jeg kan give dig dine poient?
Avatar billede nute Nybegynder
10. marts 2004 - 11:03 #13
har du testet det eksempel jeg har postet ? Det er sådan det skal fungere, er det ikke ?

/nute
Avatar billede betting Nybegynder
10. marts 2004 - 12:51 #14
Hej Nute

Ja jeg har testet det og den kommer ikke ud pr månede
Avatar billede nute Nybegynder
10. marts 2004 - 13:13 #15
hmm ... det var ikke det jeg mente. jeg mente om du har testet princippet i mit indlæg @ 05/03-2004 13:41:54. Jeg nægter at tro på at det ikke fungere. hvis du prøver at køre følgende script, som er en forbedring af det allerede postede script, så kan du se at det fungere:

Dim myArray(12)
Response.Write( "<table border=""1""><tr><td></td>" )
for j=0 To 12
    Response.Write( "<td>Måned " & (j+i) & "</td>" )
next
Response.Write( "</tr>" )
for i = 0 to 4
    Response.Write( "<tr><td>Kunde nummer " & i & "</td>" )
    intCounter = 0
    for j=0 To 12
        Response.Write( "<td>" & j & "</td>" )
        myArray(j) = myArray(j) + j
        intCounter = intCounter + 1
    next
    Response.Write( "</tr>" )
next
Response.Write( "<tr><td>Total</td>" )
for i = 0 to UBound( myArray )
    Response.Write( "<td>" & myArray( i ) & "</td>" )
next
Response.Write( "</tr></table>" )

/nute
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