Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Recordset mit Select

Begonnen von Bernie110, Dezember 13, 2012, 17:38:43

⏪ vorheriges - nächstes ⏩

Bernie110

Hallo Zusammen,

Ich möchte gerne unsere Schichtpläne mit access automatisieren.
Dazu habe ich folgende Tabellen


1. ) STAMM_SCHICHTPLAN.

Hier wird für jeden Mitarbeiter definiert, an welchem Tag er welche Schicht hat.
Beispiel :

LfdNR  USER_ID             Schicht _Bezeichnung  WochenTag       Schicht_Beginn
---------------------------------------------------------------------------------------------------
1         1                         Frühschicht                   Montag            07:00
2         1                         Frühschicht                   Dienstag          07:00
3          1                         Frühschicht                   Mittwoch          07:00
4          1                         Frühschicht                   Donnerstag     08:00
5          1                         Frühschicht                   Freitag             09:00
6          1                         Spätschicht                   Montag            10:00
7          1                         Spätschicht                   Dienstag          11:00
...usw
dann kommt ein neuer Mitarbeiter und eben dessen Daten

8           2                        Frühschicht                    Montag            09:00
9           2                        Frühschicht                    Dienstag          07:00
10         2                        Frühschicht                    Mittwoch          07:00
11         2                        Frühschicht                    Donnerstag      08:00

Usw


Nun hab ich hierzu auch eine Tabelle die den Schichtplan darstellen soll.

2. ) Schichtplan_User_Zeiteneinteilung      

es sind folgende Felder enthalten ..aber nur die u.g. befüllt.

LFdNR         USER_ID   Schicht_Datum         Wochentag  Team       Schicht_Bezeichnung    Schicht_Beginn
---------------------------------------------------------------------------------------------------------------------------
1                  1              03.12.2012  Montag       Team A        = leer                         = leer
2                  2              03.12.2012  Montag       Team B        = leer                         = leer


Diese Tabelle wird in einem Formular Namens SCHICHTPLAN , tabellarisch als UFO gezeigt.
Dieses Formular SCHICHTPLAN  dient dazu die Werte des UFOs  Schichtplan_User_Zeiteneinteilung zu filtern.
Hierzu gibt es 3 ungebundene Felder ( d.h. dieses Formular basiert auf keine Tabelle )-
-
1. )  Schicht_Datum
2.)   Team

und es gibt noch ein Feld mit dem Namen Schicht_Bezeichnung   

dieses Feld soll eine Aktion auslösen.

und jetzt kommts ;D

Wurde der Filter ausgelöst,  und in diesem Feld Namen Schicht_Bezeichnung   
zb. Fühschicht ausgewählt,

dann soll in der Tabelle folgendes befüllt werden :

2. ) Schichtplan_User_Zeiteneinteilung      

es sind folgende Felder enthalten ..aber nur die u.g. befüllt.

LFdNR         USER_ID   Schicht_Datum         Wochentag  Team       Schicht_Bezeichnung    Schicht_Beginn
---------------------------------------------------------------------------------------------------------------------------
1                  1              03.12.2012  Montag       Team A                Fühschicht                = leer
2                  2              03.12.2012  Montag       Team B                Fühschicht                 = leer

aber nicht nur das.           
sondern es soll mir dann auch der Schicht_Beginn aus der Tablle 1. ) STAMM_SCHICHTPLAN.
ausgelesen werden, damit es dann so aussieht :


LFdNR         USER_ID   Schicht_Datum         Wochentag  Team       Schicht_Bezeichnung    Schicht_Beginn
---------------------------------------------------------------------------------------------------------------------------
1                  1              03.12.2012  Montag       Team A                Fühschicht                07:00
2                  2              03.12.2012  Montag       Team B                Fühschicht                09:00




so jetzt dachte sich Bernie...na das ist doch einfach... per Recortset kann das Feld Frühschicht befüllt werden....
das funzt auch.
nur wie lese ich dann den 2ten schritt aus.

If Me!Schichtplan_User_Zeiteneinteilung.Form.Recordset.RecordCount > 0 Then



Zitat'---------------------------------------------
        Dim rsA As DAO.Recordset
        Set rsA = Me!Schichtplan_User_Zeiteneinteilung.Form.RecordsetClone
        Do Until rsA.EOF
        rsA.Edit
