Rapport vullen

Status
Niet open voor verdere reacties.

pkuipers

Gebruiker
Lid geworden
8 jul 2014
Berichten
101
Hallo,

kunnen jullie mij vertellen hoe ik een rapport zelf kan laten vullen, zie code:
Code:
Private Sub Report_Open(Cancel As Integer)

    Dim db As Database
    Dim rs As Recordset
    Dim dateDatum As Date
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("tblEigenaar")
    rs.MoveFirst
    Do While rs.EOF = False
        Me.lblAchternaam.Caption = rs.Fields!achternaam
        Me.lblNaam.Caption = rs.Fields!naam
        dateDatum = CDate(rs.Fields!datum)
        Me.lblDagen.Caption = Round((Date - dateDatum) / 7, 0) & " weken"
        rs.MoveNext
    Loop
        
End Sub

Met deze code geeft het rapport alleen de laatst gevonden loop weer op een regel. Het zouden er eigenlijk 167 moeten zijn?

Alvast bedankt,

Peter
 
Ik snap niet helemaal wat je aan het doen bent, al trok ik wel gelijk mijn wenkbrauwen op bij het lezen van de titel van je vraag, want je vult een rapport nu eenmaal niet. Een rapport heeft een Recordbron, of hij heeft dat niet. En als het rapport een bron heeft, dan heeft hij ook records. In jouw geval zou het rapport al heel gelukkig zijn als je de tabel [tblEigenaar] als Recordbron zou instellen. Heb je ook je 167 records waar je doorheen kunt bladeren.

Maar ik zie nog iets veel gekkers in je rapport: je gebruikt niet de velden om de gegevens in te bekijken, wat normaal zou zijn, maar de labels! En ja, dan wordt het een gek verhaal, want een veld is dynamisch, maar een label natuurlijk niet. Dat is alleen een veld dat een beschrijving laat zien van het bijbehorende veld. Zo zou ik bij het veld [Achternaam] een label zetten met de tekst 'Achternaam', en bij het veld[Datum] het label 'Datum'. Jij zet daarentegen de inhoud van het veld in het label. En ja, dat kun je maar één keer doen natuurlijk want er is maar één label per veld, dus als je vervolgens een lus maakt die door alle records loopt, is het uiteindelijke resultaat dat je het laatste record in de labels ziet.

Mijn vraag is dus: waarom gebruik je labels, en geen velden?
 
Hallo OctaFish,

als ik de code maakt zoals hieronder:
Code:
Private Sub Report_Open(Cancel As Integer)

    Dim db As Database
    Dim rs As Recordset
    Dim dateDatum As Date
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("tblEigenaar")
    rs.MoveFirst
    Do While rs.EOF = False
        Me.txtAchternaam.Text = rs.Fields!achternaam
        Me.txtNaam.Text = rs.Fields!naam
        dateDatum = CDate(rs.Fields!datum)
        Me.TxtWeken = Round((Date - dateDatum) / 7, 0)
        rs.MoveNext
    Loop
        
End Sub
Dan krijg ik een foutmelding "Fout 2185 tijdens uitvoering" waarin staat dat het besturingselement eerst de "Focus" moet hebben, en als ik de code dan aanpast:
Code:
Private Sub Report_Open(Cancel As Integer)

    Dim db As Database
    Dim rs As Recordset
    Dim dateDatum As Date
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("tblEigenaar")
    rs.MoveFirst
    Do While rs.EOF = False
        Me.txtAchternaam.SetFocus
        Me.txtAchternaam.Text = rs.Fields!achternaam
        Me.txtNaam.SetFocus
        Me.txtNaam.Text = rs.Fields!naam
        dateDatum = CDate(rs.Fields!datum)
        Me.TxtWeken.SetFocus
        Me.TxtWeken = Round((Date - dateDatum) / 7, 0)
        rs.MoveNext
    Loop
        
End Sub
Krijg ik de foutmelding "Fout 2101 tijdens uitvoering: de instelling die u heeft opgegeven, is ongeldig voor deze eigenschap."

Peter
 
Je hebt mijn berichtje geloof ik niet helemaal begrepen. Je hoeft alleen maar de Recordsource van je rapport in te stellen.
Code:
Private Sub Report_Open(Cancel As Integer)
    Me.RecordSource = "tblEigenaar"
End Sub
Waarom je dat met VBA wilt doen, daar zul je vast een goede reden voor hebben :)
 
Hallo OctaFish,

de reden waarom ik het met VBA doet is vanwege het laatste veld "TxtWeken" hierin komt de berekening van "dateDatum".

Peter
 
Da's geen goede reden, want dat veld kun je gewoon vanuit het Besturingselement berekenen. Het tekstveld <txtWeken> krijgt dan als Besturingselementbron de formule =Round((Date() - dateDatum)/7,0).
Dus ik vraag me nog steeds af waarom het zo moeilijk moet :).
 
Hallo OctaFish,

bedankt voor je snelle reactie's.
Ik heb het rapport aangepast door de velden "achternaam" en "naam" te koppelen aan "tblEigenaar" en bij het veld "TxtWeken" besturingselementbron staat nu:
"=Str(Round((Date()-[tblEigenaar]![datum])/7;0))", als ik het rapport in "Rapportweergave" zet dan krijg ik eerst een vraag: Parameterwaarde opgeven tblEigenaar waarna ik iets?? moet invullen. Als ik dan op Oke drukt krijg je netjes het rapport met de 167 regels alleen in het veld "TxtWeken" staat "#Type!" ook als ik Str() weghaald?

Peter
 
Ik snap niet helemaal wat die quootjes er omheen doen, en waarom je er een string van maakt. Als ik deze formule
Code:
=Round((Date()-[Datumveld)/7)
gebruik als Besturingselementbron op een niet-gebonden tekstveld, krijg ik keurig een berekening. Sowieso is elke berekening numeriek. Met Str maak je er dan wel weer een tekst van, maar dat heeft alleen invloed op de uitlijning. En als je met het veld wilt doorrekenen heb je ook weer een probleem.

'tblEigenaar' is de Recordbron van het rapport, en ik vermoed dat je 'm nu in een tekstveld probeert te zetten. Dat hoeft niet; tekstvelden halen hun koppeling uit het rapport (I.e. de recordsource).
 
Hallo OctaFish,

na het veranderen van diverse instelling zoals jij beschreef is het dan toch gelukt.
Dank hiervoor.

Met vriendelijke groet,

Peter
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan