Avatar billede jensen363 Forsker
13. januar 2005 - 09:08 Der er 5 kommentarer og
1 løsning

Loop Top10

Nedenstående programkode generer en TOP10 over det akkumulerede salg, hhv. budget pr. måned for delproduktet "PP" …. dette forløber problemfrit, men der er p.t. 17 delprodukter ( slutbruger definerer selv antal/navngivning af disse ), som skal genereres.

Det må kunne styres vha. For … next eller Loop, men hvordan ?
     
    strSQL = "INSERT INTO tblTOP10_Grundlag_Produktniveau "
    strSQL = strSQL & "( [Firma id], "
    strSQL = strSQL & "[Måned], "
    strSQL = strSQL & "Delprodukt, "
    strSQL = strSQL & "[AKK Salg kr], "
    strSQL = strSQL & "[AKK Budget kr], "
    strSQL = strSQL & "KundeType ) "
    strSQL = strSQL & "SELECT TOP 10 Indeværende_år.[Firma id], "
    strSQL = strSQL & "(" & Me![AARMD] & ") AS [Måned], "
    strSQL = strSQL & "Indeværende_år.Områdenr, "
    strSQL = strSQL & "tblDelprodukter.Delprodukt_tekst, "
    strSQL = strSQL & "Sum(Indeværende_år.[Salg kr]) AS [Akk Salg kr], "
    strSQL = strSQL & "Sum(Indeværende_år.[Budget kr]) AS [Akk Budget kr], "
    strSQL = strSQL & """A"" AS KundeType "
    strSQL = strSQL & "FROM Indeværende_år "
    strSQL = strSQL & "INNER JOIN (tblDelprodukter "
    strSQL = strSQL & "INNER JOIN tblProdukter "
    strSQL = strSQL & "ON (tblDelprodukter.Delprodukt = tblProdukter.Delprodukt) "
    strSQL = strSQL & "AND (tblDelprodukter.Delprodukt = tblProdukter.Delprodukt)) "
    strSQL = strSQL & "ON (Indeværende_år.Delproduktnr = tblProdukter.Delproduktnr) "
    strSQL = strSQL & "AND (Indeværende_år.Produktnr = tblProdukter.Produktnr) "
    strSQL = strSQL & "AND (Indeværende_år.Områdenr = tblProdukter.Områdenr)"
    strSQL = strSQL & "WHERE (((Indeværende_år.Måned) In (" & Me![InMd] & "))) "
    strSQL = strSQL & "And (((Indeværende_år.[Firma branchekode Primær])=1)) "
    strSQL = strSQL & "GROUP BY Indeværende_år.[Firma id], "
    strSQL = strSQL & "Indeværende_år.[Firma Navn], "
    strSQL = strSQL & "Indeværende_år.Områdenr, "
    strSQL = strSQL & "tblDelprodukter.Delprodukt, "
    strSQL = strSQL & "tblDelprodukter.Delprodukt_tekst, "
    strSQL = strSQL & " ""A"" "
    strSQL = strSQL & "HAVING (((tblDelprodukter.Delprodukt) = ""PP"")) "
    strSQL = strSQL & "ORDER BY Sum(Indeværende_år.[Salg kr]) DESC;"

        db.Execute strSQL

Delproduktvalg styres af næstsidste programlinie :

strSQL = strSQL & "HAVING (((tblDelprodukter.Delprodukt) = ""PP"")) "

Delproduktet forefindes i en tabel, som foruden navngivningen indeholder en numerisk værdi, som fortæller noget om, hvor delproduktet skal optræde på rapporter, altså en linienummerering, som kan benyttes som en form for counter.

Can anyone help me ???
Avatar billede sjap Praktikant
13. januar 2005 - 09:51 #1
Bare et lille forslag (en stor del af det første, er det samme som ovenfor):


    strSQL = "INSERT INTO tblTOP10_Grundlag_Produktniveau "
    strSQL = strSQL & "( [Firma id], "
    strSQL = strSQL & "[Måned], "
    strSQL = strSQL & "Delprodukt, "
    strSQL = strSQL & "[AKK Salg kr], "
    strSQL = strSQL & "[AKK Budget kr], "
    strSQL = strSQL & "KundeType ) "
    strSQL = strSQL & "SELECT TOP 10 Indeværende_år.[Firma id], "
    strSQL = strSQL & "(" & Me![AARMD] & ") AS [Måned], "
    strSQL = strSQL & "Indeværende_år.Områdenr, "
    strSQL = strSQL & "tblDelprodukter.Delprodukt_tekst, "
    strSQL = strSQL & "Sum(Indeværende_år.[Salg kr]) AS [Akk Salg kr], "
    strSQL = strSQL & "Sum(Indeværende_år.[Budget kr]) AS [Akk Budget kr], "
    strSQL = strSQL & """A"" AS KundeType "
    strSQL = strSQL & "FROM Indeværende_år "
    strSQL = strSQL & "INNER JOIN (tblDelprodukter "
    strSQL = strSQL & "INNER JOIN tblProdukter "
    strSQL = strSQL & "ON (tblDelprodukter.Delprodukt = tblProdukter.Delprodukt) "
    strSQL = strSQL & "AND (tblDelprodukter.Delprodukt = tblProdukter.Delprodukt)) "
    strSQL = strSQL & "ON (Indeværende_år.Delproduktnr = tblProdukter.Delproduktnr) "
    strSQL = strSQL & "AND (Indeværende_år.Produktnr = tblProdukter.Produktnr) "
    strSQL = strSQL & "AND (Indeværende_år.Områdenr = tblProdukter.Områdenr)"
    strSQL = strSQL & "WHERE (((Indeværende_år.Måned) In (" & Me![InMd] & "))) "
    strSQL = strSQL & "And (((Indeværende_år.[Firma branchekode Primær])=1)) "
    strSQL = strSQL & "GROUP BY Indeværende_år.[Firma id], "
    strSQL = strSQL & "Indeværende_år.[Firma Navn], "
    strSQL = strSQL & "Indeværende_år.Områdenr, "
    strSQL = strSQL & "tblDelprodukter.Delprodukt, "
    strSQL = strSQL & "tblDelprodukter.Delprodukt_tekst, "
    strSQL = strSQL & " ""A"" "
    strSQL2 = "ORDER BY Sum(Indeværende_år.[Salg kr]) DESC;"

    Set db = CurrentDb
    Set rstDelproduktTabel = db.OpenRecordset("DelproduktTabel", dbOpenDynaset)
    Do Until rstParameter1.EOF
        strSQL1 = "HAVING (((tblDelprodukter.Delprodukt) = """ & rstDelproduktTabel!Produktnavn & """)) "
        strSQL3 = strSQL & strSQL1 & strSQL2
        db.Execute strSQL3
        rstDelproduktTabel.MoveNext
    Loop
Avatar billede sjap Praktikant
13. januar 2005 - 09:59 #2
Så er det jo i øvrigt god skik at starte med

Dim db As Database
Dim rstDelproduktTabel As Recordset

og vistnok også at slutte med noget i retning af

rstDelproduktTabel.Close
db.Close
Avatar billede jensen363 Forsker
13. januar 2005 - 10:21 #3
Den fejler ved db.Execute strSQL3

Set rstDelProduktTabel = db.OpenRecordset("tblDelprodukter", dbOpenDynaset)
   
    Do Until rstDelProduktTabel.EOF
        strSQL1 = "HAVING (((tblDelprodukter.Delprodukt) = """ & rstDelProduktTabel!Delprodukt & """)) "
        strSQL3 = strSQL & strSQL1 & strSQL2
        db.Execute strSQL3
        rstDelProduktTabel.MoveNext
    Loop
Avatar billede jensen363 Forsker
13. januar 2005 - 10:57 #4
Ups .... :o) havde overset justeringen i fbm. strSQL2
Avatar billede jensen363 Forsker
13. januar 2005 - 11:00 #5
Kanon ... det virker ... :o)
Læg venligst svar, og få dine velfortjente point
Avatar billede sjap Praktikant
13. januar 2005 - 11:03 #6
Var lige ude og rende, men du klarede så problemerne selv :0)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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