'---------------------------------------------
       

      rsA!Schicht_Bezeichnung = Me.Schicht_Bezeichnung
      rsA!Bemerkung = Me.Bemerkung_Übernehmen


On Error GoTo myFehler
    Dim strSQL As String

    Dim Schichtplan_ID As Integer

    Set db = CurrentDb
    strSQL = "SELECT a.LfdNr, a.USER_ID, a.Wochentag, a.Schicht_Bezeichnung"
    strSQL = strSQL & " FROM STAMM_SCHICHTPLAN AS a"
    strSQL = strSQL & " WHERE a.USER_ID =" & rsA!USER_ID
    strSQL = strSQL & " And a.Wochentag ='" & rsA!Wochentag & "'"
    strSQL = strSQL & " And a.Schicht_Bez =" & rsA!Schicht_Bez
    Set rs = db.OpenRecordset(strSQL)
    Schichtplan_ID = rs!LfdNr
   
    Set db = Nothing
    Set rs = Nothing
Ende:
    On Error Resume Next
    Exit Sub
myFehler:
    If Err.Number = 2113 Then
    Schichtplan_ID = 111
    End If
    Resume Ende



                Dim FilterSS As String
                    FilterSS = "[LfdNr]=" & Schichtplan_ID
                            rsA!Schicht_Beginn = DLookup("Schicht_Beginn", "STAMM_SCHICHTPLAN", FilterSS)
                            rsA!Schicht_Ende = DLookup("Schicht_Ende", "STAMM_SCHICHTPLAN", FilterSS)
                            rsA!Schicht_Pause_Anfang = DLookup("Schicht_Pause_Anfang", "STAMM_SCHICHTPLAN", FilterSS)
                            rsA!Schicht_Pause_Ende = DLookup("Schicht_Pause_Ende", "STAMM_SCHICHTPLAN", FilterSS)


       
'--------------------------------------------
        rsA.Update
        rsA.MoveNext
        Loop

        rsA.Close
       
        Set rsA = Nothing


End If
Me.Schichtplan_User_Zeiteneinteilung.Requery


habs mit diesem Code versucht.. der funktioniert natürlich nicht.
Jetzt weiss ich auch nicht, ob so etwas möglich ist.

Kann mir mal jemand einen Tipp geben ?

Danke für eure Antworten und lesen des langen ..vll auch verwirrend textes..was aber nicht wie ich mich verständlicher ausdrücken soll.

Lg Bernie

Bernie110

Hmm oder könnte man es mit Dlookup ausführen ?

etwa so.. Dlookup mit 3 Kriterien ?

ZitatIf Me!Schichtplan_User_Zeiteneinteilung.Form.Recordset.RecordCount > 0 Then



'---------------------------------------------
        Dim rs As DAO.Recordset
        Set rs = Me!Schichtplan_User_Zeiteneinteilung.Form.RecordsetClone
        Do Until rs.EOF
        rs.Edit
'---------------------------------------------
       

      rs!Schicht_Bezeichnung = Me.Schicht_Bezeichnung
      rs!Bemerkung = Me.Bemerkung_Übernehmen



If Not IsNull(rs!Schicht_Bezeichnung) Then

Dim FilterSS As String
FilterSS = "[Wochentag]like '" & rs!Wochentag & "*'" And [USER_ID] = " & rs!USER_ID And [Schicht_Bezeichnung] =" & rs!Schicht_Bezeichnung

rs!Schicht_Beginn = DLookup("Schicht_Beginn", "STAMM_SCHICHTPLAN", FilterSS)
rs!Schicht_Ende = DLookup("Schicht_Ende", "STAMM_SCHICHTPLAN", FilterSS)

End If
       
'--------------------------------------------
        rs.Update
        rs.MoveNext
        Loop

        rs.Close
       
        Set rs = Nothing


End If
Me.Schichtplan_User_Zeiteneinteilung.Requery
End Sub

Macht er aber auch nicht  :(

Jemand eine kleien Idee ?

Danke für eure Antworten
Lg bernie

DF6GL

Hallo,

Was willst Du überhaupt machen?


Vergiss mal dieses VBA-Getöns und mach Dir ein paar Gedanken zum Konzept..  ;)

Wenn "STAMM_SCHICHTPLAN" die "normale" Standard-Einteilung eines Users in die verschiedenen Schichten bedeutet und diese "Wochenschicht" in eine Tabelle "tblSchichten" überführt werden soll, in der zusätzlich die zugeordnete Woche (--> Schichtdatum) geführt werden muss und auch der Teamname festgelegt werden soll, dann könnte das so etwa vonstatten gehen:


