Εμφάνιση ενός μόνο μηνύματος
  #3  
Παλιά 09-10-10, 14:04
kapetang Ο χρήστης kapetang δεν είναι συνδεδεμένος
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα στην παρέα

Νίκο, όπως επισήμανε και ο φίλος Νίκος (Meteora) η βάση σου έχει αδυναμίες στη σχεδίαση.
Για να τις περιορίσω έκανα τα εξής:
1. Δημιούργησα ένα πίνακα «ΕΡΓΑΖΟΜΕΝΟΙ», που έχει τα στοιχεία μόνο των εργαζόμενων και έναν μοναδικό κωδικό.
2. Δημιούργησα ένα πίνακα «ΕΡΓΑΣΙΑ», με την ημερομηνία εργασίας κάθε εργαζόμενου, έναν μοναδικό κωδικό της εργασίας και έναν άλλο κωδικό που προσδιορίζει τον εργαζόμενο. Το επώνυμο και το όνομα είναι περιττά και τα διέγραψα. Περιττή είναι και η μέρα της βδομάδας, αφού μπορεί να προσδιοριστεί από την ημερομηνία. Σημειώνω ότι στο παράδειγμα που ανέβασες οι μέρες δεν αντιστοιχούσαν στις ημερομηνίες.
3. Δημιούργησα τη σχέση 1 προς πολλά ανάμεσα στον πίνακα «ΕΡΓΑΖΟΜΕΝΟΙ» και «ΕΡΓΑΣΙΑ».
4. Δημιούργησα μία φόρμα με τα στοιχεία των εργαζόμενων και τις ημερομηνίες εργασίας στην υποφόρμα που περιέχει.
Τώρα γι’ αυτά που ζητάς:
1. Όταν συμπληρώσεις την ημερομηνία στην υποφόρμα και μετακινηθείς σε άλλο πλαίσιο κειμένου, εμφανίζεται αυτόματα η μέρα που αντιστοιχεί σ’ αυτήν και ταυτόχρονα γίνεται έλεγχος μήπως ο εργαζόμενος το τελευταίο δεκαπενθήμερο (από την ημερομηνία που συμπληρώθηκε) ξαναδούλεψε, (την ίδια μέρα) για να εμφανιστεί το κατάλληλο μήνυμα: Αυτό γίνεται με τον κώδικα που ακολουθεί και το βοηθητικό ερώτημα «qryCheck».
Κώδικας:
Private Sub ΗΜΕΡΟΜΗΝΙΑ_ΕΓΑΣΙΑΣ_BeforeUpdate(Cancel As Integer)
    Dim intC As Long
    Dim strS As String
    If Not IsNull(Me.[ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ]) Then
        intC = DCount("*", "qryCheck")
        If intC > 0 Then
            strS = "Το τελευταίο δεκαπενθήμερο εργάστηκε" & vbCrLf _
             & "       '" & Format(Me![ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ], "dddd") & "'" _
             & " άλλες " & intC & " φορές"
             MsgBox strS, vbInformation
             Cancel = True
        End If
    End If

End Sub
Κώδικας:
SELECT ΕΡΓΑΣΙΑ.ΚΩΔ_ΕΡΓΑΖΟΜΕΝΟΥ, ΕΡΓΑΣΙΑ.[ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ]
FROM ΕΡΓΑΖΟΜΕΝΟΙ INNER JOIN ΕΡΓΑΣΙΑ ON ΕΡΓΑΖΟΜΕΝΟΙ.ΚΩΔ_ΕΡΓ = ΕΡΓΑΣΙΑ.ΚΩΔ_ΕΡΓΑΖΟΜΕΝΟΥ
WHERE (((ΕΡΓΑΣΙΑ.ΚΩΔ_ΕΡΓΑΖΟΜΕΝΟΥ)=[Forms]![ΕΡΓΑΖΟΜΕΝΟΙ]![ΚΩΔ_ΕΡΓ]) AND 
((ΕΡΓΑΣΙΑ.[ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ])=DateAdd("d",-7,[Forms]![ΕΡΓΑΖΟΜΕΝΟΙ]![ΕΡΓΑΣΙΑ].[Form]![ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ]))) OR 
(((ΕΡΓΑΣΙΑ.ΚΩΔ_ΕΡΓΑΖΟΜΕΝΟΥ)=[Forms]![ΕΡΓΑΖΟΜΕΝΟΙ]![ΚΩΔ_ΕΡΓ]) AND 
((ΕΡΓΑΣΙΑ.[ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ])=DateAdd("d",-14,[Forms]![ΕΡΓΑΖΟΜΕΝΟΙ]![ΕΡΓΑΣΙΑ].[Form]![ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ])));
2. Στο ερώτημα «qryErgazomeniErgasia» εμφανίζονται όλα τα στοιχεία που θέλεις.

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb NICmdb.mdb (216,0 KB, 86 εμφανίσεις)

Τελευταία επεξεργασία από το χρήστη kapetang : 09-10-10 στις 17:00. Αιτία: μικροσυμπλήρωση, διόρθωση
Απάντηση με παράθεση