Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 ;)

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.

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.

Gruß Hans-Jörg

Hallo,

danke für deine schnelle Antwort.

was ist Postgres?

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

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

gruß, nora

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.

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

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

-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

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

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.

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

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!

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

Hallo,

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

was für Informationen braucsht du denn? Dann kann ich die vllt auch geben.

gruß nora

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.

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.