Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Cascading ComboBox (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/3803-cascading-combobox.html)

Chris 27-08-15 14:45

Cascading ComboBox
 
1 Συνημμένο(α)
Καλησπέρα σε όλους

Θα ήθελα αν μπορείτε να με βοηθήσετε να φτιάξω κάποια comboΒoxes (πως να τα συνδέσω).
Θα ήθελα επιλέγοντας κάποια τιμή στο πρώτο comboBox, το δεύτερο να μου φέρνει τις τιμές που αντιστοιχούν στην πρώτη επιλογή και στο τρίτο τις τιμές που αντιστοιχούν στο δεύτερο.
Προσπάθησα αλλά δεν κατάφερα κάτι.
Αν μπορεί κάποιος ας μου πει πως μπορώ να το κάνω.

ΥΓ. Ανεβάζω δείγμα τις βάσης μου.

Σας ευχαριστω

kapetang 28-08-15 23:20

1 Συνημμένο(α)
Καλησπέρα

Χρήστο, δες μια πρόταση στο συνημμένο, με κώδικα.

Κάνε δοκιμές για να διαπιστωθεί αν καλύπτει όλες τις περιπτώσεις.

Φιλικά/Γιώργος

Spirosgr 29-08-15 12:43

1 Συνημμένο(α)
Καλησπέρα
Στην πιο κάτω βάση, μπορεί να δει κανείς, τον κλασσικό τρόπο,
με τον οποίο μπορούμε, να δημιουργήσουμε εξαρτημένα cbo.

Έχουμε δημιουργήσει τρείς πίνακες:
Κατηγορίες
Υποκατηγορίες
Προϊόντα

και ακόμα, δημιουργήσαμε τις μεταξύ τους σχέσεις.

Σε μια παραδειγματική φόρμα, που θα μπορούσε να είναι παραγγελιοληψία
πελατολόγιο ή ό,τι άλλο, δημιουργούμε τρία ασύνδετα cbo:
Κατηγορία
Υποκατηγορία
Προϊόν


Σε καθ' ένα από αυτά, από ιδιότητες - δεδομένα, δημιουργούμε ερώτημα (SQL statment)
Και τέλος λίγος κώδικας...
στο συμβάν, After Update του πρώτου cbo , κάνουμε Requery στο δεύτερο cbo και
στο συμβάν, After Update του δεύτερου cbo , κάνουμε Requery στο τρίτο cbo.

Μπορούμε να εισάγουμε, περισσότερα των τριών cbo, ανάλογα με τις ανάγκες μας.

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

Chris 29-08-15 15:24

1 Συνημμένο(α)
Γιώργο καλησπέρα
Σε ευχαριστώ πολύ είναι αυτό που ήθελα.

Εκεί που έχω πρόβλημα είναι όταν περνάω στο φύλλο δεδομένων πάνω από τις εγγραφές,
ενώ έχει τιμή το combo box δεν τη δείχνει (στη φόρμα)... Δες την εικόνα

Chris 29-08-15 15:27

Σπύρο καλησπέρα

Σ' ευχαριστώ και σένα για την απάντηση σου αλλά αυτό που με εξυπηρετεί
περισσότερο είναι η απάντηση του έδωσε ο Γιώργος.

Spirosgr 29-08-15 17:34

Καλησπέρα
Χρήστο, σαφώς και η απάντηση του Γιώργου, είναι προσαρμοσμένη, στο πρόβλημα που θέτεις.

Το δικό μου ποστάρισμα, δεν έχει να κάνει 100% με λύση, για την συγκεκριμένη βάση.
Περισσότερο, είναι ένας γενικός τρόπος, για να δουν κι άλλοι φίλοι,
πως γίνονται κάποια πράγματα και να τα χρησιμοποιήσουν αν υπάρξει ανάγκη.

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

kapetang 29-08-15 21:05

1 Συνημμένο(α)
Καλησπέρα

Ο συντονισμός τριών ComboBox είναι αρκετά σύνθετος και έχω τη γνώμη ότι αυτό ισχύει και για τη μέθοδο που προτείνει ο Σπύρος.

Δεν αρκεί κώδικας μόνο για το συμβάν Update.

Χρήστο έκανα κάποιες αλλαγές και νομίζω ότι η πρόταση έγινε πιο λειτουργική.

