_Nora_ Geschrieben 21. Februar 2011 Geschrieben 21. Februar 2011 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 Zitieren
flashpixx Geschrieben 21. Februar 2011 Geschrieben 21. Februar 2011 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. Zitieren
HJST1979 Geschrieben 21. Februar 2011 Geschrieben 21. Februar 2011 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 Zitieren
_Nora_ Geschrieben 21. Februar 2011 Autor Geschrieben 21. Februar 2011 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 gruß, nora Zitieren
flashpixx Geschrieben 21. Februar 2011 Geschrieben 21. Februar 2011 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. Zitieren
_Nora_ Geschrieben 21. Februar 2011 Autor Geschrieben 21. Februar 2011 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 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 Zitieren
_Nora_ Geschrieben 22. Februar 2011 Autor Geschrieben 22. Februar 2011 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 Zitieren
flashpixx Geschrieben 22. Februar 2011 Geschrieben 22. Februar 2011 -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 Zitieren
_Nora_ Geschrieben 23. Februar 2011 Autor Geschrieben 23. Februar 2011 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 Zitieren
flashpixx Geschrieben 23. Februar 2011 Geschrieben 23. Februar 2011 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. Zitieren
_Nora_ Geschrieben 23. Februar 2011 Autor Geschrieben 23. Februar 2011 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 Zitieren
flashpixx Geschrieben 23. Februar 2011 Geschrieben 23. Februar 2011 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! Zitieren
_Nora_ Geschrieben 23. Februar 2011 Autor Geschrieben 23. Februar 2011 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 Zitieren
flashpixx Geschrieben 23. Februar 2011 Geschrieben 23. Februar 2011 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 Zitieren
_Nora_ Geschrieben 24. Februar 2011 Autor Geschrieben 24. Februar 2011 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 Zitieren
flashpixx Geschrieben 24. Februar 2011 Geschrieben 24. Februar 2011 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. Zitieren
_Nora_ Geschrieben 24. Februar 2011 Autor Geschrieben 24. Februar 2011 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. Zitieren
flashpixx Geschrieben 24. Februar 2011 Geschrieben 24. Februar 2011 ich möchte gerne den Inhatl der Steuerelemente auf der Form haben. Du möchtest lernen, wie man eine Suchmaschine bedient: Value Property [Access 2003 VBA Language Reference] Zitieren
Empfohlene Beiträge
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.