In eine Tabelle "tblSchichten" wird per VBA und/oder SQL der Schichtblock des betroffenen Users kopiert. Zu jedem Datensatz wird das Datum für diese Schichtwoche jeweils passend berechnet und mit übertragen. Weiterhin ist die Angabe des Teamnamens an dieser Stelle möglich.



Die Schichten selber sind modifierbar, falls es mal Änderungen an der Zusammensetzung der Schichten oder Teams kommen sollte.

Bernie110

Hallo,

ersteinmal Danke, dass du dich wieder mit meinern Problemen befasst. :)

Also wenn ich das richtig verstehe, dann würdest du das eher mit einer Abfrage darstellen oder ?

Das mit der tblSchichten..also in meinem ersten Post genannt als 2. ) Schichtplan_User_Zeiteneinteilung 
Erfolgt die Berechnung und Erstellung über eine VBA Anfüge-Abfrage

Ok, wenn man die 2 Tabellen dann mit einer Abfrage zusammenfügt, dann geht das natürlich.

Aber was ich nicht verstehe ist,

ZitatDie Schichten selber sind modifierbar, falls es mal Änderungen an der Zusammensetzung der Schichten oder Teams kommen sollte.

Also wenn ich das richtig verstehe muss, dann immer in der Tabelle STAMM_Schichtplan die jeweilige Schicht angepasst werden oder ?

Genau das würde ich gerne verhindern wollen.
Ich stelle mir vor,  dass die Schicht des jeweilige Mitarbeiter individuell je Tag anpass bar ist.
Das Problem ist, es geht da wirklich nach Minuten.
Und die können Tag für Tag unterschiedlich sein.

Nur bei der Eingabe, sollte das Schichtmodell als Standart erfasst werden.

Bin ich da schon wieder auf dem Holzweg oder ist das trotzdem realisierbar ?

ist das o.g. mit Dlookup denn überhaut möglich ?
DLookup mit 3 Bedingungen ?

FilterSS = "[Wochentag]like '" & rs!Wochentag & "*'" And [USER_ID] = " & rs!USER_ID And [Schicht_Bezeichnung] =" & rs!Schicht_Bezeichnung

Danke nochmals für deine Mühe

Lg Bernie


DF6GL

#4
Hallo,

ZitatAlso wenn ich das richtig verstehe, dann würdest du das eher mit einer Abfrage darstellen oder ?
Verstehst Du falsch, von Auswahl-Abfragen hab ich nicht gesprochen...  ;)  (nur von evtl. einer Anfügeabfrage (-->SQL-String) zum Übertragen der Vorlage in die Schichten-Tabelle)


ZitatDas mit der tblSchichten..also in meinem ersten Post genannt als 2. ) Schichtplan_User_Zeiteneinteilung  
Erfolgt die Berechnung und Erstellung über eine VBA Anfüge-Abfrage

Naja, so ähnlich habe ich es ja auch gemeint.



ZitatOk, wenn man die 2 Tabellen dann mit einer Abfrage zusammenfügt, dann geht das natürlich.

In meinem Vorschlag: nix mit Selektionsabfrage, eher mit Anfügeabfrage (des Vorgabe-User-Wochenblockes aus Stamm_Schichtplan) in die Tabelle "Schichtplan_User_Zeiteneinteilung" (von mir als "tblSchichten" genannt.)


ZitatAlso wenn ich das richtig verstehe muss, dann immer in der Tabelle STAMM_Schichtplan die jeweilige Schicht angepasst werden oder ?

Nein, da nicht, außer die "Vorlage" ändert sich mal (für die nächste Zeit) dauerhaft....was ja auch vorkommen kann.

Angepaßt wird die "tblSchichten" (ähnlich Deiner "Schichtplan_User_Zeiteneinteilung"), wenn sich halt die betroffenene akt. Schicht eines Users ändert.


ZitatNur bei der Eingabe, sollte das Schichtmodell als Standart erfasst werden.

Das geschieht ja, wenn Du mit "Eingabe"  das Übertragen der Tages-Arbeitszeiten eines Users aus der Vorlage ("Stamm_Schichten") in die "tblSchichten" meinst.


