Hallo zusammen,
gibt es eine Möglichkeit Werte aus einer Abfrage und einem Formular zu ziehen?
Ich möchte Email Adressen aus einer Abfrage und Termine aus einem Formular haben.
Mit der SELECT FROM Funktion bekomme ich die gewünschten Email Adressen aus der Abfrage, nur funktioniert dann die Me! Funktion nicht mehr, mit der ich das Textfeld auf dem Formular ansprechen möchte für das gewünschte Datum.
Mit welchen Funktionen kann ich also das Formular für das Datum und die Abfrage für die Email Adressen ansprechen?
Ich hoffe auf eure Hilfe!
Beste Grüße
Daniel
Zitat von: Daniel92 am November 13, 2017, 09:20:35...nur funktioniert dann die Me! Funktion nicht mehr, mit der ich das Textfeld auf dem Formular ansprechen möchte für das gewünschte Datum.
Me bezieht sich auf die "eigene" Instanz einer Objektvariable. D.h. innerhalb eines Formular kannst du dieses mit
Me ansprechen. Außerhalb des jeweiligen Formulars kannst du dieses über die
Forms-Collection ansprechen.
Wenn dir diese generelle Info noch nicht weiterhilft, solltest du den genauen (Programm-)Kontext des Problems schildern.
Könnte so gehen:
SELECT Funktion.email, [Formulare]![XXXX]![TERMIN] AS TERMIN
FROM Funktion;
Frithjof
Hallo,
dabei auf engl. Ausdrücke achten:
SELECT Funktion.email, [Forms]![XXXX]![TERMIN] AS TERMIN
FROM Funktion;
Das ist richtig, und das Formular sollte auch geladen sein.
Erstmal vielen Dank für eure Antworten!
Ehrlich gesagt komme ich damit leider immer noch nicht zum Ziel....
Ich habe beide Funktionen einzeln, bekomme aber die Verbindung nicht hin.
Mit diesem Code kann ich wie gewünscht 3 Termine/ Besprechungen verschicken. Leider nur an die Email Adresse, die ich bei outtest.Recipients.Add("MailAdresse") hinzufüge. (Der auskommentierte Befehl)
Option Compare Database
Option Explicit
Public Function fncOutlook_Termin_Eintragen(dStart1 As Date, dEnd1 As Date, dStart2 As Date, dEnd2 As Date, dStart3 As Date, dEnd3 As Date)
Dim counter1 As Integer
Dim Start(3) As Date
Dim Ende(3) As Date
Start(0) = dStart1
Ende(0) = dEnd1
Start(1) = dStart2
Ende(1) = dEnd2
Start(2) = dStart3
Ende(2) = dEnd3
For counter1 = 0 To 2
Dim outApp As Outlook.Application
Dim outtest As Outlook.AppointmentItem
'Dim myRequiredAttendee As Outlook.Recipient
Set outApp = New Outlook.Application
Set outtest = outApp.CreateItem(olAppointmentItem)
With outtest
.MeetingStatus = olMeeting
.Start = Start(counter1)
.End = Ende(counter1)
.Body = "Bitte um Teilnahme am Schulungsblock"
.AllDayEvent = False
.ReminderMinutesBeforeStart = 60
.Subject = Me!SchulungsblockTitel
'Set myRequiredAttendee = outtest.Recipients.Add("Daniel92@xyz.de")
'myRequiredAttendee.Type = olRequired
.Save
End With
Next counter1
End Function
Private Sub btnBlockerVersenden_Click()
fncOutlook_Termin_Eintragen Me!Termin1Beginn, Me!Termin1Ende, Me!Termin2Beginn, Me!Termin2Ende, Me!Termin3Beginn, Me!Termin3Ende
End Sub
Mit dem Code kann ich eine einzelne Email an die Leute verschicken die ich in der Abfrage gefiltert habe:
Option Compare Database
Option Explicit
Public Sub TutorSenden()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim emailTo As String
Dim emailSubject As String
Dim emailText As String
Dim outApp As Outlook.Application
Dim outMail As Outlook.MailItem
Dim outStarted As Boolean
On Error Resume Next
Set outApp = GetObject("", "Outlook.Application")
On Error GoTo 0
If outApp Is Nothing Then
Set outApp = CreateObject("Outlook.Application")
outStarted = True
End If
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM qry_Tutoren")
Do Until rs.EOF
emailTo = rs.Fields("EmailAdresse").Value
emailSubject = "test"
emailText = "Test123"
Set outMail = outApp.CreateItem(olMailItem)
outMail.To = emailTo
outMail.Subject = emailSubject
outMail.Body = emailText
outMail.Send
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
If outStarted Then
outApp.Quit
End If
Set outMail = Nothing
Set outApp = Nothing
End Sub
Ich schaffe es leider nicht beide Codes so zu kombinieren, dass ich die 3 Besprechungen/Termine an die Email Adressen aus der Abfrage verschicken kann. Ich schaff es nicht mal einen Termin an die Email Adressen aus der Abfrage zu verschicken.
Hallo,
etwa so (Luftcode):
Public Function fncOutlook_Termin_Eintragen(parSubject as String, dStart1 As Date, dEnd1 As Date, dStart2 As Date, dEnd2 As Date, dStart3 As Date, dEnd3 As Date)
Dim counter1 As Integer
Dim Start(3) As Date
Dim Ende(3) As Date
Dim db as Database
Start(0) = dStart1
Ende(0) = dEnd1
Start(1) = dStart2
Ende(1) = dEnd2
Start(2) = dStart3
Ende(2) = dEnd3
For counter1 = 0 To 2
Dim outApp As Outlook.Application
Dim outtest As Outlook.AppointmentItem
'Dim myRequiredAttendee As Outlook.Recipient
Set outApp = New Outlook.Application
Set outtest = outApp.CreateItem(olAppointmentItem)
With outtest
.MeetingStatus = olMeeting
.Start = Start(counter1)
.End = Ende(counter1)
.Body = "Bitte um Teilnahme am Schulungsblock"
.AllDayEvent = False
.ReminderMinutesBeforeStart = 60
.Subject = parSubject
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM qry_Tutoren")
Do Until rs.EOF
.Recipients.Add rs!EmailAdresse
rs.MoveNext
Loop
'myRequiredAttendee.Type = olRequired
.Save
End With
Next counter1
'Alle Object-Variablen hier zerstören
Set db = Nothing
rs.Close
Set rs = Nothing
End Function
Die Abfrage "qry_Tutoren" muss die gefilterten (aktuell gewünschten) Email-Adressen liefern.
Aufruf:
fncOutlook_Termin_Eintragen Me!SchulungsblockTitel, Me!Termin1Beginn, Me!Termin1Ende, Me!Termin2Beginn, Me!Termin2Ende, Me!Termin3Beginn, Me!Termin3Ende
Ich hab mir fast einen abgebrochen und versucht ein dynamisches Array zu erstellen... die Lösung ist natürlich viel eleganter und kürzer! vielen Danke dafür!!!
Jetzt muss ich nur noch hinbekommen, dass je nach gewählter Teilnehmergruppe auch die passende Abfrage dazu gewählt wird und die Email an die richtigen Teilnehmer versendet wird. Die Auswahl der Teilnehmergruppen findet in einem Listenfeld statt, es können auch mehrere Teilnehmergruppen gleichzeitig eingeladen werden.
Mit dem Befehl
Set rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM X ")
kann ich eine bestimmte Abfrage ansprechen, nur möchte ich je nach Auswahl im Listenfeld die passende Abfrage dazu ansprechen.
Also mit Klick im Listenfeld auf 1 = Abfrage 1 aufrufen
mit Klick auf 2 = Abfrage 2 aufrufen
und mit Klick auf 1 & 2 = Abfrage 1 & 2 aufrufen
Mit welchen Befehl kann ich das machen?
Beste Grüße und nochmals vielen Dank!
Daniel
ZitatSet rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM Tabelle WHERE Gruppe = lngBla")
Hallo,
wie Ekkehard schon andeutet, braucht es dazu nicht mehrere Abfragen. Eine genügt, die die GruppenID beinhaltet und danach gefiltert wird.
Public Function fncOutlook_Termin_Eintragen(parSubject as String, parGruppe as Long, dStart1 As Date, dEnd1 As Date, dStart2 As Date, dEnd2 As Date, dStart3 As Date, dEnd3 As Date)
.
.
.
Set rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM qry_Tutoren Where GruppeID = " & parGruppeID)
.
.
fncOutlook_Termin_Eintragen Me!SchulungsblockTitel, Me!GruppeId, Me!Termin1Beginn, Me!Termin1Ende, Me!Termin2Beginn, Me!Termin2Ende, Me!Termin3Beginn, Me!Termin3Ende
Danke erstmal für eure Antworten.
Ich haben eine Abfrage erstellt und versucht diese zu Filtern, jetzt bekomme ich den Laufzeitfehler '3831'
Das mehrwertige Feld 'TeilnehmergruppenID' kann nicht in einer WHERE- oder einer HAVING- Klausel verwendet werden.
Das liegt vermutlich daran, dass ich mehrere Werte im Listenfeld auswählen kann und das auch so möchte.
Gibt es einen alternativen Weg oder hab ich ein Verständnisproblem?
Beste Grüße
Daniel
Hallo,
die Krux ist das Mehrwertfeld. (diese Einführung der Mehrwertfelder ist ein danebengegangener Versuch, Datenbankentwürfe user-freundlicher zu machen. Meistens geht der Schuss aber nach hinten los.)
Wirf das Ding in die Tonne und erstelle eine neue Tabelle , die zur vorhandenen Tabelle in 1:n-Beziehung gesetzt wird.
Anschließend kann eine Filterung auch mit ein paar Zeilen Code mit Hilfe eines (normalen) Listenfeldes im Mehrfachauswahl-Modus erfolgen.
So wie ich das verstehe liegt das am Kombifeld, ja?
Ich kann ja jetzt einfach in der tbl_Mitarbeiter das Steuerelement von Kombinationsfeld zu Listenfeld ändern, dann kann ich aber nur einen Wert wählen, also nur eine Teilnehmergruppe. Jetzt gibt es einen Code mit dem ich mehrere Werte aus dem Listenfeld wählen kann?
Beste Grüße
Daiel
Hallo,
es nutzt nix vom Kombi zum Listenfeld zu wechseln. Listenfeld und Kombi sin in ihrem Verhalten gleich.
Du brauchst noch eine weitere Tabelle zur Erstellung einer korrekten n:m Beziehung.
Mehrwertige Listen/Kombifelder sind Schrott.
Zeige mal ein Bild des Beziehungsfensters mit den relevanten Tabellen, damit man mal die Zusammenhänge sieht.
Hier ein Screenshot von meinen Beziehungen.
Muss ich in dem Fall noch 3 Tabellen erstellen um saubere n:m Beziehungen zu haben?
Also zwischen tbl_Teilnehmergruppen und den anderen 3 Tabellen?
Beste Grüße und Danke
Hallo,
den Aufbau halte ich so für grundlegend falsch. Zunächst solltest Du mal diese unsäglichen Mehrwertfelder aus den Tabellen rauswerfen, die braucht man nicht.
Dann wird eine Tabelle benötig für die Gruppen, mit einem Feld für den Gruppennamen und einem Primärschlüssel. Dann werden die Gruppen zusammengestellt mit einer Tabelle "GruppenMitarbeiter" mit einem Fremdschlüssel zur Gruppe und einem FS zum Mitarbeiter.
Auch die Tabelle mit dem Schulungsblock halte ich für überarbeitungsbedürftig. Die Termine sollten aus dem Schulungsblock als je ein Datensatz in eine extra Tabelle "SchulungsblockTermine" und und dann noch eine Tabelle die die SchulungsblockTermine mit der Teilnehmergruppe verknüpft.
Die ganze Struktur bedarf der gründlichen Überarbeitung.
Hallo,
entferne zunächst die (Gruppen)Beziehungen zu den 3 Tabellen, lösche aus den Tabellen die Mehrwertfelder und füge anstatt ein normales Zahl-Feld (Long) ein. Hier stellt sich schon die Frage, warum in allen 3 Tabellen die Gruppen in Beziehung stehen (sollen).
Das Tabellenkonzept sollte nochmal anhand der Anforderungen überdacht werden.
Danke für eure Antworten.
Ich werden mich jetzt erstmal mit meiner Struktur auseinandersetzen und diese überarbeiten!
Beste Grüße
Hallo zusammen,
ich kämpfe heute schon den ganzen Tag mit der richtigen Datenbankstruktur, komme aber einfach nicht dahinter wie ich diese aufbauen muss...
Eine Teilnehmergruppe kann "n" Mitarbeiter haben, die Beziehung ist klar!
"n" Teilnehmergruppen können an "m" Schulungsblöcken teilnehmen, da kommt jetzt das Problem! Ich habe eine "Hilfstabelle" erstellt, aber was nutzt die mir? Wenn ich eine Abfrage erstelle ist diese leer. Wie muss meine Struktur aussehen, damit ich nachher Teilnehmergruppe X,Y,Z an Schulungsblock 1 teilnehmen lassen kann, an Schulungsblock 2 aber nur Teilnehmergruppen X und Y geschult werden müssen?
Ohne Mehrfachauswahl komm ich auf keinen grünen Zweig, aber mit der Mehrfachauswahl kann ich die Mails nicht verschicken?!
Außerdem kommt danach ja noch das Problem, dass je nach Schulungsblock unterschiedlich viele Themen geschult werden und diese Themen auch nur bestimmte Teilnehmergruppen interessieren, also auch da n:m.
Ich hoffe auf eure Hilfe! Im Anhang noch ein Bild von den Beziehungen.
Und MzKIMu, was meinst du mit:
"Auch die Tabelle mit dem Schulungsblock halte ich für überarbeitungsbedürftig. Die Termine sollten aus dem Schulungsblock als je ein Datensatz in eine extra Tabelle "SchulungsblockTermine" und und dann noch eine Tabelle die die SchulungsblockTermine mit der Teilnehmergruppe verknüpft."
Die Termine gehören ja zu dem Schulungsblock, wieso sollen diese in eine extra Tabelle?
Beste Grüße
Daniel
Hallo,
Klaus hat prinzipiell Recht mit den Terminen.
Wenn es jedoch immer und ewig für jeden Schulungsblock diese 3 Termine gibt und geben wird, könnte(!) man auf eine separate Termine-Tabelle verzichten.
Wenn eine Teilnehmergruppe aus mehreren Mitarbeitern (sind das dann "Teilnehmer"?) besteht , sind das dann immer unterschiedliche Personen und werden zu jedem Block neu erfasst?
Zum Ablauf: Zunächst sind die Teilnehmergruppen mit den Mitarbeitern (Teilnehmern?) in entspr. Formularen zu erfassen.
Danach werden mit einer HFO/UFO-Konstruktion (tblSchulungsblock, tblSchulungsblockTeilnehmergruppen) die Schulungsblöcke erfasst und die oben erfassten Gruppen den Schulungsblöcken (im UFO) zugeordnet. Dafür können Kombifelder (für die Schlüsselfelder) benutzt werden.
ZitatAußerdem kommt danach ja noch das Problem, dass je nach Schulungsblock unterschiedlich viele Themen geschult werden und diese Themen auch nur bestimmte Teilnehmergruppen interessieren, also auch da n:m.
Das fehlt im Tabellenaufbau und muss eben noch eingebaut werden, auch wenn's ein paar Tabellen mehr kostet. Irgendwie muss es ja abgebildet werden.
Hallo Daniel
Zitat von: Daniel92 am November 15, 2017, 14:46:08
Ohne Mehrfachauswahl komm ich auf keinen grünen Zweig, aber mit der Mehrfachauswahl kann ich die Mails nicht verschicken?!
natürlich geht's auch mit Mehrfachauswahl
so z.B bekommst Du alle im Listenfeld ausgewählten Mailempfänger in einen String:
Sub Mehrfachauswahl_auswerten()
Dim vZeile As var
Dim sMailempfaenger As String
'für xxx die Spalte eintragen in der die Mailadresse steht (von 0 zählen).
sMailempfaenger = ""
For Each vZeile In Me.ListeMailempfaenger.ItemsSelected
sMailempfaenger = sMailempfeanger & Me.ListeMailempfaenger.Column(xxx, vZeile) & ";"
Next
End Sub
Ob das sinnvoll hängt von der Problemstellung ab.
Frithjof
Danke für eure Antworten!
Ich häng mich rein und schau wie ich das am besten lösen kann!
Beste Grüße
Daniel