Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Mailverteilung aus Abfrage mischt Daten

Begonnen von dierk1804, August 28, 2015, 20:39:14

⏪ vorheriges - nächstes ⏩

dierk1804

Hallo liebe Accessgemeinde,
ich habe ein Problem mit meiner Mailverteilung aus  meiner Abfrage. Ich erstelle eine Abfrage (Tabellenerstellung) aus meinen Aufgaben mit überfälligen Terminen. In der erstellten Tabelle ist das Projekt, die Aufgabe, der Termin und die Mail an die gesendet werden soll.
Mails werden an alle in der Tabelle stehenden versendet. Allerdings stimmt die Zuordnung der Aufgaben nicht obwohl der Datensatz in der Tabelle richtig ist. Wenn nur ein Datensatz in der Tabelle ist klappt es, bei mehreren sind die Aufgaben vermischt. Der Mitarbeiter bekommt die falsche Aufgabe. Ich finde den Fehler leider nicht.
Kann mir hier bitte jemand helfen wo der Fehler liegt?
Hier der Code (Access 2012) dazu:
Function Mail_Projekt()
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "abf_Termine"
    DoCmd.SetWarnings True
  'startet Mailverteilung
   Dim db_Pro As DAO.Database
   Dim rst_Pro As DAO.Recordset
   Set db_Pro = CurrentDb
   Set rst_Pro = db_Pro.OpenRecordset("tmp_Termine", _
   dbOpenDynaset)
   Do While Not rst_Pro.EOF
     'Inhalt der Mail
     SendMail "Fälliger Termin zu Projekt Nr:  " & (Nz(rst_Pro!AN_Nr)) & ". Kunde:  " & (Nz(rst_Pro!Kunde)) & ". Artikel Nr.:  " & (Nz(rst_Pro!Artikel_Nr)) & ". Zu Bearbeitender Punkt: " & (Nz(rst_Pro!Titel)) & ". Fällig am: " & (rst_Pro!Fälligkeitsdatum) & ". Bitte bearbeiten !"
     varmail = rst_Pro!Mail
     'varmail_CC = rst_Pro!Mail_CC
       rst_Pro.MoveNext
     Loop
rst_Pro.Close
Set rst_Pro = Nothing
Set db_Pro = Nothing

End Function

Private Sub SendMail(AN_Nr As String)
'Mail Verantwortliche senden
  On Error GoTo Err_SendMail
  Dim Empfaenger As String, Betreff As String
  Betreff = "Anmahnung Projekttermin"
    Empfaenger = varmail
    mdlTools.prcSendMail SMTPFrom, Empfaenger, "", "", Betreff, AN_Nr
  Exit_SendMail:
    Exit Sub
Err_SendMail:
    MsgBox Err.Description
    Resume Exit_SendMail
End Sub

MaggieMay

Hi,

1. Code bitte immer in Code-Tags einfügen
2. Access 2012 - ??? - diese Version gab es IMHO nicht - oder wo hast du die her?
Freundliche Grüße
MaggieMay

dierk1804

Hallo,
Ist die Access Version von 2014.
warum mischt mir die Routine die Daten? Die stehen doch alle in einem Datensatz. Mit move next müsste er doch zum nächsten Datensatz springen und neue Daten ziehen. Oder ist die Verarbeitung zu schnell um diese vollständig auszuführen. Z.b. Beim senden von Outlook?

DF6GL

#3
Hallo,

ZitatIst die Access Version von 2014.
??
Schau mal unter Datei/Info(bzw. Hilfe) nach welche Access-Version dort angegeben ist...



ZitatDie stehen doch alle in einem Datensatz

Bist du sicher?



wirf
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "abf_Termine"
    DoCmd.SetWarnings True

heraus. Ändere die TB_Erst.-Abfrage in eine normale Auswahlabfrage.
Benutze die Abfrage bei Openrecordset:

Set rst_Pro = db_Pro.OpenRecordset("Abf_Termine", dbopenSnapshot) 

Bei "SendMail ......":

Sollte da nicht schon vorher geprüft werden (z. B. in der Abfrage) , ob Felder leer sind und damit vermieden, dass sinnlose (inhaltslose) Mails versendet werden?


ZitatmdlTools.prcSendMail SMTPFrom, Empfaenger, "", "", Betreff, AN_Nr

Was macht diese Prozedur?  Werden Events erzeugt?

Wo sind "varmail" und "SMTPFrom" deklariert?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MaggieMay

Hi,
Zitatwarum mischt mir die Routine die Daten?
weil du den Empfänger erst nach dem Aufruf von SendMail zuweist, die Variable aber in der Prozedur bereits verwendest.

Lösung:
Erweitere die Parameterliste der Prozedur um den Empfänger und übergib ihn direkt beim Aufruf.
Freundliche Grüße
MaggieMay

dierk1804

Hallo zusammen,
also zur Version: es ist Office 365 (Jahresabo)
Ich stehe mit den genannten Tipps leider etwas auf dem Schlauch? Ob Tabelle oder Abfrage ist doch kein Unterschied oder ? In der Abfrage würden die gleichen Daten stehen.
AN_Nr; Aufgabe;Termin; Mail ......... aber die Aufgabe bei manchen Mails passen nicht zur tatsächlichen Aufgabe.
Der Konstrukteur bekommt plötzlich die Aufgabe des  Einkaufs obwohl in der Tabelle alle zugeordneten Aufgaben zu den Mails stimmen.

Hier die andere Routine:
Attribute VB_Name = "mdlTools"
Option Compare Database
Option Explicit

'Mails versenden
Public Const ProgName As String = "BTE Projektverwaltung"
Public Const ProgVersion As String = "1.0.0"
Public varmail As String
Public varmail_CC As String
Public varaltan As String
Public Const SMTPServer As String = "000.00.0.0" 'geändert um hier nicht gezeigt zu werden
Public Const SMTPFrom As String = "Auslöseremail@firma.de" 'geändert um hier nicht gezeigt zu werden


Public Function prcSendMail(ByVal strFrom As String, ByVal strTo As String, ByVal strCC As String, ByVal strBCC As String, ByVal strSubject As String, ByVal strBody As String) As Boolean
' SEND EMAIL VIA SMTP USING CDOEX/CDOSYS

On Error GoTo Err_prcSendMail

  Const intCDOSendUsingPort = 2
  Dim objConfig, objMsg

  prcSendMail = False
  If (Len(strFrom & "") > 0) And (Len(strTo & "") > 0) And (Len(strSubject & "") > 0) And (Len(strBody & "") > 0) Then
    Set objConfig = CreateObject("CDO.Configuration")
    objConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = intCDOSendUsingPort
    objConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
    objConfig.Fields.Update
    Set objMsg = CreateObject("CDO.Message")
    Set objMsg.Configuration = objConfig
   
    objMsg.FROM = strFrom
    objMsg.To = strTo
    If Len(strCC & "") > 0 Then objMsg.CC = strCC
    If Len(strBCC & "") > 0 Then objMsg.BCC = strBCC
    objMsg.Subject = strSubject
    objMsg.HTMLBody = strBody
    objMsg.Send
   
    Set objMsg = Nothing
    Set objConfig = Nothing
   
    prcSendMail = True
   
  End If

Exit_Err_prcSendMail:
    Exit Function
Err_prcSendMail:
    MsgBox Err.Description
    Resume Exit_Err_prcSendMail
End Function

Wenn ich es richtig verstehe soll ich hier -
   Set rst_Pro = db_Pro.OpenRecordset("tmp_Termine", _
   dbOpenDynaset)
- eine Abfrage verwenden
und aus der Sendmail die Variablen -
  Dim Empfaenger As String, Betreff As String
  Betreff = "Anmahnung Projekttermin"
    Empfaenger = varmail
hier einfügen
   Dim db_Pro As DAO.Database
   Dim rst_Pro As DAO.Recordset

Ist das richtig so? und was bringt es??? Sorry, ich verstehe das nicht so.

MaggieMay

#6
Hallo,

mir scheint, du hast nicht nur diesen Kommentar
Zitat von: MaggieMay am August 29, 2015, 01:00:141. Code bitte immer in Code-Tags einfügen
nicht zur Kenntnis genommen.

Und wie sieht es hiermit aus:
ZitatLösung:
Erweitere die Parameterliste der Prozedur um den Empfänger und übergib ihn direkt beim Aufruf.
Auch darauf findet man keine Reaktion deinerseits - lediglich beliebig oder auch konfus abgeänderten VBA-Code.

Wenn man absolut keine Ahnung von (und keine Neigung zur) Programmierung hat, sollte man besser die Finger davon lassen und sich einen anderen Job suchen.

Das ist meine ganz ehrliche Meinung.
Freundliche Grüße
MaggieMay

dierk1804

Hallo MaggieMay,
Schade das du nur an Profis Tipps geben möchtest. Ich bin halt nur Anfänger und wollte Hilfe und keine Belehrungen. Das meine Kenntnisse nicht perfekt sind weiß ich selber. Schade.
Trotzdem Danke für die Unterstützung. Ich versuche einen anderen Weg.

MaggieMay

Hallo,
ZitatSchade das du nur an Profis Tipps geben möchtest.
das ist keineswegs zutreffend, aber stelle doch bitte konkrete Fragen zur nicht verstandenen Hilfestellung, dann kann man dir die einzelnen Schritte gern ausführlicher erklären.
Freundliche Grüße
MaggieMay