Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

inviare mail da codice con docmd.sendobject inserendo nel testo i record di una query

83 views
Skip to first unread message

Andrea Pettenon

unread,
Sep 20, 2022, 1:52:33 AM9/20/22
to
Buongiorno NG,
voglio creare un automatismo per cui quando stampo un DDT mi venga inviata una mail con il testo i record della maschera, generata da una query.
Quindi in modo molto semplice nell'evento click del pulsante ho inserito queste poche righe:

Dim Corpo As String
Dim key As String

If Me.[2key] = 0 Then
key = "1 key"
Else
key = "2 key"
End If

Corpo = Me.Posizione & " - " & key & " - " & Me.Model & " - " & Me.Stock_number & " - " & Me.License_plate & " - " & Me.VIN

DoCmd.SendObject acSendNoObject, , acFormatTXT, "indirizzo-email-to", "indirizzo-email-Cc", , "Oggetto-mail", Corpo, False

e ottengo nel corpo della mail ricevuto questo:
C01 - 2 key - Panda 0.9 - RR42227 - EV659SX - ZFA31200003302603

Perfetto!, anzi no... perchè così ottengo solo il primo record della maschera (query) , mentre io voglio ottenere il testo con l'elenco degli "n" record che ho nella maschera in quel momento, ottenendo una mail di questo tipo:
C01 - 2 key - Panda 0.9 - RR42227 - EV659SX - ZFA31200003302603
A04 - 1 key - Peugeot 208 - QW12445 - FC223GB - 1PKFR504403202678
...
...

Come devo modificare il tutto per arrivare a questo?

Grazie mille per il Vostro immenso aiuto.

Andrea

BFS

unread,
Sep 20, 2022, 2:02:36 AM9/20/22
to
ti crei un recordset con le righe del tuo ddt

e poi te lo cicli

while not tuoRecordset.eof
corpo=corpo & tuoRecordset.fields("posizione") & " - " &
tuoRecordset.fields("posizione") & ...bla bla bla & vbcrlf

tuoRecordset.movenext
wend


'a questo punto fuori dal ciclo il tuo corpo contiene tutte le righe

BFS



Andrea Pettenon

unread,
Sep 20, 2022, 5:54:54 PM9/20/22
to
Scusami tanto, ma non ne esco (porta pazienza non sono programmatore). Io ho cambiato il codice in questo modo (e logicamente non va, perchè NON avrò fatto esattamente ciò che mi hai detto di fare)

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Corpo As String
Dim strSQL As String

Set db = CurrentDb
strSQL = "SELECT pickin.stock_number, pickin.vin, pickin.license_plate, pickin.model, pickin.[2key], pickin.NrDDT, pickin.Posizione FROM pickin"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
While Not rs.EOF
Corpo = Corpo & rs.Fields(pickin.Posizione) & " - " & rs.Fields(pickin.[2key]) & " - " & rs.Fields(pickin.Model) & " - " & rs.Fields(pickin.Stock_number) & " - " & rs.Fields(pickin.License_plate) & " - " & rs.Fields(pickin.VIN) & vbCrLf
rs.MoveNext
Wend

(quando va in esecuzione mi torna l'errore runtime 424 - necessario oggetto)

Ti ringrazio in anticipo per l'immenso aiuto che vorrai darmi.

BFS

unread,
Sep 21, 2022, 1:29:03 AM9/21/22
to
i nomi dei campi vanno tra apici

Corpo = Corpo & rs.Fields("pickin.Posizione") & " - " &
rs.Fields("pickin.[2key]") ...etc etc


poi il tuo sql estrae tutte le righe dalla tabella pickin...credo ti
serva anche la parte where per limitare alle sole righe del picking corrente


per il resto mi pare corretto

BFS


Andrea Pettenon

unread,
Sep 21, 2022, 9:47:45 AM9/21/22
to
Si, ho volutamente tolto io il where per non appesantire il messaggio.

Grazie per ora, correggo e la provo

Andrea

@Alex

unread,
Sep 21, 2022, 10:25:20 AM9/21/22
to
Spero di non sbagliare, mi pareva ci fosse un LIMITE di Caratteri... 255, ma non ho trovato letteratura.

@Alex
Message has been deleted
Message has been deleted
Message has been deleted

Andrea Pettenon

unread,
Sep 21, 2022, 1:59:05 PM9/21/22
to
Il giorno mercoledì 21 settembre 2022 alle 16:25:20 UTC+2 @Alex ha scritto:
> Spero di non sbagliare, mi pareva ci fosse un LIMITE di Caratteri... 255, ma non ho trovato letteratura.
>
> @Alex
Questo è esattamente ciò che sto eseguendo:

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Corpo As String
Dim key As String
Dim strSQL As String

Set db = CurrentDb
strSQL = "SELECT pickin.stock_number, pickin.vin, pickin.license_plate, pickin.model, pickin.[2key], pickin.NrDDT, pickin.Posizione FROM pickin WHERE (((pickin.NrDDT)=[Maschere]![M_StampaBollaDaSchedaAutoIDAuto1]![NrDDT]))"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
While Not rs.EOF
Corpo = Corpo & rs.Fields("pickin.Posizione") & " - " & rs.Fields("pickin.[2key]") & " - " & rs.Fields("pickin.Model") & " - " & rs.Fields("pickin.Stock_number") & " - " & rs.Fields("pickin.License_plate") & " - " & rs.Fields("pickin.VIN") & vbCrLf
rs.MoveNext
Wend
DoCmd.SendObject acSendNoObject, , acFormatTXT, "destinatario_mail", , , "PORTA STA MACCHINA!!!! E DATE NA MOSSA!!!", Corpo, False

ma mi esce l'errore di run-time 3061 - Parametri insufficienti. Previsto 1.
Cliccando Debug nel messaggio errore, mi evidenzia in giallo la riga Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) e posizionando il cursore del mouse sopra a dbOpenDynaset mi compare l'indicazione [dbOpenDynaset = 2],
se lo sposto sopra a strSQL mi appare tutta la stringa strrSQL = "SELECT pickin.stock_number..............ecc"

Dove posso concentrare la ricerca della soluzione?
Andrea

RobertoA

unread,
Sep 21, 2022, 2:01:01 PM9/21/22
to
Il 21/09/2022 19:50, Andrea Pettenon ha scritto:
> Il giorno mercoledì 21 settembre 2022 alle 16:25:20 UTC+2 @Alex ha scritto:
>> Spero di non sbagliare, mi pareva ci fosse un LIMITE di Caratteri... 255, ma non ho trovato letteratura.
>>
>> @Alex
> Questo è esattamente ciò che sto eseguendo:
>
> Dim db As DAO.Database
> Dim rs As DAO.Recordset
> Dim Corpo As String
> Dim key As String
> Dim strSQL As String
>
> Set db = CurrentDb
> strSQL = "SELECT pickin.stock_number, pickin.vin, pickin.license_plate, pickin.model, pickin.[2key], pickin.NrDDT, pickin.Posizione FROM pickin WHERE (((pickin.NrDDT)=[Maschere]![M_StampaBollaDaSchedaAutoIDAuto1]![NrDDT]))"
> Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
> While Not rs.EOF
> Corpo = Corpo & rs.Fields("pickin.Posizione") & " - " & rs.Fields("pickin.[2key]") & " - " & rs.Fields("pickin.Model") & " - " & rs.Fields("pickin.Stock_number") & " - " & rs.Fields("pickin.License_plate") & " - " & rs.Fields("pickin.VIN") & vbCrLf
> rs.MoveNext
> Wend
>
> ma mi esce l'errore di run-time 3061 - Parametri insufficienti. Previsto 1.
> Cliccando Debug nel messaggio errore, mi evidenzia in giallo la riga Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) e posizionando il cursore del mouse sopra a dbOpenDynaset mi compare l'indicazione [dbOpenDynaset = 2],
> se lo sposto sopra a strSQL mi appare tutta la stringa strrSQL = "SELECT pickin.stock_number..............ecc"
>
> Dove posso concentrare la ricerca della soluzione?
> Andrea


Metti il contenuto della strSql nell'editor di query di Access e lavori
la' dentro finche' ti spara fuori il risultato che ti aspetti di vedere

Quando ci riuscirai allora avrai capito quale parte non e' stata
composta correttamente, torni nel codice e sistemi



RobertoA

unread,
Sep 21, 2022, 2:02:23 PM9/21/22
to
Il 21/09/2022 19:59, Andrea Pettenon ha scritto:
> E DATE NA MOSSA

Venessia, Mirano, Oriago e dintorni? :)


Andrea Pettenon

unread,
Sep 21, 2022, 2:28:41 PM9/21/22
to
io provincia di Vicenza ai confini con Padova. La mail era diretta al mio capetto che è di Verona

Andrea Pettenon

unread,
Sep 21, 2022, 2:29:50 PM9/21/22
to
L'ho già testata come query ed escono i 2 record che devono uscire. La query è giusta.

Andrea Pettenon

unread,
Sep 21, 2022, 3:28:54 PM9/21/22
to
Altra segnalazione che posso fare è che sopra a rs.EOF mi fa vedere il messaggio "variabile oggetto o variabile del blocco With non impostata"
ma che vuole???

Andrea Pettenon

unread,
Sep 21, 2022, 3:41:13 PM9/21/22
to
Ma la riga
Corpo = Me.Posizione & " - " & me.[2key] & " - " & Me.Model & " - " & Me.Stock_number & " - " & Me.License_plate & " - " & Me.VIN
messa prima del ciclo, ci vuole o non serve più?

Skorza

unread,
Sep 21, 2022, 6:42:48 PM9/21/22
to
Allora, ho fatto 1000 prove e alla fine non trovando alcun errore ho fatto la 1001^ prova dando in pasto anzichè la query, una tabella che carico temporaneamente con i dati che mi servono allo scopo e ho modificato il codice in questo modo:

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Corpo As String
Dim key As String
Dim strSQL As String
If Me.[2key] = 0 Then
key = "1 key"
Else
key = "2 key"
End If
CurrentDb.Execute "DELETE * FROM t_auto_temp" 'svuotamento della cartella temporanea
DoCmd.OpenQuery ("query12") 'questa è una query di accodamento che mi va a caricare gli "n" record nella tabella temporanea appena svuotata
Set db = CurrentDb
Set rs = db.OpenRecordset("t_Auto_temp", dbOpenTable) 'mi carica il recordset che stavolta lo fa senza errori (i campi sono sempre gli stessi di prima)
While Not rs.EOF
Corpo = Corpo & rs.Fields("Posizione") & " - " & key & " - " & rs.Fields("model") & " - " & rs.Fields("stock_number") & " - " & rs.Fields("license_plate") & " - " & rs.Fields("vin") & vbCrLf
rs.MoveNext
Wend
DoCmd.SendObject acSendNoObject, , acFormatTXT, "and...@mail.como", , , "PORTA STA MACCHINA!!!! E DATE NA MOSSA!!!", Corpo, False
'ottengo la mail con nel corpo le "n" righe/record che mi aspettavo
Ora la domanda mi sorge spontanea.... perchè con l'altro metodo via query non funziona?
mah!, sono contento lo stesso perchè in qualche maniera sono riuscito ad arrivare al mio scopo anche se forse è un po' barbaro.

Ciao e alla prossima e grazie a tutti comunque, non ce l'avrei fatta senza i vostri preziosi aiuti.

BFS

unread,
Sep 22, 2022, 1:40:11 AM9/22/22
to
Il 21/09/2022 19:50, Andrea Pettenon ha scritto:
> strSQL = "SELECT pickin.stock_number, pickin.vin, pickin.license_plate, pickin.model, pickin.[2key], pickin.NrDDT, pickin.Posizione FROM pickin WHERE (((pickin.NrDDT)=[Maschere]![M_StampaBollaDaSchedaAutoIDAuto1]![NrDDT]))"

cambialo con

strSQL = "SELECT pickin.stock_number, pickin.vin, pickin.license_plate,
pickin.model, pickin.[2key], pickin.NrDDT, pickin.Posizione FROM pickin
WHERE (((pickin.NrDDT)=" &
[Maschere]![M_StampaBollaDaSchedaAutoIDAuto1]![NrDDT]))

BFS


BFS

unread,
Sep 22, 2022, 1:43:18 AM9/22/22
to
scusa mi sono perso le parentesi meglio cosi


strSQL = "SELECT pickin.stock_number, pickin.vin, pickin.license_plate,
pickin.model, pickin.[2key], pickin.NrDDT, pickin.Posizione FROM pickin
WHERE pickin.NrDDT=" & [Maschere]![M_StampaBollaDaSchedaAutoIDAuto1]![NrDDT]


oppure più leggibile

dim strNrDDTas integer
strNrDDT=[Maschere]![M_StampaBollaDaSchedaAutoIDAuto1]![NrDDT]

strSQL = "SELECT pickin.stock_number, pickin.vin, pickin.license_plate,
pickin.model, pickin.[2key], pickin.NrDDT, pickin.Posizione FROM pickin
WHERE pickin.NrDDT=" & strNrDDT


BFS

0 new messages