ZitatIch stelle mir vor,  dass die Schicht des jeweilige Mitarbeiter individuell je Tag anpassbar ist.

Das ist so in meinem Vorschlag (sprich, in "tblSchichten" sind die täglich zu absolvierenden Arbeitszeiten eines jeden Users hinterlegt und damit auch individuell anpassbar).

Zitat
ist das o.g. mit Dlookup denn überhaut möglich ?

Zitatist das o.g. mit Dlookup denn überhaut möglich ?

Vergiss diese Konstruktion und versuch meinen Vorschlag umzusetzen.  Das einzige an VBA, bzw. Code ist das  Anlegen einer neuen Schichtwoche und Datum (für die entspr. Woche) anzugeben, oder hier vielleicht besser die Woche des bestimmten Jahres und daraus die passenden Tages-Datumswerte zu berechnen, sowie den betroffenen User für diese Schicht.








Bernie110

Mensch, jetzt hab ich es verstanden !!
Klar..alles in die Anfügeabfrage einbauen.

Ich hab dafür 2 Tabellen..reicht  ja auch eine aus...*aufnKopfschlag*
Tja manchmal verennt man sich in etwas....

Grosse Klasse Franz !!  :)

Vielen Vielen Dank.. ;)

Lg Bernie

Bernie110

Tja, jetzt hab ich mich doch etwas zu früh gefreut.

Da die 3 Schichten Spät. Früh. und Normal im Wechsel je Mitarbeiter erfolgen, tu ich mich da etwas schwer mit einer Anfügeabfrage.

Jetzt muss ich nochmal fragen, denn das wäre die einfachste Lösung.
Zitat
If Me!Schichtplan_User_Zeiteneinteilung.Form.Recordset. RecordCount > 0 Then



'---------------------------------------------
        Dim rs As DAO.Recordset
        Set rs = Me!Schichtplan_User_Zeiteneinteilung.Form.RecordsetC lone
        Do Until rs.EOF
        rs.Edit
'---------------------------------------------
       

      rs!Schicht_Bezeichnung = Me.Schicht_Bezeichnung
      rs!Bemerkung = Me.Bemerkung_Übernehmen



If Not IsNull(rs!Schicht_Bezeichnung) Then

Dim FilterSS As String
FilterSS = "[Wochentag]like '" & rs!Wochentag & "*'" And [USER_ID] = " & rs!USER_ID And [Schicht_Bezeichnung] =" & rs!Schicht_Bezeichnung
rs!Schicht_Beginn = DLookup("Schicht_Beginn", "STAMM_SCHICHTPLAN", FilterSS)
rs!Schicht_Ende = DLookup("Schicht_Ende", "STAMM_SCHICHTPLAN", FilterSS)

End If
       
'--------------------------------------------
        rs.Update
        rs.MoveNext
        Loop

        rs.Close
       
        Set rs = Nothing


End If
Me.Schichtplan_User_Zeiteneinteilung.Requery
End Sub

In meinen Augen wäre es einfacher , wenn Dlookup mit 3 Bedingungen ausgeführt werden könnte.
Ist das denn überhaupt möglich ?
Wenn ja, wie muss die Bedingung zu FilterSS richtig lauten.

Lg Bernie

DF6GL

Hallo,

was auch immer Du machen willst, der Filterstring muss so lauten in Deinem Beispiel:

FilterSS = "[Wochentag] like '" & rs!Wochentag & "*'   And [USER_ID] = " & rs!USER_ID  & " And [Schicht_Bezeichnung] ='" & rs!Schicht_Bezeichnung & "'"


wobei es völlig unklar ist, warum Du da mit Wochentagen-NAMEN(-fragmenten) und nicht mit Wochtag-ZAHLEN arbeitest...

Bernie110

Hallo Franz,

super, danke, jetzt funktioniert es so wie ich es mir vorstelle.

Zitatwobei es völlig unklar ist, warum Du da mit Wochentagen-NAMEN(-fragmenten) und nicht mit Wochtag-ZAHLEN arbeitest...

Na damit ein Montag auch ein Montag ist.
Oder wie ist das zu verstehen ?  "Wochtag-ZAHLEN "

Lg Bernie


DF6GL

Hallo,

beschäftige Dich mal mit den Datums-Datentyp, seinen möglichen Formatierungen und den damit zusammenhängenden Datums-Funktionen  (z. B. Datepart() oder auch Weekday() )