Custom Report

Status
Niet open voor verdere reacties.

inomart

Gebruiker
Lid geworden
12 sep 2011
Berichten
12
Hoi

Ik dien een XLS-bestand aan te maken gebaseerd op gegevens die in een Access-database staan. Ik vertrek vanaf een formulier in die Access-database.

De export is eigenlijk een gecustomizeerd rapport waarbij rapporttitels worden gebruikt voor elke nieuwe groep. Daarnaast dienen er nog automatisch formules in te komen, fontaanpassingen voor de verschillende titels, ... Dit wil zeggen dat ik niet zomaar een eenvoudige Export of copy/paste kan doen, maar dat ik het rapport dien aan te maken met code.

Met de code die ik nu heb, krijg ik het rapport. Probleem is dat ik steeds op het einde een "No current record" krijg. Deze melding is ook normaal omdat mijn recordset EOF-vale TRUE is en ik daarmee een waarde aan een variabele wil koppelen. Er zit dus volgens mij gewoonweg een logische fout in mijn code.

Hieronder staat een eenvoudiger voorbeeld van wat ik momenteel heb.

Code:
Private Sub Command0_Click()
Dim OrigPostalCode As Integer
Dim OrigFullName As String
Dim OrigStreet As String
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("select * from tblAdres order by postalcode, street, fullname")
Debug.Print "Overview of adres"
rs.MoveFirst
OrigPostalCode = rs!postalcode
Do While Not rs.EOF And rs!postalcode = OrigPostalCode
    Debug.Print vbTab & "The postal code is " & rs!postalcode
    OrigStreet = rs!street
    Do While Not rs.EOF And rs!postalcode = OrigPostalCode And rs!street = OrigStreet
        Debug.Print vbTab & vbTab & "A street found for this postal code is: " & rs!street
        OrigFullName = rs!FullName
 
        Do While Not rs.EOF And rs!postalcode = OrigPostalCode And rs!street = OrigStreet And rs!FullName = OrigFullName
            Debug.Print vbTab & vbTab & vbTab & "A person living in this street is: " & rs!FullName
            rs.MoveNext
            OrigFullName = rs!FullName
        Loop
        OrigStreet = rs!street
    Loop
    OrigPostalCode = rs!postalcode
Loop
End Sub

Dit resulteert in onderstaand rapport
Code:
Overview of adres
    The postal code is 1000
        A street found for this postal code is: Shrekstreet
            A person living in this street is: Mike Meyers
        A street found for this postal code is: Suite 750
            A person living in this street is: Lynda Blair
    The postal code is 2000
        A street found for this postal code is: Boulevard
            A person living in this street is: Joe Smith
            A person living in this street is: John X
        A street found for this postal code is: Saint Victor
            A person living in this street is: Julie Andrews
En dan komt dus steeds een fout omdat de recordset op EOF staat. Ik zoek dus een meer correctere programmatie waardoor die error niet komt.
 
Laatst bewerkt:
Ik heb nog eens goed gelezen wat je aan het doen bent, en ik denk dat het een stuk eenvoudiger kan

Een meervoudige Loop stuctuur is meestal niet de beste / duidelijkste methode om iets aan te pakken.
wat je wel slim doet is de waarden die je wilt controleren met andere records wegschrijven in een variabele.
Je moet het alleen net iets anders aanpakken, dan word het ook stukken makkelijker, denk ik.

Kijk maar eens naar onderstaande code
hopelijk geef ik je wat nieuwe denkrichtingen!

Succes,
Mark.

Code:
Option Explicit

Private Sub Command0_Click()
Dim reportmessage As String
Dim street As String
Dim postalcode As String
Dim rs As Recordset

    Set rs = CurrentDb.OpenRecordset("select * from tblAdres order by postalcode, street, fullname")
    rs.MoveFirst
    
    Debug.Print "Overview of adres"
    
    Do While Not rs.EOF
        
        reportmessage = vbTab & vbTab & vbTab & _
                        "A person living in this street is: " & rs!street
        
        If street <> rs!street Then
        
            street = rs!street
            reportmessage = reportmessage & vbCrLf & vbTab & vbTab & _
                            "A street found for this postalcode is: " & street
            
        
        End If

        If postalcode <> rs!postalcode Then
         
            postalcode = rs!street
            reportmessage = reportmessage & vbCrLf & vbTab & _
                            "The postal code is " & postalcode
        
        End If
        
        Debug.Print reportmessage
        rs.movenext
        
    Loop
    
    'opruimen
    Set rs = Nothing
        
End Sub
 
Laatst bewerkt:
Mark

Bedankt, mits wat aanpassingen heb ik nu inderdaad een code gevonden die werkt en mij hetzelfde rapport genereert dan ik met mijn code had (maar dus nu zonder foutmeldingen).

Code:
Private Sub Knop1_Click()


Dim reportmessage As String
Dim street As String
Dim postalcode As String
Dim rs As Recordset

    Set rs = CurrentDb.OpenRecordset("select * from tblAdres order by postalcode, street, fullname ")
    
    rs.MoveFirst
    
    Debug.Print "Overview of adres"
    postalcode = ""
    street = ""
    FullName = ""
    Do While Not rs.EOF
        If postalcode <> rs!postalcode Then
            postalcode = rs!postalcode
            reportmessage = vbTab & _
                            "The postal code is " & postalcode
            Debug.Print reportmessage
        End If
        
        If street <> rs!street Then
        
            street = rs!street
            reportmessage = vbTab & vbTab & _
                            "A street found for this postalcode is: " & street
            Debug.Print reportmessage
        
        End If
        
        If FullName <> rs!FullName Then
            FullName = rs!FullName
        reportmessage = vbTab & vbTab & vbTab & _
                        "A person living in this street is: " & rs!FullName
                        Debug.Print reportmessage
        End If

        rs.MoveNext
        
    Loop
    
    'opruimen
    Set rs = Nothing
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan