loop gaat niet verder dan 1e record

Status
Niet open voor verdere reacties.

Gumabel

Gebruiker
Lid geworden
4 nov 2012
Berichten
11
Hallo,

Ik probeer deze code "Automatisch Individuele Raportjes mailen per selectie van Castella van 01/03/13" nu reeds geruime tijd in alle vormen. Ik blijf echter steeds op hetzelfde record en dus op hetzelfde rapport vastzitten. Er zitten zeker meerdere records in de recordset check via recordcount.
dim as DAO, RECORDSETCLONE geprobeerd. Heeft iemand enig idee ? (access 2010)

Code:
Private Sub Knop212_Click()

Dim i As Long
Dim DB As Database, RS As Recordset
Dim RecordCount As Long
Dim strID As Long
Set DB = CurrentDb()
Set RS = DB.OpenRecordset("TblTermijnHuidigemaand")
         ' Aantal records tellen
         RS.MoveLast
         RecordCount = RS.RecordCount
         ' Maak (zero-based) array.
         MsgBox [RecordCount]
         
         ReDim AnArray(RecordCount - 1)
         ' Vullen Array.
         RS.MoveFirst
         
         For i = 0 To RecordCount - 1
            AnArray(i) = RS![Id]
               MsgBox [Id] ' blijft op 1
            
            RS.MoveNext
               
         Next i
         ' Rapport printen voor iedere medewerker
         'For i = 0 To RecordCount - 1
          '  strID = AnArray(i)
             'DoCmd.OpenReport "RTermijnborderel", acViewReport, , "[TblTermijnHuidigemaand.Id] = " & [Id]
             
           '  MsgBox [Id] 'blijft op 1 dus ook steeds het zelfde rapport.
             
             'DoCmd.Close acReport, "RTermijnborderel"
                 '   RS.MoveNext
 
        ' Next i
 
         RS.Close
         DB.Close
         Exit Sub
End Sub
 
Laatst bewerkt:
Je poging om er [ code ] en [ / code ] omheen te zetten is waarschijnlijk mislukt doordat er spaties tussen de rechte haken zitten. Of, zoals het er naar uitziet, de rechte haken ontbreken. Mag je dus nog even repareren!
 
En dan kijken we eens naar de lus:
Code:
    iRec = rs.RecordCount - 1
    ' Maak (zero-based) array.
    MsgBox iRec
    ReDim AnArray(iRec)
    ' Vullen Array.
    For i = 0 To iRec
        AnArray(i) = rs!ID
        MsgBox rs!ID & vbLf & anArray(i) ' blijft op 1
        rs.MoveNext
    Next i
Je zou deze variant eens kunnen proberen. Die van jou neemt namelijk niet de recordset, maar het formulier als uitgangspunt. En dat verandert in het proces niet. Deze variant controleert of je in de variabele wel de goede waarden opslaat.
 
correcte verwijzing

Klopt ook in de opening van het rapport verwijs ik naar het rapport ipv recordset
dus ipv [id]

Hierna dus de werkende code.

Code:
Private Sub Knop212_Click()
Dim i As Long
Dim DB As Database, RS As Recordset
Dim RecordCount As Long
Dim strID As Long
Set DB = CurrentDb()
Set RS = DB.OpenRecordset("TblTermijnHuidigemaand")

 Irec = RS.RecordCount - 1
    ' Maak (zero-based) array.
        
    
    ReDim anArray(Irec)
    ' Vullen Array.
    For i = 0 To Irec
        anArray(i) = RS!Id
         MsgBox RS!Id & vbLf & anArray(i) ' blijft op 1
        DoCmd.OpenReport "RTermijnborderel", acViewReport, , "[TblTermijnhuidigemaand.Id] = " & [i]   'ipv [id]
               MsgBox Irec
              DoCmd.Close acReport, "RTermijnborderel"

                            
            RS.MoveNext

        
    Next i
        

End Sub


Hartelijk dank voor de snelle reactie.
 
Laatst bewerkt:
De slash in de Eindcode staat verkeerd om :) Moet dus zijn: [ /code ] (maar dan zonder de spaties, wat je wel goed had)
 
probeer verder te werken met recordset

Ik weet niet goed of ik hier mag verder gaan of een nieuwe vraag moet openen.

De code werkt : rapport wordt geopend, naam wordt gewijzigd, wordt verzonden en in juiste map gezet.
Echter de naam word niet opgemaakt met het juiste "polisnummer". zit er steeds één record voor of achter.

