[Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

di il
19 risposte

[Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

Salve a tutti, chiedo venia in primis per il titolo forse non proprio chiaro...mi spiego:
In una form, riesco tranquillamente a gestire l'inoltro di mail massivo, passando come parametri una query...il ciclo funge e per ora, non da problemi.
In un altra form, ho una serie di textbox contenenti delle informazioni. Tali informazioni, cliccando su un pulsante, servono per "alimentare" il report che, viene quindi implementato di queste informazioni e poi inoltrato tramite mail all'indirizzo presente in una textbox.
Ora l'idea era di combinare le 2 cose e cioè, inviare massivamente mail facendo in modo che il report si alimentasse di quelle info ed inviando anche la mail a tutto l'elenco presente nella maschera.
Posto il codice utilizzato per ora ma, invia le mail ma solo con le informazioni relative al primo record...come se non passasse al successivo...
Dim db As Database
Dim rst1 As Recordset
Set db = CurrentDb
Set rst1 = db.OpenRecordset("qry_MassivoMail", dbOpenDynaset)
    Dim strTo As String
    Dim strSubject, NomeFileStr, DenStr As String
    Dim strMessageText As String
    
	NomeFileStr = "Veicolo:" & Me.txtVeicolo
	DenStr = Me.txtDenom
	
	strTo = Me.txtEmail1
	strSubject = NomeFileStr
	strMessageText = DenStr
	
	    DoCmd.OpenReport "RptInvio", acViewPreview, , "tblVeicoli.IDVeicolo = " & Me!IDVeicolo
	        
	DoCmd.SendObject ObjectType:=acSendReport, _
        ObjectName:="RptInvio", _
        OutputFormat:=acFormatPDF, _
        To:=strTo, _
        Subject:=strSubject, _
        MESSAGETEXT:=strMessageText, _
        EditMessage:=true
    DoCmd.Close acReport, "RptInvio"
    rst1.MoveNext
If rst1.EOF Then GoTo Fine
Loop
Close
Fine:
Close
MsgBox (Err.Description)
Exit Sub
come potrei risolvere? Inoltre la query "qry_MassivoMail" stà alla base della form "FormLavoriScadenzeRev" che è di tipo maschere continue e che, in questo specifico caso è una sottomaschera della form "FormLavoriScadenze"

19 Risposte

  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Il codice presenta evidenti errori e/o manchevolezze/imprecisioni .... tali da pensare che tu non lo abbia compilato !

    Quello che salta all'occhio è la mancanza di un loop (ovvero esiste solo LOOP ma il do while / do until DOVE SONO? )
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Ciao Max, grazie per l'intervento. Ho inserito la parte mancante da te segnalata
    Ma questo tipo di operazione, è quindi possibile effettuarla?
    Se clicco sul pulsante, mi aggiunge alla mail solo le info relative al primo record della form, stessa cosa per il report
    Dim db As Database
    Dim rst1 As Recordset
    Set db = CurrentDb
    Set rst1 = db.OpenRecordset("qry_MassivoMail", dbOpenDynaset)
    	Dim strTo As String
    	Dim strSubject, NomeFileStr, DenStr As String
    	Dim strMessageText As String
    
    	rst1.MoveFirst
    	Do While True
    	email = rst1("EMail")
    
       NomeFileStr = "Veicolo:" & Me.txtVeicolo
       DenStr = Me.txtDenom
       
       strTo = Me.txtEmail1
       strSubject = NomeFileStr
       strMessageText = DenStr
       
           DoCmd.OpenReport "RptInvio", acViewPreview, , "tblVeicoli.IDVeicolo = " & Me!IDVeicolo
               
       DoCmd.SendObject ObjectType:=acSendReport, _
            ObjectName:="RptInvio", _
            OutputFormat:=acFormatPDF, _
            To:=strTo, _
            Subject:=strSubject, _
            MESSAGETEXT:=strMessageText, _
            EditMessage:=true
        DoCmd.Close acReport, "RptInvio"
        rst1.MoveNext
    If rst1.EOF Then GoTo Fine
    Loop
    Close
    Fine:
    Close
    MsgBox (Err.Description)
    Exit Sub
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Ragazzi nessun suggerimento? In alternativa mi chiedevo se era possibile gestire la cosa tramite un testo html ma li, davvero non so dove mettere le mani...
    Come avreste gestito voi la cosa?
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Come ti ha detto Max è possibile scrivendo codice corretto... ma credo tu non abbia proprio capito quello che stai facendo...
    Intanto non si capisce se il report sia uno o n ... e se fosse 1 perché lo metti nel ciclo che invece deve solo costruire la stringa BCC... perché con mail a mtidestinatario non si usa MAI il To:

    Credo tu faccia ma confusione.
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Ciao Alex grazie per l'intervento...purtroppo si, non ho ben chiara la fase poichè sono un autodidatta...
    Con quel tipo di loop, volevo fare in modo da:

    -Collegarmi alla query origine dati della form;
    -Leggere le informazioni nelle varie txt relative a quella posizione nella query;
    -Aprire il report così da valorizzare i vari campi ed allegarlo alla mail per poi inviarlo (per poi chiuderlo);
    -Passare al record successivo e rieseguire le fasi sopra descritte fino a quando non terminano i record

    diciamo che volevo eseguire questi passaggi ma manda sempre le mail al primo record presente nella query per le n posizioni presenti nella query
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    
    Dim db As Database
    Dim rst1 As DAO.Recordset
    Dim strTo As String
    Dim strSubject, NomeFileStr, DenStr As String
    Dim strMessageText As String
    
    on error goto LblErr
    
    Set db = CurrentDb
    Set rst1 = db.OpenRecordset("qry_MassivoMail", dbOpenDynaset)
    
    rst1.MoveFirst
    Do While not rst1.eof
       email = rst1("EMail")
    
       NomeFileStr = "Veicolo:" & Me.txtVeicolo
       DenStr = Me.txtDenom
       
       strTo = Me.txtEmail1
       strSubject = NomeFileStr
       strMessageText = DenStr
       
       DoCmd.OpenReport "RptInvio", acViewPreview, , "tblVeicoli.IDVeicolo = " & Me!IDVeicolo
               
       DoCmd.SendObject ObjectType:=acSendReport, _
            ObjectName:="RptInvio", _
            OutputFormat:=acFormatPDF, _
            To:=strTo, _
            Subject:=strSubject, _
            MESSAGETEXT:=strMessageText, _
            EditMessage:=true
        DoCmd.Close acReport, "RptInvio"
        rst1.MoveNext
    Loop
    rst1.Close
    set rst1 = nothing
    '
    ExitHere:
    exit sub
    '
    LblErr:
    MsgBox (Err.Description)
    Exit Sub
    
    
    Adesso dovresti avere un codice che effettua lo scorrimento del recordset (salvo errori di digitazione ... non ho Access sotto mano).
    Guardalo e cerca di apprendere alcuni concetti basilari :
    - dichiarazione del recordset (corretto richiamo della libreria di riferimento DAO vs ADO)
    - apertura recordset ( se non lo aggiorni non serve dbOpenDynaset -> cerca la costante più adatta ad un'apertura in readonly)
    - loop (do while not eof -> se il recordset è vuoto non entra nel loop)
    - scorrimento del recordset all'interno del loop (movenext, generalmente come ultima istruzione del loop)
    - chiusura del recordset (close)
    - distruzione del recordset (nothing)
    - un minimo di gestione degli errori (on error goto ...)
    - soppressione dell'uso del goto (viene usato generalmente solo per la gestione degli errori)
    - indentazione del codice .....

    Le azioni da fare all'interno del loop devi verificarle tu
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Ciao Max, grazie per l'aiuto...
    Con il breakpoint, ho vericato la sequenza poichè se inserisco una query che non sta alla base sella form funge ma, continua ad inviare ed allegare il report sempre al primo record della query per le X posizioni contenuta in essa. Se inserisco come parametro la query alla base del form, si blocca subito dopo questo punto
    Do While Not rst1.EOF
       email = rst1("EMail")
    e mi segnala :"Il campo non può essere aggiornato"

    in cosa sbaglio?
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Niente....riprovo da giorni ma proprio non va oltre il
    Do While Not rst1.EOF
       email = rst1("EMail")
    ho provato anche a togliere parte del codice, rendendolo quanto più essenziale possibile ma sulla condizione sopra riportata, si blocca sempre...
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    zio Ken ha scritto:


    Do While Not rst1.EOF
       email = rst1("EMail")
    ...sulla condizione sopra riportata, si blocca sempre...
    Sono certo che né Max né @Alex hanno bisogno che io scriva PFMJI per intervenire.
    Nel tuo codice che cos'è la variabile "email"? Ammesso che sia una variabile.
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Philcattivocarattere ha scritto:


    zio Ken ha scritto:


    Do While Not rst1.EOF
       email = rst1("EMail")
    ...sulla condizione sopra riportata, si blocca sempre...
    Sono certo che né Max né @Alex hanno bisogno che io scriva PFMJI per intervenire.
    Nel tuo codice che cos'è la variabile "email"? Ammesso che sia una variabile.
    Phil grazie mille per il tuo intervendo e grazie per l'osservazione....
    email non l'avevo dichiarata ancora come string (conserva l'indirizzo mail a cui inviare la mail)...ora dichiarandola, il loop continua per gli n record contenuti nella query ma, continua ad aprire il report ed inviare le mail solo al primo record...come se il comando "rst1.MoveNext" non faccia passare al record successivo...
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Prima di indagare sul codice in questione occorre che tutto il codice venga validato (compilato) per individuare eventuali errori di sintassi e soprattutto che, in tutti le maschere / moduli / classi sia presente la direttiva
    
    option explicit
    
    Dove aver risolvo eventuali errori di sintassi e di variabili non dichiarate, ma solo dopo, ha senso tentare di risolvere i problemi successivi.
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    max.riservo ha scritto:


    Prima di indagare sul codice in questione occorre che tutto il codice venga validato (compilato) per individuare eventuali errori di sintassi e soprattutto che, in tutti le maschere / moduli / classi sia presente la direttiva
    
    option explicit
    
    Dove aver risolvo eventuali errori di sintassi e di variabili non dichiarate, ma solo dopo, ha senso tentare di risolvere i problemi successivi.
    Si, giustissimo...per la fretta avevo omesso delle dichiarare delle variabili aggiunte successivamente per integrare il corpo della mail...ora il loop gira ma con i problemi legati sempre al primo record
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Visto che non hai errori di compilazione, che le variabili sono correttamente dichiarate e che il loop funziona (come hai fatto a verificarlo ?) indicaci tutto il codice che hai inserito all'interno del loop ....
  • Re: [Risolto] Inoltro massivo mail con allegato Report, origine dati: query maschera

    Ciao Max, il codice è quello che mi postasti tu...ma nel fratt per cercare un metodo di costruzione del loop ho guardato diversi "argomenti" ma come se non mi risolvessero il problema del passaggio al record successivo.
    Questo in particolare
    https://www.accessallinone.com/looping-through-a-recordset/ descrive questa pratica ma non ho risolto comunque il problema
            .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.
    questo ma sembra che il caso non sia il mio
    https://www.microsofttraining.net/post-35070-dao-recordset-join.html
    questo...che riutilizza il metodo .movelast - .movefirst https://stackoverflow.com/questions/5864160/code-to-loop-through-all-records-in-ms-access
    alla fine non riuscendo a risolvere, sono comunque ritornato al punto di partenza perchè non risolvevo i problema... è proprio nella costruzione del loop che non so come operare o cosa cercare in rete per arginare la falla...
Devi accedere o registrarti per scrivere nel forum
19 risposte