Εμφάνιση ενός μόνο μηνύματος
  #10  
Παλιά 19-02-10, 11:14
pm4698 Ο χρήστης pm4698 δεν είναι συνδεδεμένος
Όνομα: Παντελής
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 18-02-2010
Περιοχή: Καβάλα
Μηνύματα: 54
Προεπιλογή

Λοιπόν,
Φανταστείτε ότι έχω μία εταιρία, η οποία έχει 40 πόστα εργασίας και ότι έχω 80 εργαζόμενους για παράδειγμα.
Θέλω μία φόρμα μέσω της οποίας θα συμπληρώνω κάθε μέρα τα πόστα της εταιρίας. Οι υπόλοιποι εργαζόμενοι θα φεύγουν από την εταιρία και θα επιστρέφουν την επόμενη μέρα, αλλά αυτοί που θα φεύγουν χωρίζονται σε δύο ομάδες: Μία ομάδα επιφυλακής και μία κανονική. Το σε ποια ομάδα ανήκει ο καθένας το ορίζω από ένα πεδίο του πίνακα Εργαζόμενος το οποίο ονομάζεται Κατάσταση_Επιφυλακής και το έχω ορίσει από τον πίνακα ως σύνθετο πλαίσιο με λίστα τιμών: Επιφυλακή;Κανονική.
Επίσης, δεν μπορούν όλοι οι εργαζόμενοι να είναι σε όλα τα πόστα, γιατί υπάρχουν μερικά πόστα που είναι μόνο για μερικούς. Έτσι στον πίνακα Εργαζόμενος έχω βάλει για αυτά τα πόστα (που είναι μόνο για μερικούς), τα πόστα ως checkbox. Έτσι, όταν καταχωρείς έναν εργαζόμενο μπορείς να επιλέξεις με ένα τικ, αν μπορει΄να ασχοληθεί με κάποιο από τα συγκεκριμένα πόστα.

Έχω φτιάξει μία φόρμα λοιπόν με ετικέτες για το κάθε πόστο. Δίπλα σε κάθε ετικέτα είναι ένα σύνθετο πλαίσιο από το οποίο επιλέγει κάποιος ένα Επώνυμο από την λίστα των εργαζομένων.
Υπάρχουν και δύο λίστες. Η μία λίστα είναι για αυτούς που θα βγουν έξω αλλά θα έιναι σε επιφυλακή και η άλλη για τους άλλους που δεν είναι σε επιφυλακή.

Σε κάθε σύνθετο πλαίσιο έχω βάλει κώδικα στο rowsource του στυλ:
SELECT Εργαζόμενος.Επώνυμο
FROM Εργαζόμενος
WHERE (((Εργαζόμενος.Επώνυμο) Not In (nz([Forms]![όνομα_φόρμας]![σύνθετο_πλαίσιο1]),nz([Forms]![ΥΠ_ΚΑΘ]![σύνθετο_πλαίσιο2]),
κτλ

Το ίδιο γίνεται και με το rowsource των δύο λιστών. Απλά στην μία λίστα προσθέτω τον κώδικα WHERE Εργαζόμενος.Κατάσταση_Επιφ υλακής = Επιφυλακή και στην άλλη το ίδιο αλλά αντί για Επιφυλακή βάζω το Κανονική

Αν το πόσο είναι ένα από τα συγκεκριμένα(μόνο για μερικούς) τότε συμπληρώνω στο τέλος με ένα WHERE Εργαζόμενος.πόστο1 is TRUE.

Τέλος, σε όλα τα σύνθετα πλαίσια στο after update κάνω requery όλα τα σύνθετα πλαίσια και τις λίστες.

Με αυτή την οργάνωση, στην αρχή της φόρμας έχω όλους τους εργαζόμενους σε αυτές τις λίστες - ανάλογα με το αν είναι σε επιφυλακή ή όχι.
Όταν αρχίζω να επιλέγω Επώνυμα στα σύνθετα πλαίσια, τότε αυτά τα επώνυμα φεύγουν από την λίστα στην οποία ανήκουν αλλά και από τα υπόλοιπα σύνθετα πλαίσια.
Έτσι, αποφεύγεται ο κίνδυνος επιλογής ενός εργαζομένου σε δύο πόστα αλλά και στο τέλος μένουν στην λίστα όσοι δεν έχουν ανατεθεί σε κάποιο πόστο και είμαστε έτοιμοι.

το πρόβλημά μου είναι ότι επειδή έχω πολλά σύνθετα πλαίσια στον κώδικα που βάζω στο rowsource κάθε σύνθετου πλαισίου και στις λίστες, από ένα σημείο και μετά έχω μήνυμα ότι υπερβαίνω το όριο των 1024 χαρακτήρων στο ερώτημα.

Έτσι, σκέφτηκα, για να μην αλλάξω όλο το σκεπτικό (αν είναι δύσκολο) τα σύνθετα πλαίσια που δεν χωράνε στον κώδικα λόγω υπέρβασης του ορίου, να τα χειρίζομαι με τον τρόπο που ξεκίνησα το post.

Συγνώμη αν μακρυγόρισα αλλά έπρεπε να σας θέσω όλο το σκεπτικό.

Ευχαριστώ για την υπομονή σας
Απάντηση με παράθεση