Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Xoar am Dezember 01, 2016, 15:46:08

Titel: UpdateAbfrage mit VBA Kriterium
Beitrag von: Xoar am Dezember 01, 2016, 15:46:08
Hallo Leute,
ein kurze Frage:

Ich versuche folgendes:
Private Sub btnFeiertage_Click()

'Alle Feiertage durchlaufen und jedem Mitarbeiter die 9,6 Std (außer Sonntags) gutschreiben. Vordefinierte Updateabfrage

Dim qdf As QueryDef
Dim rsFeiertag As Recordset

Set rsFeiertag = CurrentDb.OpenRecordset("tblFeiertage", dbOpenDynaset)
Set qdf = CurrentDb.QueryDefs("UpdateFeiertagsstunden") 'Hier wird die vordefinierte Updateabfrage geladen, in der VBA Parameter zugewieden werden sollen.
   
Do While Not rsFeiertag.EOF
    qdf.Parameters("[FeiertagDatum]") = rsFeiertag!DatumFeiertag
    DoCmd.OpenQuery "UpdateFeiertagsstunden"
rsFeiertag.MoveNext
Loop
rsFeiertag.Close
Set rsFeiertag = Nothing
End Sub


Also bei einer Auswahlabfrage klapp das mit dem VBA Parameter gut, geht sowas bei Updateabfragen etc nicht?
Bei Ausführung fragt er mich nach dem DatumFeiertag-Parameter.
Datumsfeld in der Tabelle ist vom Typ: Datum/Uhrzeit

Hier noch der SQL Code der Abfrage:


UPDATE tblMitarbeiter INNER JOIN (tblKalendertage INNER JOIN tblZeiterfassung ON tblKalendertage.Datumstag = tblZeiterfassung.Datumstag_F) ON tblMitarbeiter.MitarbeiterID = tblZeiterfassung.MitarbeiterID_F
SET tblZeiterfassung.Feiertagsstunden = 9.6
WHERE (((tblKalendertage.Datumstag)=[FeiertagDatum]) AND ((tblMitarbeiter.Wachabteilung) Between 1 And 3) AND ((tblKalendertage.WT)<>7));


Muss ich die Abfrage als SQL String in VBA zusammen bauen und da die Variable wechseln, oder geht das auch mit der parameterisierten Abfrage?

Grüße
Titel: Re: UpdateAbfrage mit VBA Kriterium
Beitrag von: Lachtaube am Dezember 01, 2016, 16:25:22
Du solltest die Abfrage mit qdf.Execute ausführen.

PS: Dein unformatierter Abfragetext kann kein Mensch lesen. >:(
Titel: Re: UpdateAbfrage mit VBA Kriterium
Beitrag von: Xoar am Dezember 01, 2016, 17:13:59
Hallo Lachtaube,

danke für den Tipp, war Gold wert, klappt !

Wie definierst Du unformatiert? Soll ich alle tbl... entfernen und Klammern? Also alles was nicht notwendig ist, aber von Access erzeugt wird?!

UPDATE tblMitarbeiter
INNER JOIN tblKalendertage
INNER JOIN tblZeiterfassung
ON Datumstag = Datumstag_F ON MitarbeiterID = MitarbeiterID_F
SET Feiertagsstunden = 9.6
WHERE Datumstag=[FeiertagDatum] AND Wachabteilung Between 1 And 3 AND WT<>7;