Θα ξαναδώ το θέμα και αν καταλήξω σε κάτι καλύτερο θα επανέλθω.

Φιλικά/Γιώργος

kapetang 29-08-15 23:12

1 Συνημμένο(α)
Καλησπέρα

Μια απλούστερη λύση είναι στο συνημμένο.

Εκμεταλλεύεται την πρόταση του Σπύρου και ταυτόχρονα προσθέτει κώδικα και στο συμβάν Current της φόρμας.

Υπάρχει όμως ακόμα ένα μειονέκτημα.

Στην προβολή φύλλου δεδομένων οι τιμές των πεδίων Group1, Group2 και Group3 εμφανίζονται σίγουρα μόνο στην τρέχουσα εγγραφή.

Στις άλλες εγγραφές ενδέχεται να μη εμφανίζονται επειδή οι τιμές των πεδίων δεν περιέχονται στις λίστες τιμών των combobox, όπως αυτές(λίστες) έχουν διαμορφωθεί για την τρέχουσα εγγραφή.

Φιλικά/Γιώργος

Spirosgr 31-08-15 11:56

Δείτε κι αυτό:

http://www.ms-office.gr/forum/access...imena-cbo.html

kapetang 01-09-15 10:40

1 Συνημμένο(α)
Καλημέρα

Χρήστο επανέρχομαι με μία τελική πρόταση.

Το πρόβλημα με τα εξαρτώμενα ComboBox δεν είναι τόσο στο συγχρονισμό τους, όσο στην εμφάνιση των δεδομένων.

Όταν επιλέγουμε μια τιμή στο cboIDGroup1 εκτελείται ο κώδικας της διαδικασίας cboIDGroup1_AfterUpdate και τα στοιχεία της λίστας του cboIDGroup2 φιλτράρονται και συγχρονίζονται με την επιλογή.

Επίσης, αν στη συνέχεια επιλέξουμε μία τιμή στο cboIDGroup2, θα εκτελεστεί ο κώδικας της διαδικασίας cboIDGroup2_AfterUpdate και τα στοιχεία της λίστας του cboIDGroup3 θα φιλτραριστούν και θα συγχρονιστούν με την επιλογή.

Αν τώρα μετακινηθούμε σε μία άλλη εγγραφή, τότε αν η τιμή του πεδίου IDGroup2 (ή του IDGroup3) δεν περιέχεται στη λίστα του cboIDGroup2 (ή του cboIDGroup3) δε θα εμφανιστεί.

Για την αντιμετώπιση του προβλήματος πρόσθεσα κώδικα και στο συμβάν OnCurrent της φόρμας.

Έτσι κάθε φορά που αλλάζουμε εγγραφή το cboIDGroup2 φιλτράρεται με βάση την τρέχουσα τιμή του cboIDGroup1 και το cboIDGroup3 με βάση την τρέχουσα τιμή του cboIDGroup2 .

Αυτό εξασφαλίζει η τρέχουσα εγγραφή να εμφανίζει όλες τις τιμές.

Αν η φόρμα είναι απλή (δείχνει μία εγγραφή τη φορά) τελειώσαμε.

Σε μία συνεχόμενη φόρμα ή φόρμα Split που βλέπουμε πολλές εγγραφές η τρέχουσα θα εμφανίζει όλες τις τιμές ενώ οι υπόλοιπες ενδέχεται να έχουν κενά στα πεδία cboIDGroup2 και cboIDGroup2.

Για την αντιμετώπιση του προβλήματος για κάθε ComboBox (cboIDGroup2, cboIDGroup3) πρόσθεσα ένα πλαίσιο κειμένου και τα μορφοποίησα ώστε το textbox και το αντίστοιχο ComboBox να φαίνονται σαν ένα απλό ComboBox.

Επίσης έβαλα τους κατάλληλους τύπους στα TextBox

Έτσι η εμφάνιση των τιμών γίνεται στα TextBox και τα ComboBox χρησιμοποιούνται μόνο για επιλογή στοιχείων.

Στην προβολή του φύλλου δεδομένων για να μη εμφανίζονται στήλες για τα ComboBox και τα αντίστοιχα TextBox οι στήλες των ComboBox κρύφτηκαν.

Φιλικά/Γιώργος


Η ώρα είναι 18:29.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2