Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
![]() |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
![]()
Παιδιά γεια σας. Θέλω και πάλι την πολύτιμη βοήθεια σας. Έχω πχ την παρακάτω που καταχωρώ τον εργαζόμενο και την ημερομηνία εργασίας του. Θέλω αν είναι εύκολο να με βοηθήσει κάποιος έτσι ώστε αν ο εργαζόμενος έχει ξαναδουλέψει την ιδία μέρα μέσα σε 15 μέρες να μου βγάζει ένα μήνυμα. Πχ στο παράδειγμα μου ο Νικολάου έχει δουλέψει Δευτέρα 2 φορές σε 15 μέρες. Επίσης πως μπορώ τα πεδία όνομα και επώνυμο να τα βάλω αυτόματα σε ένα άλλο πεδίο μαζί Πχ ονοματεπώνυμο
|
#2
| ||||
| ||||
![]()
Καλημέρα... Νίκο, με το που θα γράφεις (είτε θα επιλέγεις) την ημερομηνία θες :
Με εκτίμηση / Νίκος Δ. Υστερολόγιο : Εφόσον δεν επιλέγεις το άτομο από κάποιο listBox ή comboBox τότε αυτό που επιδιώκεις δεν θα τρέχει σωστά. (κάποτε θα γράφεις Νίκος Γεωργίου, κάποτε Νικόλαος Γεωργίου, κάποτε θα θυμάσαι το Γεωργίου αλλά δεν θα έχεις το όνομα, κάποτε..., δηλ αγαπητέ μου αν διαχειριστείς μερικές δεκάδες ονόματα δεν υπάρχει περίπτωση να γράφεις το ίδιο πρόσωπα ΠΑΝΤΑ με το ίδιο τρόπο.... |
#3
| |||
| |||
![]()
Καλησπέρα στην παρέα Νίκο, όπως επισήμανε και ο φίλος Νίκος (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]![ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ]))); Φιλικά/Γιώργος Τελευταία επεξεργασία από το χρήστη kapetang : 09-10-10 στις 17:00. Αιτία: μικροσυμπλήρωση, διόρθωση |
#4
| |||
| |||
![]()
Καλησπέρα και πάλι Βλέποντας την σύνταξη SQL του ερωτήματος διαπίστωσα λάθος στα κριτήρια. Το διόρθωσα και έκανα τις σχετικές αλλαγές και στο αρχικό μηνυμά μου. Φιλικά/Γιώργος |
#5
| ||||
| ||||
![]()
Καλημέρα στη παρέα και από μένα! Χωρίς να έχω ετοιμάσει κάτι χειροπιαστό... Μήπως θα ήταν καλύτερα να αφαιρούνται από τους διαθέσιμους εργαζόμενους όσοι το τελευταίο δεκαπενθήμερο έχουν δουλέψει την τρέχουσα ημέρα; ![]() Δεν θα είναι λίγο σπαστικά τα προειδοποιητικά μηνύματα; Εκτός κι αν ο σκοπός τους είναι απλά ενημερωτικός και να υπάρχει η δυνατότητα επιλογής του εργαζόμενου. ...απλά ιδέες πετάω μήπως και βρεθεί η βέλτιστη λύση... ![]() Τα λέμε... ![]() Γιάννης
__________________ Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...! ![]() ----------------------------------------------- Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης. Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά! |
#6
| |||
| |||
![]()
Καλημέρα στην παρέα Γιάννη, τα μηνύματα είναι πράγματι σπαστικά και μάλλον η λύση που προτείνεις είναι πιο βολική για το χρήστη. Η πρόκληση για μένα και η ευχαρίστηση ήταν να βρω έναν τρόπο υλοποίησης του περιορισμού (ο εργαζόμενος να μη δούλεψε ίδια μέρα το τελευταίο δεκαπενθήμερο), που αρχικά μου φαινόταν δύσκολος. Να είσαι καλά και να σε βλέπουμε συχνότερα. Φιλικά/Γιώργος Τελευταία επεξεργασία από το χρήστη kapetang : 12-10-10 στις 17:00. |
#7
| |||
| |||
![]()
Καλησπέρα στην παρέα Στο αρχείο που επισυνάπτεται γίνεται μια προσπάθεια υλοποίησης μιας ιδέας του Γιάννη (nisgia) Συγκεκριμένα στην κεφαλίδα της φόρμας, που εμφανίζει τους εργαζόμενους, προστέθηκε ένα χειριστήριο επιλογής ημερομηνίας και ένα κουμπί για την εφαρμογή ή ακύρωση ενός φίλτρου. Με την εφαρμογή του φίλτρου εμφανίζονται μόνο οι διαθέσιμοι για την επιλεγείσα ημερομηνία εργαζόμενοι (αυτοί που δε δούλεψαν ίδια μέρα το τελευταίο 15/ημερο), ενώ με την ακύρωσή του όλοι. Για τη διαμόρφωση της τιμής του φίλτρου χρησιμοποιείται το βοηθητικό ερώτημα Κώδικας: SELECT DISTINCT ΕΡΓΑΖΟΜΕΝΟΙ.* FROM ΕΡΓΑΖΟΜΕΝΟΙ INNER JOIN ΕΡΓΑΣΙΑ ON ΕΡΓΑΖΟΜΕΝΟΙ.ΚΩΔ_ΕΡΓ=ΕΡΓΑΣΙΑ.ΚΩΔ_ΕΡΓΑΖΟΜΕΝΟΥ WHERE (((ΕΡΓΑΣΙΑ.[ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ]) Between DateAdd("d",-15,Forms!ΕΡΓΑΖΟΜΕΝΟΙ!DTPicker8) And DateAdd("d",-1,Forms!ΕΡΓΑΖΟΜΕΝΟΙ!DTPicker8)) And ((Format([ΗΜΕΡΟΜΗΝΙΑ ΕΓΑΣΙΑΣ],"dddd"))=Format(Forms!ΕΡΓΑΖΟΜΕΝΟΙ!DTPicker8,"dddd"))); Κώδικας: Private Sub cmdOpenReport_Click() Me.Filter = "[ΕΡΓΑΖΟΜΕΝΟΙ]![ΚΩΔ_ΕΡΓ] Not In (select [qryFilter]![ΚΩΔ_ΕΡΓ] from [qryFilter])" Me.FilterOn = Me.cmdOpenReport.Caption = "Εμφάνιση διαθέσιμων" If Me.FilterOn Then Me.cmdOpenReport.Caption = "Εμφάνιση όλων" Else Me.cmdOpenReport.Caption = "Εμφάνιση διαθέσιμων" End If End Sub Private Sub Form_Load() Me.Filter = "" End Sub Φιλικά/Γιώργος Τελευταία επεξεργασία από το χρήστη kapetang : 12-10-10 στις 17:08. Αιτία: κάποιοι χαρακτήρες αλλαξαν |
#8
| ||||
| ||||
![]()
Καλησπέρα και από μένα! Παράθεση:
"όλο λάδι-λάδι και από τηγανίτα τίποτα", ετοίμασα μια υλοποίηση της ιδέας μου η οποία νομίζω πως προσεγγίζει την ολοκλήρωση που της αξίζει. ![]() Πέρα από τα θέματα που σχετίζονται άμεσα με το ζητούμενο, μέσα από το παράδειγμα παρουσιάζονται και αρκετά άλλα ενδιαφέροντα πράγματα άλλα ως "tips and trics" και άλλα ως θέματα προς περαιτέρω ανάλυση και βελτίωση. Ένα από αυτά, το οποίο με ταλαιπωρεί συνεχώς και ακόμη μέχρι τώρα δεν έχω βρει μια αποδεκτή λύση είναι η χρήση σύνθετων πλαισίων (comboboxes) πολλαπλών στηλών σε προβολή φύλλου δεδομένων (Datasheet) η λίστα των οποίων πρέπει να ανανεώνεται κατά το χρόνο εκτέλεσης. Όσοι το έχετε επιχειρήσει, πιθανώς θα έχετε αντιμετωπίσει το πρόβλημα της εξαφάνισης ή της λανθασμένης εμφανιζόμενης τιμής τους μετά από κάθε ανανέωση της προέλευσης εγγραφών τους. Για να το αντιμετωπίσω στο παράδειγμα που επισυνάπτω, αναγκάστηκα να παρακάμψω τους κανόνες περί μοναδικότητας δεδομένων και πρόσθεσα δυο άσχετες στήλες στον πίνακα συνένωσης εργαζομένων και εργασιών έτσι ώστε η στήλη των τιμών που εμφανίζεται στα αντίστοιχα σύνθετα πλαίσια να είναι και η δεσμευμένη στήλη τους, ενώ η αποθήκευση της πραγματικής τιμής τους (κρυφή στήλη) γίνεται μέσω κώδικα στο συμβάν AfterUpdate των σύνθετων πλαισίων. Με αυτόν λοιπόν τον μπακαλίστικο τρόπο επιτυγχάνω για την ώρα τη σταθερότητα στη λειτουργία των σύνθετων πλαισίων. Είναι ένα θέμα που πιστεύω πως αξίζει να συζητηθεί και με παίδεψε αρκετά ενώ ο περιορισμός των διαθέσιμων εργαζομένων και εργασιών ήταν σχετικά εύκολος στην υλοποίησή του. Για να μην κουράσω όμως άλλο με το μπλα-μπλα, εξετάστε αν θέλετε το παράδειγμα και θέστε τα σχόλια και τις ερωτήσεις σας έτσι ώστε να ανάψει και λίγο η κουβέντα. ![]() Άλλωστε, όπως λένε και οι Κινέζοι: Μια εφαρμογή = χιλιάδες megabytes...! ![]() Θα χαρώ πολύ να σας ακούσω/διαβάσω. ![]() Καλό ξημέρωμα! Γιάννης
__________________ Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...! ![]() ----------------------------------------------- Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης. Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά! |
#9
| ||||
| ||||
![]()
Καλησπέρα σε όλους! Πριν αρχίσετε τη γκρίνια και τα παράπονα ![]() στην οποία προστέθηκαν κάποιες νέες λειτουργίες (όπως επιλογή της επιθυμητής εβδομάδας στο εβδομαδιαίο πρόγραμμα εργασιών) και βελτιώθηκαν κάποιες παλιές. Νομίζω πως εκτός των σχετικών εκθέσεων, αυτό που μένει πλέον είναι η δημιουργία μιας αυτόματης διαδικασίας δημιουργίας του εβδομαδιαίου προγράμματος εργασιών βάσει κανόνων. ![]() Τότε φίλε Γιώργο (kapetang), φαντάζομαι πως θα μπορούμε άνετα να την αποκαλέσουμε ολοκληρωμένη προσέγγιση, δεν νομίζεις; ![]() Καλό απόγευμα! Γιάννης Υ.Γ. Αν αναρωτηθείτε που βρίσκω τα εικονίδια του παραδείγματος, τα κατεβάζω (δωρεάν) από εδω. Τώρα κατά πόσο έχω το δικαίωμα να τα χρησιμοποιώ στο επίπεδο που τα χρησιμοποιώ ...είναι άλλο θέμα. ![]()
__________________ Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...! ![]() ----------------------------------------------- Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης. Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά! Τελευταία επεξεργασία από το χρήστη nisgia : 13-10-10 στις 13:21. Αιτία: Προσθήκη υστερόγραφου |
#10
| |||
| |||
![]()
Καλησπέρα σε όλους Φίλε μου Γιάννη, στην εφαρμογή σου επεκτείνοντας το αρχικό ζητούμενο ασχολείσαι με τον προγραμματισμό της υπηρεσίας σε μια στρατιωτική μονάδα. Το θέμα αυτό, όπως και κάθε εφαρμογή διαχείρισης προσωπικού και ανάθεσης εργασίας είναι κατά τη γνώμη μου από τα πολυπλοκότερα. Στην περίπτωσή μας εμπλέκονται αρκετά στοιχεία. Τελείως πρόχειρα σημειώνω τα ακόλουθα: 1. Διάρκεια της βάρδιας, το πλήθος των σκοπιών , των θαλάμων και των περιπόλων, η σύνθεση των περιπόλων, κλπ (ημερήσιες ανάγκες σε προσωπικό). 2. Αντικατάσταση σε περίπτωση κωλύματος (πχ ασθένειας). 3. Ενίσχυση υπηρεσίας σε περίπτωση έκτακτων μέτρων ασφάλειας. 4. Δυνατότητα πολλαπλής βάρδιας. 5. Υπάρχον προσωπικό. 6. Διάστημα προγραμματισμού (βδομάδα, 15/ήμερο, κλπ). 7. Κάποιοι περιορισμοί για τη συχνότητα και το είδος της υπηρεσίας για να μη πήξουν οι νέοι. Στην πληροφορική ο κανόνας είναι η διόρθωση και η αναβάθμιση των εφαρμογών. Έτσι είναι στις αρχές μου να μη θεωρώ καμία εφαρμογή ολοκληρωμένη και πάντα περιμένω το καλύτερο ![]() Η εφαρμογή σου όμως είναι πολύ καλή, έχει ιδέες, ομορφιά και χιούμορ. Γιώργος ΥΓ Και μια απορία: στο ερώτημα qryweekScedule χρησιμοποιείται σύνδεσμος LEFT JOIN και μία συνθήκη (not is null) δε θα μπορούσε να χρησιμοποιηθεί INNER JOIN χωρίς τη συνθήκη; |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
Εργαλεία Θεμάτων | |
Τρόποι εμφάνισης | |
| |
| ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
Αθροισματα στην access | q.mrk | Access - Ερωτήσεις / Απαντήσεις | 4 | 30-07-15 14:10 |
εργασία σε access | μητσάκος | Access - Ερωτήσεις / Απαντήσεις | 1 | 27-10-14 07:52 |
Εργασία Video Club Access | coldwinter18 | Access - Ερωτήσεις / Απαντήσεις | 4 | 30-05-13 11:05 |
[ Ερωτήματα ] Index στην Access | mdragon | Access - Ερωτήσεις / Απαντήσεις | 9 | 10-03-11 14:14 |
[ Συναρτήσεις ] Η Mod στην access | xristos0718 | Access - Ερωτήσεις / Απαντήσεις | 4 | 22-03-10 13:17 |
Η ώρα είναι 06:29.