Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Daniel92 am November 13, 2017, 09:20:35

Titel: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 13, 2017, 09:20:35
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 
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: PhilS am November 13, 2017, 12:03:44
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.
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Frithjiof am November 13, 2017, 12:47:22
Könnte so gehen:
SELECT Funktion.email, [Formulare]![XXXX]![TERMIN] AS TERMIN
FROM Funktion;


Frithjof
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: DF6GL am November 13, 2017, 13:04:17
Hallo,


dabei auf engl. Ausdrücke achten:

SELECT Funktion.email, [Forms]![XXXX]![TERMIN] AS TERMIN
FROM Funktion;
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Frithjiof am November 13, 2017, 13:13:14
Das ist richtig, und das Formular sollte auch geladen sein. 
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 13, 2017, 14:29:47
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.

Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: DF6GL am November 13, 2017, 15:46:15
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
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 13, 2017, 17:18:05
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

Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Beaker s.a. am November 13, 2017, 17:25:37
ZitatSet rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM Tabelle WHERE Gruppe = lngBla")
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: DF6GL am November 14, 2017, 08:54:58
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
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 14, 2017, 11:14:04
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
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: DF6GL am November 14, 2017, 11:24:24
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.
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 14, 2017, 11:53:26
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
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: MzKlMu am November 14, 2017, 12:17: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.
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 14, 2017, 12:55:16
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
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: MzKlMu am November 14, 2017, 13:14:54
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.
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: DF6GL am November 14, 2017, 13:15:30
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.
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 14, 2017, 14:08:06
Danke für eure Antworten.

Ich werden mich jetzt erstmal mit meiner Struktur auseinandersetzen und diese überarbeiten!

Beste Grüße
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 15, 2017, 14:46:08
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
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: DF6GL am November 15, 2017, 15:32:29
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.
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Frithjiof am November 15, 2017, 17:00:51
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
Titel: Re: Werte aus Abfrage und Formular ziehen
Beitrag von: Daniel92 am November 16, 2017, 09:23:04
Danke für eure Antworten!

Ich häng mich rein und schau wie ich das am besten lösen kann!

Beste Grüße
Daniel