het rapport haalt de gegevens uit tblhuidigemaand
de naam van het rapport verwijst met me.polisnummer ook naar die tabel of vergis ik mij daar
indien dit verwijst naar het formulier of de recordset : hoe verwijs ik dan naar formulier of recordset

of moet ik mijn rapport baseren op de nieuwe recordset ?

Ik denk dat ik te veel door elkaar gebruik.

Code:
Private Sub Knop212_Click()
Dim i As Long
Dim DB As Database, RS As Recordset
Dim RecordCount As Long
Dim strID As Long
Dim MyPath As String
Dim MyFilename As String
Dim strDocName As String
Dim strWhere As String
'Dim strpolisnr As String

    strDocName = "RTermijnBorderel"
 

MyPath = "I:\Folder\"

Set DB = CurrentDb()
Set RS = DB.OpenRecordset("TblTermijnHuidigemaand")

  'Irec = RS.RecordCount - 1
    ' Maak (zero-based) array.
        
    
    ReDim anArray(Irec)
    ' Vullen Array.
    For i = 0 To Irec
        anArray(i) = RS!Id
         'MsgBox RS!Id & vbLf & anArray(i) '
      strWhere = "[TblTermijnhuidigemaand.Id] = " & [i]
    
            
MyFilename = "agentennota" & "_" & Format(Me.Polisnummer) & "_" & Format(Date, "dd-mm-yyyy") & ".pdf"
      
DoCmd.Rename "agentennota" & "_" & Format(Me.Polisnummer) & "_" & Format(Date, "dd-mm-yyyy"), acReport, "RTermijnborderel"
strDocName = "agentennota" & "_" & Format(Me.Polisnummer) & "_" & Format(Date, "dd-mm-yyyy")


   DoCmd.OpenReport strDocName, acPreview, , strWhere
   DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename, False


DoCmd.SendObject _
   acSendReport, _
  "agentennota" & "_" & Format(Me.Polisnummer) & "_" & Format(Date, "dd-mm-yyyy"), _
 acFormatPDF, _
   "Marc@gryspeerdt", _
    , _
    , _
    "Agentennota", _
    "Wij zenden u hierbij de agentenota", _
    False
 
DoCmd.Close acReport, "agentennota" & "_" & Format(Me.Polisnummer) & "_" & Format(Date, "dd-mm-yyyy")
DoCmd.Rename "RTermijnborderel", acReport, "agentennota" & "_" & Format(Me.Polisnummer) & "_" & Format(Date, "dd-mm-yyyy")
                          
            RS.MoveNext
    Next i
end sub
 
Ik heb je code even opgeschoond, want niet alleen zaten er enorm veel lege nutteloze regels in (ben je een liefhebber van scrollen?) maar ook een in mijn ogen zinloos gebruik van een array. Al kan het natuurlijk zijn dat je die op een ander moment ook gebruikt (wellicht is het een public variabele). Maar goed, hier een versie die in ieder geval elk rapport correct zou moeten behandelen.
Code:
Private Sub cmdExport_Click()
Dim i As Long
Dim rs As Recordset
Dim RecordCount As Long, strID As Long
Dim MyPath As String, MyFilename As String, strWhere As String, strDocName As String

    strDocName = "RTermijnBorderel"
    MyPath = "I:\Folder\"
    Set rs = CurrentDb.OpenRecordset("TblTermijnHuidigemaand")
    Do While Not .EOF
        strWhere = "[Id] = " & rs!Id
        MyFilename = "agentennota" & "_" & Me.Polisnummer & "_" & Format(Date, "dd-mm-yyyy")
        DoCmd.Rename MyFilename, acReport, "RTermijnborderel"
        DoCmd.OpenReport MyFilename, acPreview, , strWhere
        DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename & ".pdf", False
        DoCmd.SendObject acSendReport, MyFilename, acFormatPDF, "Marc@gryspeerdt", , , "Agentennota", _
            "Wij zenden u hierbij de agentenota", False
        DoCmd.Close acReport, MyFilename
        DoCmd.Rename "RTermijnborderel", acReport, MyFilename
        rs.MoveNext
    Loop
End Sub
 
Laatst bewerkt:
Is inderdaad duidelijker zo.
Foutje gevonden.

MyFilename = "agentennota" & "_" & Me.Polisnummer & "_" & Format(Date, "dd-mm-yyyy")
moet zijn
MyFilename = "agentennota" & "_" & rs!Polisnummer & "_" & Format(Date, "dd-mm-yyyy")

Bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan