Newsgroup: it.comp.appl.access
Titolo: Visualizzare un elenco dei report da poter selezionare con una checkbox

Buongiorno a tutti,
 
mi piacerebbe creare una maschera in cui elencare sotto forma di tabella con checkbox tutti i report del mio db
 
Cosi facendo potrei selezionare i report di mio interesse spuntando la checkbox accanto al nome dei report e poi cliccare un pulsante per associare tali report selezionati alla stampante che ho preventivamente selezionato in una casella combinata.
 
Il codice per associare un report alla stampante ce l'ho e già funziona, ma tutte le volte che apporto una modifica devo riassociare uno alla volta i report alla relativa stampante.
 
Se riuscissi a selezionare i report tramite checkbox o tramite una listbox a selezione multipla e poi in un colpo solo associare tali report alla stampante che ho selezionato sarebbe fantastico.
 
Qualcuno ha qualche idea?
 
Grazie in anticipo


Devi predisporre una Tabella di appoggio, oppure un Recordset ADO in memoria..., forse per semplicità conviene la 1°.
 
Nella Tabella metti 2 Campi:
NomeReport  (PK di tipo Testo)
Selected    (Si/No) con Valore di Default False
 
Poi pololi la Tabella con questa:
 
INSERT INTO NomeTuaTabella (NomeReport)
SELECT MsysObjects.Name 
FROM MsysObjects 
 
Ora fai una Maschera in modalità Continua con i 2 Campi assegnati ai controlli di default...
 
@Alex
WHERE (((MsysObjects.Type)=-32764)) 
ORDER BY MsysObjects.Name;


Mi si era spezzata...
 
INSERT INTO NomeTuaTabella (NomeReport)
SELECT MsysObjects.Name 
FROM MsysObjects 



Mitico!  :-)
Ora devo solo fare un ciclo che associa la stampante ai report selezionati.
Non avevo mai usato le maschere continue.
Hai per caso idea come fare per dirgli di eseguire il mio codice di associazione ad ogni elemento spuntato nella maschera continua?
 
Grazie mille davvero.
 
Intanto che attendo una gentile risposta ci provo a capire come fare da solo.

Non ho capito quello che vuoi fare...
Se devi associare il reportage 1 sola stampante aggiungi un campo alla tabella...
Boh...
@Alex


Credo di esserci riuscito :
 
Private Sub associastampante_Click()
On Error GoTo ErrorHandler
 
'
http://techie-tid-bits.blogspot.it/2013/09/cant-save-printer-changes-to-access.html
 
'
https://msdn.microsoft.com/en-us/library/office/aa173220(v=office.11).aspx
 
'
https://access-programmers.co.uk/forums/showthread.php?t=225910
 
 
Dim strSQL As String
Dim rs As DAO.Recordset
Dim NomeReport As String, stampante As String
 
strSQL = "elencoreport"
 
Set rs = CurrentDb.OpenRecordset(strSQL)
stampante = Me.ElencoStampanti.Value
 
 
With rs
 
 
    If Not .BOF And Not .EOF Then
    'We don’t know if the recordset has any records,
    'so we use this line of code to check. If there are no records
    'we won’t execute any code in the if..end if statement.
 
        .MoveLast
        .MoveFirst
        'It is not necessary to move to the last record and then back
        'to the first one but it is good practice to do so.
 
        While (Not .EOF)
        'With this code, we are using a while loop to loop
        'through the records. If we reach the end of the recordset, .EOF
        'will return true and we will exit the while loop.
 
            If rs.Fields("selected").Value = True Then
               NomeReport = rs.Fields("nomereport").Value
               Call changeReportPrinter(NomeReport, stampante)
               'Debug.Print rs.Fields("teacherID") & " " & rs.Fields("FirstName")
               MsgBox "Operazione eseguita con successo!", vbInformation
 
            End If
 
            .MoveNext
            'We need to ensure that we use .MoveNext,
            'otherwise we will be stuck in a loop forever…
            '(or at least until you press CTRL+Break)
        Wend
 
    End If
 
    .Close
    'Make sure you close the recordset...
End With
 
ExitSub:
    Set rs = Nothing
    '..and set it to nothing
    Exit Sub
    Resume ExitSub
 
ErrorHandlerExit:
   Exit Sub
 
ErrorHandler:
   MsgBox "Errore associaStpaReport_Click N.: " & Err.Number & "; Descrizione: " & _
      Err.Description
   Resume ErrorHandlerExit
 
End Sub


E questo è il codice che imposta la stampante al report :
 
Public Function changeReportPrinter(ReportName As String, PrinterName As String)
    Dim bolHasModule As Boolean
    Dim fso As FileSystemObject
    Dim intDecLines As Integer
    Dim strModFile As String
    Dim intModLines As Integer
 
    ' Open the report hidden in design view
    DoCmd.OpenReport ReportName, acViewDesign, , , acHidden
 
    ' Check the report for a module
    If Reports(ReportName).HasModule Then
 
        ' Look to see if the Report Module script file already exists and delete
        strModFile = CurrentProject.Path & "\" & ReportName & ".mod"
        Set fso = CreateObject("Scripting.FileSystemObject")
        If fso.FileExists(strModFile) Then
            fso.DeleteFile strModFile, True
        End If
        bolHasModule = True
 
        ' Save the report module as a text file
        fso.OpenTextFile(strModFile, ForWriting, True).Write _
            Reports(ReportName).Module.Lines(1, Reports(ReportName).Module.CountOfLines)
        Else
            bolHasModule = False
        End If
 
        ' Change the HasModule flag to false so we can write our settings to the report
        Reports(ReportName).HasModule = False
 
        ' Change your printer settings here
        ' =================================
        Set Reports(ReportName).Printer = Application.Printers("" & PrinterName & "")
 
 
        DoCmd.Save acReport, ReportName
 
        ' Change the HasModule flag back to what it was
        Reports(ReportName).HasModule = bolHasModule
        If bolHasModule Then
 
            ' Import the Module text file back into the report
            If fso.FileExists(strModFile) Then
                intDecLines = Reports(ReportName).Module.CountOfDeclarationLines
                If intDecLines > 0 Then
                    Reports(ReportName).Module.DeleteLines 1, intDecLines
                End If
                Reports(ReportName).Module.AddFromFile strModFile
                fso.DeleteFile strModFile, True
            End If
        End If
 
        ' Save and close your report with all your new settings
        DoCmd.Save acReport, ReportName
        DoCmd.Close acReport, ReportName, acSaveYes
 
End Function