Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Werte aus Abfrage und Formular ziehen

Begonnen von Daniel92, November 13, 2017, 09:20:35

⏪ vorheriges - nächstes ⏩

Daniel92

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 

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Frithjiof

Könnte so gehen:
SELECT Funktion.email, [Formulare]![XXXX]![TERMIN] AS TERMIN
FROM Funktion;


Frithjof

DF6GL

Hallo,


dabei auf engl. Ausdrücke achten:

SELECT Funktion.email, [Forms]![XXXX]![TERMIN] AS TERMIN
FROM Funktion;

Frithjiof

Das ist richtig, und das Formular sollte auch geladen sein. 

Daniel92

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.


DF6GL

#6
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

Daniel92

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


Beaker s.a.

ZitatSet rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM Tabelle WHERE Gruppe = lngBla")
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

#9
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

Daniel92

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

DF6GL

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.

Daniel92

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

MzKlMu

#13
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.
Gruß Klaus

Daniel92

#14
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