Rapport opslaan met naam uit doorlopend formulier

Status
Niet open voor verdere reacties.

piet65

Gebruiker
Lid geworden
30 jan 2012
Berichten
7
Beste,

Ik probeer een rapport op te slaan met niet alleen OrderID maar ook company name.
OrderID lukt wel maar company name niet omdat deze op alle rapporten hetzelfde wordt aangegeven.
Ziehier de code die ik gebruik:
Code:
Private Sub cmdSaveAsPDF_Click()
    Dim qdf As DAO.QueryDef
    Dim strSQL As String
    Dim strPathName As String
    Dim blRet As Boolean
    Dim rs As Recordset
    Dim stDocName As String
    Dim strSavedSQL As String
    If Me.Dirty Then Me.Dirty = False
    stDocName = "Invoice"
    strSQL = "SELECT Orders.OrderID FROM Orders WHERE (((Orders.SelectedPrint)=True));"
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
    If rs.RecordCount < 1 Then
       MsgBox "Nothing found to process", vbCritical, "Error"
       Exit Sub
    End If 
    CreateFolder CurrentProject.Path & "\orders"
      ' store the current SQL
        Set qdf = CurrentDb.QueryDefs("Invoices")
        strSavedSQL = qdf.SQL
        qdf.Close
        Set qdf = Nothing
    Do
        Set qdf = CurrentDb.QueryDefs("Invoices")
        strSQL = Left(strSavedSQL, InStr(strSavedSQL, ";") - 1) & " and (Orders.OrderID = " & rs!OrderID & ");"
        qdf.SQL = strSQL
        qdf.Close
        Set qdf = Nothing
        ' put in the same folder as the database
         strPathName = CurrentProject.Path & "\orders\" & rs!OrderID & ".pdf"     
        DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, strPathName
        rs.MoveNext   
   Loop Until rs.EOF
   rs.Close
   Set rs = Nothing
      ' restore the  SQL
        Set qdf = CurrentDb.QueryDefs("Invoices")
        qdf.SQL = strSavedSQL
        qdf.Close
        Set qdf = Nothin

End Sub

Groeten,
Piet
 
Laatst bewerkt:
Doe ons een lol en maak de code op met de CODE tags; zo is er geen lezen aan. Kan je ook gelijk die overtollige lege regels er uit halen :)
 
Waarvoor dank :). Ik snap niet helemaal waarom je in je sql string eerst een ; toevoegt, en 'm later weer verwijdert. Is dat handig? Vergelijk
Code:
    strSQL = "SELECT OrderID FROM Orders WHERE ((SelectedPrint=True));"
    strSQL = Left(strSavedSQL, InStr(strSavedSQL, ";") - 1) & " AND (OrderID = " & rs!OrderID & ");"

eens met:
Code:
    strSQL = "SELECT OrderID FROM Orders WHERE SelectedPrint=True "
    strSavedSQL = strSQL & " AND OrderID = " & rs!OrderID

Beide codes doen exact hetzelfde...

Verder snap ik je vraag ook niet helemaal; de naam op je rapport zou voor elke klant mee moeten veranderen met de betreffende gegevens. Heb je de klantnaam niet per abuis in de Rapportkoptekst gezet? Want dan klopt het wat je beschrijft. Je moet hem echter in de Klant koptekst hebben staan. Je gooit ook te pas en te onpas Set commando's in de strijd, en ook dat hoeft allemaal niet. Je complete code zou er, een stuk ingekort, dus zo uit kunnen zien:

Code:
Private Sub cmdSaveAsPDF_Click()
Dim strSQL As String, strSqlCust As String
Dim strPathName As String, stDocName As String
Dim blRet As Boolean
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
    
    If Me.Dirty Then Me.Dirty = False
    stDocName = "Invoice"
    strSQL = "SELECT OrderID FROM Orders WHERE SelectedPrint)=True"
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
    If rs.RecordCount < 1 Then
       MsgBox "Nothing found to process", vbCritical, "Error"
       Exit Sub
    End If
    On Error Resume Next
    CreateFolder CurrentProject.Path & "\Orders"
    Set qdf = CurrentDb.QueryDefs("Invoices")
    Do While Not rs.EOF
        strSqlCust = strSQL & " AND [OrderID] = " & rs!OrderID
        qdf.SQL = strSqlCust
        strPathName = CurrentProject.Path & "\Orders\" & rs!OrderID & ".pdf"
        DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, strPathName
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
    qdf.SQL = strSQL
    Set qdf = Nothing
End Sub

Maar je haalt in je query alleen een OrderID op, dus dan is het logisch dat je de naam niet kunt gebruiken. Je moet minstens de onderliggende query aanpassen. Meer velden toevoegen dus.
 
Bedankt voor je inzet maar ook zo kom ik er niet uit vanwege foutmeldingen, ik probeer een bestandje bij te voegen voor de duidelijkheid.

Piet
 

Bijlagen

Je kunt een company tabel ergens gebruiken met de gegevens en dan via een DLookup de gegevens ophalen en verwerken in de string van je bestandsnaam.
Of je doet het via verwijzen naar een op de achtergrond steeds openstaand formulier
 
Uiteidelijk draait het om deze zin "strPathName = CurrentProject.Path & "\orders\" & rs!OrderID & ".pdf" " hierin wil ik de CompanyName verwerkt hebben tijdends het opslaan (Output) van het report naar PDF.

Piet.
 
Laatst bewerkt:
Maar als die klantnaam niet in je recordset zit, hoe denk je hem er dan uit te halen? Begin eens met dat veld in je query te zetten! Zoals ik al eerder zei.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan