Zum Inhalt springen

Access: Email in Echtzeit


_Nora_

Empfohlene Beiträge

Hallo,

wie ich eine Email verschicke ist mir mittlerweile klar und das funktioniert jetzt auch alles.

Nun möchte ich aus einer Tabelle, die dauerhaft erneuert wird, d.h. die Mitarbeiter melden dort ihre Aufträge, IMMER wenn ein bestimter Status gemeldet wird eine Email verschicken.

Wie kann ich das machen, dass es dauerhaft funktioniert, auch wenn ich nicht an der Datenbank arbeite?

Geht das überhaupt?

Liebe Grüße, nora

P.S. ich hoffe euch reichen die Informationen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein automatisch geschieht da nichts. Ein typischer Ansatz ist über ein externes Script in regelmäßigen Zeitabständen die Datenbank abzufragen. Wenn es wirklich Realtime sein soll, dann wirst Du mit Access nicht weit kommen. Unter Postgres könnte man so etwas über eine Stored Procedure lösen, die jedes mal, wenn ein Insert / Update auf der Tabelle statt findet, die Mail generiert und versendet, bei Access aber nicht möglich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

was ist Postgres?

PostgreSQL ? Wikipedia

also, noway? verdammt, ich mochte meinen Kopf :(

Entweder machst Du das ganze Zeitgesteuert, die Button Lösung, wobei ich beides eher etwas zusammengefricktelt finde.

Als Alternative bleibt Dir z.B. die komplette Datenbank in Postgres oder MS SQL zu übertragen und in die alte Accessdatenbank Referenzen auf die Tabellen in dem Postgres / MS SQL Server zu erzeugen. Damit benutzt man weiterhin Access als Front-End, die Daten liegen aber dann in Postgres / MS SQL.

Dort kannst Du dann z.B. via Python über eine Stored Procedure die Mails generieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

da du ja eine Aktion hast "Mitarbeiter melden dort ihre Aufträge" kannst es daran aufhängen, soll heißen wenn der Auftrag gespeichert wird (bsp: Button "Speichern") und der Auftrag den Status X hat dann wird eine Mail versendet.

Die Mitarbeiter melden das im BDE, d.h. das ich nur eine "lese-tabelle" in access einbinde, aber meine Mitarbeiter nicht damit arbeiten...

schade, naja, dann muss ich meinen Chef davon abbringen :P

Planänderung: die Datenbank ist immer aktiv, bzw. während der Arbeitszeit (die eigentlich ja auch nur interessiert) ist mindestens ein User auf der DB, bedeutet, das ich da doch mehr machen kann oder?

danke für die Hilfe,

nora

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo noch mal,

so, ich hab jetzt nen groben Plan, was ich machen will...

Ich habe zwei Arrays erstellt, in denen die Gruppen und die Meister eingetragen sind.

Wenn sich jetzt ein Mitarbeiter im BDE auf einen bestimmten Status meldet, dann soll Access das erkennen (hat ja immer die aktuelle Tabelle) und über die Mitarbeiter-Nr. die Gruppe filtern (auch in einer Tabelle hinterlegt), anhand der Gruppe kann ich dann den zugehörigen Meister erkennen und hab somit die Email-Adresse. Jetzt kann ich die Email verschicken

So, nun zur umsetzung:

-Wie kann ich das machen, dass Access (solange die DB geöffnet ist) alle 2 Minuten (oder so) diese Abfrage durchführt, ob der Status gemeldet wurde?

ich habe irgendwas von Zeitschleifenabfrage oder so gelesen...

-wie kann ich die Mail versenden, ohne das irgendwer das mitbekommt? zZ ist mein Email-code mit ClickYes, aber das sieht der User ja auch...

ich hoffe ich nerve nicht und ihr könnt mir helfen,

danke schon mal im vorraus,

nora

Link zu diesem Kommentar
Auf anderen Seiten teilen

-Wie kann ich das machen, dass Access (solange die DB geöffnet ist) alle 2 Minuten (oder so) diese Abfrage durchführt, ob der Status gemeldet wurde?

ich habe irgendwas von Zeitschleifenabfrage oder so gelesen...

Using a Timer in Office VBA Macros

-wie kann ich die Mail versenden, ohne das irgendwer das mitbekommt? zZ ist mein Email-code mit ClickYes, aber das sieht der User ja auch...

Visual Basic SMTP Examples Source Code

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

zwischenstand: ein Kollege hat die Zeitabfrage gemacht, die habe ich jetzt als Grundlage genommen und mein Kriterium hinzugefügt, funktioniert auch, also der zeigt mir die an, die das Krieterium erfüllen.

Wie kann ich jetzt aus dem Ergebnis der Abfrage, den Namen filtern, und das Senden der Mail starten?

vielen dank für eure hilfe!

nora

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ohne dass Du hier Code Auszüge bzw die Struktur der Daten postest, kann Dir niemand die Frage beantworten.

Außerdem zu der zeitgesteuerten Ausführung: Ich hoffe Ihr habt beachtet, dass wenn mehrere User die Datenbank geöffnet haben, die zeitgesteuerte Ausführung nur ein einziges Mal läuft bzw sicher gestellt ist, denn sollten mehrere Instanzen des Timers laufen, würde unter Umständen mehrfach die Mail generiert und versendet werden. Da eine Datenbank multiuser orientiert ist, muss hier eben das ganze passend abgesichert werden.

Deshalb der Hinweis, dass eine userbasierte Steuerung für so etwas eigentlich ungeeignet ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ohne dass Du hier Code Auszüge bzw die Struktur der Daten postest, kann Dir niemand die Frage beantworten.

Also, meine Tabellen sind alles ODBC-Tabellen, die eingebunden sind.

Also dynamische Tabellen, soweit habe ich herausgefunden, dass ich das anderst behandeln muss als statische Tabellen...

mein Codeversuch:


Public Function Nummer_auslesen() As Integer

Const conQueryName = "ein Name"


Dim db As DAO.Database

Dim rst As DAO.Recordset

Dim qry As DAO.QueryDef


Set db = CurrentDb

'Neue Abfrage erstellen

Set qry = db.CreateQueryDef(conQueryName)

'Zuerst Connect vereinbaren, dann SQL zuweisen

'sonst wird die SQL anweisung von Jet kontrolliert

qry.Connect = "ODBC;DSN=weiß nicht, was hier rein muss"


qry.SQL = "SELECT Feld0 From Tabellen_Name"

qry.ReturnsRecords = True

db.QueryDefs.Refresh


Set rst = qry.OpenRecordset()

Do While Not rst.EOF

    If (Feld1= "1100033" & Feld2 = Feld3 & Feld4 = Feld5) Then

        Nummer_auslesen = Feld0

    End If

Loop


rst.Close


End Function

leider erkennt er meine Felder nicht. Wie kann ich die Verknüpfen?

außerdem habe ich hier noch nciht mit der Abfrage gearbeitet, sondern ohne...

leider habe ich generell keine Ahnung, wie ich mit VBA auf eine Abfrage zugreifen kann...

Außerdem zu der zeitgesteuerten Ausführung: Ich hoffe Ihr habt beachtet, dass wenn mehrere User die Datenbank geöffnet haben, die zeitgesteuerte Ausführung nur ein einziges Mal läuft bzw sicher gestellt ist, denn sollten mehrere Instanzen des Timers laufen, würde unter Umständen mehrfach die Mail generiert und versendet werden. Da eine Datenbank multiuser orientiert ist, muss hier eben das ganze passend abgesichert werden.

Deshalb der Hinweis, dass eine userbasierte Steuerung für so etwas eigentlich ungeeignet ist.

Dazu kann ich nicht viel sagen, ist aber ein guter Einwand, ich sag es dem Kollegen...

liebe grüße, nora

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schau Dir an, wie ein DSN Eintrag einer verknüpften Tabelle aussieht. Beachte aber auch, dass dort ggf Username und Passwort im Klartext übermittelt werden, was ein sehr hohes Sicherheitsrisiko bedeuten, denn theoretisch kann ich als User einfach in Deinen Code rein schauen und hab somit die Zugangsdaten.

Weiterhin hast Du damit auch die Problematik, dass alle User über die gleiche Identifikation die Verbindung zur Datenbank aufbauen. Je nach Anwendungsfall sollte man hier für jeden User eine eigenständige Login / Passwort Kombination wählen und diese in den entsprechenden DSN Einstellungen für den User ausschließlich setzen.

Weiterhin sind Felder nicht einfach so vorhanden, sondern sie sind Teil Deines Recordsets. Ich empfehle Dir, schau Dir die Hilfe zu Recordset an!

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo,

so, ich habe jetzt gemerkt, dass nur die Form zeitaktuell ist, d.h. ich muss die Daten aus der Form bekommen... mein Versuch:


Public Sub form_auslesen()


Dim strFormName As String

Dim strSteuerelement As String

Dim zaehler As Integer


strFormName = "Form1"

strSteuerelement = "Feld3"


DoCmd.OpenForm (strFormName)



For zaehler = 0 To 4

    MsgBox Forms(strFormName).Controls(strSteuerelement).Properties(zaehler)



Next zaehler


DoCmd.Close acForm, strFormName


End Sub

Wenn ich jetzt:

MsgBox Forms(strFormName).Controls(zaehler).Visible

eingebe, dann zeigt er mir 4mal MsgBox:wahr an. Aber wenn ich

MsgBox Forms(strFormName).Controls(strSteuerelement).Properties(zaehler).Value

eingebe, zeigt er mir 2* msgbox:Feld3 (also den Namen) und dann 1* eine wirre Zahl (die nicht Inhalt des Feldes ist, dh in der Form nicht angezeigt wird) und 1* eine leere msgbox

könnt ihr mir da ncoh mal helfen?

vielen dank, nora

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte lies Dir doch mal die Hilfe durch!

Controls Property [Access 2003 VBA Language Reference]

Außerdem auch wieder der Hinweis: Du zeigst keine relevanten Informationen, die es einem Außenstehenden möglich machen würden, das Problem zu verstehen. Niemand hier weiß wie Deine Form und deren Controls aufgebaut ist

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich habe die hilfe durchgelesen, nur leider hat mir das nciht geholfen... weil da irgendwie nicht drin steht, wie man damit arbeiten kann...

Das steht in dem Link sehr wohl:

For example, the first code syntax below returns the number of controls located on Form1. The second references the name of a property within a control.

Link zu diesem Kommentar
Auf anderen Seiten teilen

For example, the first code syntax below returns the number of controls located on Form1.

ok, ich kann gucken, wie viele Steuerelemente meine Form hat, das kann ich auch zählen, wenn ich sie öffne...

The second references the name of a property within a control.

und die Namen von den Eigenschaften der Steuerelemente will icha uch nicht.

ich möchte gerne den Inhatl der Steuerelemente auf der Form haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...