Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Πίνακες ] Ομοιότητα (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1993-omoiotita.html)

dimmag 28-07-12 21:40

Ομοιότητα
 
1 Συνημμένο(α)
Καλησπέρα σε όλους.
Χρειάζομαι λίγη βοήθεια έχω κολήσει.
Έχω έναν πίνακα t_ΟΜΟΙΑ στον οποίο καταχωρώ τα όμοια κάποιων αιτημάτων που έρχονται στην υπηρεσία. Όταν το 310 είναι όμοιο με το 345 τότε καταχωρώ αυτομάτως ότι και το 345 είναι όμοιο με το 310 (περιττό βέβαια γιατί μπορεί να προκύψει από ερώτημα). Το πρόβλημά μου είναι άλλο, αν το 345 είναι όμοιο με το 27, το 27 με το 143 κ.ο.κ., τότε θέλω στο 310 να εμφανίζονται στα όμοιά του τα 345-27-143 ...κ.ο.κ όσα όμοια προκύπτουν είτε άμεσα είτε έμμεσα.
Έχω κάνει μια προσπάθεια με ερωτήματα έχω ένα πολυ καλό αποτέλεσμα όχι όμως το 100%.
Όλες οι ιδέες καλοδεχούμενες
Σας ευχαριστώ εκ των προτέρων.

Με εκτίμηση
Δημήτρης

ασχετος 29-07-12 10:41

Δημήτρη καλημέρα,

Αν κατάλαβα καλά υπάρχει ένα αίτημα, π.χ. το 345, το οποίο κάποια χρονική στιγμή γίνεται εισερχόμενο για πρώτη φορά. Άρα και κάποια άλλα αιτήματα, με κάποιους άλλους αριθμούς π.χ. το 300 ή και το 310 ή και το 321, γίνονται εισερχόμενα για πρώτη φορά.

Μετά έρχονται άλλα αιτήματα π.χ το 10 ή και το 15 ή και το 42 ή και το ..., τα οποία είναι όμοια, ας υποθέσουμε με το 345. Άρα αφού είναι όμοια με το 345, θα είναι όμοια και μεταξύ τους.

Αν ισχύουν τα παραπάνω, χρειάζεσε δύο πίνακες έναν master με τα πρώτα αιτήματα, πχ. το 345,300,310,321... και έναν πίνακα transaction που να τους συνδέει.

π.χ. tbl_omoia με κλειδί 345 και όποια άλλα πεδία θέλεις και έναν πίνακα tbl_trns_omoia με κλειδί 10 ή και το 15 ή και το 42 ή και το ... και LookupField το 345.

ελπίζω να σε βοήθησα

dimmag 29-07-12 15:07

Γειά σας!

Κώστα όλα αυτά υπάρχουν. Ο πίνακας t_ΟΜΟΙΑ έχει τις άμεσες σχέσεις. Έχω και έναν βοηθητικό πίνακα zt_ΟΜΟΙΑ όπου βάζω όλα άμεσα και έμεσα.
Το θέμα είναι τι βάζω στον zt_ΟΜΟΙΑ ώστε να καλύπτομαι 100% με όλα τα ζευγάρια ομοίων.
Έχω κάνει μια προσέγγιση αρκετά καλή με διαδοχικά ερωτήματα (προφανώς θέλει κώδικα με κάποιο Loop να καλύπτονται όλες οι περιπτώσεις) αυτό ψάχνω.
δηλαδή έχω α~β
επειδή όμως β~γ => α~γ
επειδή όμως γ~δ=>α~δ
επειδή δ~ε => α~ε ...... κοκ

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

Σ' ευχαριστώ πάντος για το ενδιαφέρον σου.

Φιλικά
Δημήτρης

dimmag 29-07-12 15:08

1 Συνημμένο(α)
Ξέχασα το συνημμένο

dimmag 30-07-12 21:49

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

Νομίζω ότι έλυσα το πρόβλημά μου, είχα ξεκινήσει με λάθος προσέγγιση.
Για όποιον τυχόν ενδιαφέρεται ανεβάζω συνημμενο.
Στη φόρμα frm_omoia_1 με την ανανέωση ενημερώνονται δύο προσωρινοί πίνακες ( μπορούν βέβαια να γίνουν και ένας). Το σύνολο ομοίων είναι στον πίνακα zt_ΟΜΟΙΑ.
Αν κάποιος ξέρει πολύ καλά από κώδικα μπορεί να το βελτιώσει πολύ.
Η φιλοσοφία είναι η εξής: έχουμε τον πίνακα
t_ΟΜΟΙΑ
ID id_omoiu
1 2
1 8
3 2
3 5
3 9
Με συνάρτηση μετατροπής σε Multivalue πεδίο νομίζω η access 2010 το έχει έτοιμο έχουμε τη
μορφή
fld1 fld2
1 2,8 συν το 1
3 2,5,9 συν το 3

στο fld2 όταν υπάρχει ένα τουλάχιστον κοινό στοιχείο το σύνολο ομοίων είναι η ένωση των fld2
πχ οι 1 και 3 έχουν κοινό το 2 και σύνολο ομοίων (1,2,8) του 1 συν (2,3,5,9) του 3 αρα κοινό σύνολο ομοίων (1,2,3,5,8,9) και αφαιρούμε τον εαυτό τους κάνουμε split και τα καταχωρούμε πίνακα ή τα κρατάμε σε ερώτημα. Εγώ επειδή δεν ξέρω τόσο καλά κώδικα πήγα δια της πλαγίου με την ίδια πάντα λογική.

Φιλικά
Δημήτρης

dimmag 30-07-12 21:57

Καλησπέρα σε όλους

Νομίζω ότι έλυσα το πρόβλημά μου, είχα ξεκινήσει με λάθος προσέγγιση.
Για όποιον τυχόν ενδιαφέρεται ανεβάζω συνημμενο.
Στη φόρμα frm_omoia_1 με την ανανέωση ενημερώνονται δύο προσωρινοί πίνακες ( μπορούν βέβαια να γίνουν και ένας). Το σύνολο ομοίων είναι στον πίνακα zt_ΟΜΟΙΑ.
Αν κάποιος ξέρει πολύ καλά από κώδικα μπορεί να το βελτιώσει πολύ.
Η φιλοσοφία είναι η εξής: έχουμε τον πίνακα
t_ΟΜΟΙΑ
ID id_omoiu
1 2
1 8
3 2
3 5
3 9
Με συνάρτηση μετατροπής σε Multivalue πεδίο νομίζω η access 2010 το έχει έτοιμο έχουμε τη
μορφή
fld1 fld2
1 2,8 συν το 1
3 2,5,9 συν το 3

στο fld2 όταν υπάρχει ένα τουλάχιστον κοινό στοιχείο το σύνολο ομοίων είναι η ένωση των fld2
πχ οι 1 και 3 έχουν κοινό το 2 και σύνολο ομοίων (1,2,8) του 1 συν (2,3,5,9) του 3 αρα κοινό σύνολο ομοίων (1,2,3,5,8,9) και αφαιρούμε τον εαυτό τους κάνουμε split και τα καταχωρούμε πίνακα ή τα κρατάμε σε ερώτημα. Εγώ επειδή δεν ξέρω τόσο καλά κώδικα πήγα δια της πλαγίου με την ίδια πάντα λογική.

Φιλικά
Δημήτρης

dimmag 31-07-12 10:00

1 Συνημμένο(α)
Ανέβασα λάθος αρχείο δυο φορές το κείμενο.
Τοσωστό είναι αυτό.

kapetang 31-07-12 10:21

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

Δημήτρη, το θέμα που άνοιξες φαίνεται ενδιαφέρον.

Επειδή όμως δεν είναι γνωστή η λογική της βάσης σου δε μπορώ να καταλάβω πλήρως τι ακριβώς αντιπροσωπεύουν τα «όμοια» και σε ποιο ερώτημα θα απαντήσουν.

Για να διευκολύνω τη συζήτηση επισυνάπτω μια απλή και γνωστή ΒΔ, που αφορά ένα σχολείο.

Αποτελείται από:

1) Τον πίνακα «ΚΑΘΗΓΗΤΕΣ» με πρωτεύον κλειδί το «ID_ΚΑΘΗΓΗΤΗ»

2) Τον πίνακα «ΜΑΘΗΤΕΣ» με πρωτεύον κλειδί το «ID_ΜΑΘΗΤΗ»

3) Τον πίνακα «ΚΑΘΗΓΗΤΕΣ_ΜΑΘΗΤΕΣ» με σύνθετο πρωτεύον κλειδί τα πεδία «ID_ΚΑΘΗΓΗΤΗ» και «ID_ΜΑΘΗΤΗ».

Επειδή ένας καθηγητής έχει πολλούς μαθητές και ένας μαθητής πολλούς καθηγητές ο πίνακας «ΚΑΘΗΓΗΤΕΣ_ΜΑΘΗΤΕΣ» είναι ένας ενδιάμεσος πίνακας για τη μετατροπή της σχέσης πολλά προς πολλά σε ένα προς πολλά.

3) Τη σύνθετη φόρμα «ΜΑΘΗΤΕΣ_ΑΝΑ_ΚΑΘΗΓΗΤΗ με την οποία μπορούμε να δούμε τους μαθητές κάθε καθηγητή και να τους διαχειριστούμε (προσθέσουμε, τροποποιήσουμε διαγράψουμε).

4) Τη σύνθετη φόρμα «ΚΑΘΗΓΗΤΕΣ_ΑΝΑ_ ΜΑΘΗΤΗ» με την οποία μπορούμε να δούμε τους καθηγητές κάθε μαθητή και να τους διαχειριστούμε (προσθέσουμε, τροποποιήσουμε διαγράψουμε).

Βλέπουμε ότι στη συγκεκριμένη βάση, χωρίς καθόλου κώδικα, μπορούμε εύκολα να απαντήσουμε στα ερωτήματα: «Ποιους έχει μαθητές ένας καθηγητής» και «ποιους έχει καθηγητές ένας μαθητής».

Στη συγκεκριμένη απλή βάση, ποιά είναι τα όμοια και σε ποιά ερωτήματα θα δώσουν απάντηση;

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

dimmag 31-07-12 12:17

Καλημέρα σε όλους

Γιώργο αν κατάλαβα καλά είσαι συνάδελφος. Είμαι ΠΕ03.
Ασχολούμαι με μια βάση για τη δουλειά της συζύγου που διαχειρίζεται κάποια ερωτήματα.

Στο θέμα μας οι ενδιάμεσοι πίνακες μας δίνουν , αν κατάλαβα καλά, μόνο τις άμεσες σχέσεις.
Εγώ θέλω άμεσες και έμμεσες
Παράδειγμα έχω μια λίστα με ερωτήσεις για ΤΕΣΤ στον πίνακα t_ΕΡΩΤΗΣΕΙΣ με ID 1,2,3,.... αυτή τη στιγμή παρατηρώ και τσεκάρω ότι 1~2 (~=μοιάζει) είχα τσεκαρισμένο ότι 2~4, 2~5 , 4~6 και 7~9, 7~11 δηλαδή ο πίνκας t_ΟΜΟΙΑ έχει δύο στήλες με στοιχεία
1-2 / 2-4 / 2-5 / 4-6 / 7-9/ 7-11
πως θα προκύψει ερώτημα ή προσωρινός πίνακας zt_ΟΜΟΙΑ με στήλες
1-(2,4,5,6) / 2-(1,4,5,6) / 4-(1,2,5,6) / 5-(1,2,4,6) / 6-(1,2,4.5) / 7-(9,11) / 9-(7,11) / 11-(7,9)
στις παρενθέσεις είναι η λίστα ομοίων του καθενός.
Οπότε αν κάνω μια τυχαία επιλογή αυτόματα δηλαδή
από τις 1,2,4,5,6 να επιλεγεί μία μόνο, όμοια από τις 7,9,11 να επιλεγεί μία μόνο

Δηλαδή όταν βρίσκω ένα όμοιο να έχω και το σύνολο των υπολοίπων ομοίων αυτόματα χωρίς άλλη αναζήτηση ή καταχώρηση δηλαδή από τους δύο πίνακες t_ΕΡΩΤΗΣΕΙΣ και t_ΟΜΟΙΑ θα προκύπτει ο zt_ΟΜΟΙΑ , οι φόρμες και όλα τα άλλα είναι δευτερεύοντα.

Ελπίζω να έγινα κατανοητός και περιμένω ευκολότερη λύση

Φιλικά
Δημήτρης

kapetang 31-07-12 16:57

Καλησπέρα

Φίλε Δημήτρη, μου είναι δύσκολο να σε παρακολουθήσω.

Ήλπιζα, με τη βάση που ανέβασα, ότι τα πράγματα θα ξεκαθάριζαν.

Κάνω μια άλλη προσπάθεια μήπως είναι αυτό που θέλεις.

Έχω μια βάση με τους ακόλουθους πίνακες:

1) Τον πίνακα «ΚΑΤΗΓΟΡΙΕΣ_ΕΡΩΤΗΣΕΩΝ» με πρωτεύον κλειδί το πεδίο «ID_ΚΑΤΗΓΟΡΙΑΣ».

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

2) Τον πίνακα «ΕΡΩΤΗΣΕΙΣ» με πρωτεύον κλειδί «ID_ΕΡΩΤΗΣΗΣ».

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

Ο πίνακας περιέχει και το ξένο κλειδί «ID_ΚΑΤΗΓΟΡΙΑΣ» με βάση το οποίο κάθε ερώτηση κατατάσσεται σε μία κατηγορία (μαθηματικά διαμερίζει το σύνολο των ερωτήσεων).

Όσες ερωτήσεις έχουν ίδιο αριθμό κατηγορίας μπορούμε να τις θεωρούμε «όμοιες».

Ας υποθέσουμε ότι έχουμε τρεις κατηγορίες (1, 2, 3) και θέλουμε σε κάποιο τεστ να κάνουμε τυχαία 5 ερωτήσεις (2 από την κατηγορία 1, 2 από την κατηγορία 2 και 1 από την κατηγορία 3).

Η απάντηση είναι εύκολη:

Με ένα ερώτημα στο πίνακα «ΕΡΩΤΗΣΕΙΣ» και κριτήριο ID_ΚΑΤΗΓΟΡΙΑΣ=1 εμφανίζουμε μόνο τις ερωτήσεις της κατηγορίας 1 («όμοιες») και επιλέγουμε τυχαία 2.

Επαναλαμβάνουμε το ίδιο για τις κατηγορίες 2 και 3.

Ελπίζω να βοήθησα

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

ΥΓ Τα μαθηματικά μου αρέσουν αλλά δεν είμαι μαθηματικός.

dimmag 31-07-12 20:42

1 Συνημμένο(α)
Καλησπέρα Γιώργο
Αυτά που λές είναι σωστά είναι ένας τρόπος και αυτός.
Εγώ θέλω να αποφύγω τις πολλές καταχωρήσεις. Ένα αν βρώ τέλειωσα.
Το έχω λύσει το θέμα αρκετά καλά, κοίτα στο συνημμένο omoia_5.

Θα προσπαθήσω να σου αναλύσω τι ακριβώς έψαχνα, αν υπάρχει, αλλά δεν το βρήκα.

Το θέμα αφορά τη μεταβατική ιδιότητα δηλαδή αν α=β , β=γ τότε α=β=γ
άμεσες σχέσεις α=β , β=γ και αντιμεταθέτωντας β=α, γ=β
έμμεσες σχέσεις α=γ

Θα σου πω τι ακριβώς ψάχνω έστω και σε παράδειγμα θα το προσαρμόσω.
Έχουμε τον πίνακα με δύο γραμμές και δύο στήλες η col2 είναι πολλαπλών τιμών
col1 colb2
row1 α (α,β)
row2 β (β,γ,δ)
row3 γ (γ,β)

που μας δίνει τις άμεσες σχέσεις και μας λέει το
row1 το α είναι ίσο με τον εαυτό του και το β δηλ σύνολο ίσων του (α,β)
row2 το β είναι ίσο με τον εαυτό του και τα γ,δ δηλ σύνολο ίσων του (β,γ,δ)
......

Εγώ θέλω έναν τρόπο (κώδικα) ώστε όταν στην col2 υπάρχει κοινό στοιχείο (εδώ το β) να συμπληρώνεται η ως εξής:
col1 col2 col3
row1 α (α,β) - (α,β,β,γ,γ,β)
row2 β (β,γ) (β,γ,δ,α,β,γ,β)
row3 γ (γ,β) (γ,β,α,β,β,γ)

ενώνει δηλαδή στην col3 τα πεδία της col2 όσων έχουν κοινό στοιχείο
μετά στην col4 διώχνω τα διπλότυπα της col3 και έχω

col1 col2 col3 col4
row1 α (α,β) (α,β,β,γ,γ,β) (α,β,γ)
row2 β (β,γ,δ) (β,γ,δ,α,β,γ,β) (α,β,γ)
row3 γ (γ,β) (γ,β,α,β,β,γ) (α,β,γ)

μετά διώχνω και τον εαυτό του και έχω την col5 που είναι το ζητούμενο

col1 col2 col3 col4 col5
row1 α (α,β) (α,β,β,γ,γ,β) (α,β,γ) (β,γ)
row2 β (β,γ,δ) (β,γ,δ,α,β (α,β,γ) (α,γ)
row3 γ (γ,β) (γ,β,α,β,β,γ) (α,β,γ) (α,β)


Κοίτα το παράδειγμα που σου επισυνάπτω κάνε προσθήκες και διαγραφές
Η φόρμα που κάνεις προσθήκες και διαγραφές παρουσιάζει μόνο τις άμεσες σχέσεις.
Στον πίνακα όμοια κάνω διπλές καταχωρήσεις-διαγραφές (κακώς οι δεύτερες προκύπτουν από ερώτημα) δηλ α=β και β=α. Το έκανα από την αρχή και μετά το άφησα.

Ελπίζω να έγινα κατανοητός.


Με εκτίμηση
Δημήτρης

kapetang 01-08-12 11:52

Δημήτρη, Καλημέρα

Παρακάτω εκφράζω κάποιες σκέψεις για τη μαθηματική προσέγγιση του θέματος.

Με βάση τις ιδιότητες τις ομοιότητας (ανακλαστική α~α, αντιμεταθετική α~β => β~α, μεταβατική α~β, β~γ =>α~γ και α~γ, β~γ => α~β) καταλήγουμε στο εξής:

Αν τα σύνολα Α και Β απαρτίζονται από όμοια στοιχεία και έχουν κοινό στοιχείο (η τομή τους δεν είναι το κενό σύνολο) τότε τα στοιχεία της ένωσης των συνόλων θα είναι όμοια.

Υποθέτουμε ότι ο πίνακας στον οποίο θέλουμε να προσδιορίσουμε τα όμοια έχει n γραμμές και μία στήλη του περιέχει την τιμή Α(i) που είναι ένα σύνολο όμοιων στοιχείων.

Συνοπτικά για να προσδιορίσουμε όλα τα όμοια θα μπορούσαμε να εφαρμόσουμε τον ακόλουθο αλγόριθμο:

Κώδικας:

1. Για i=1 έως n-1
        Για j=i+1 έως n
                Αν Α(i) τομή A(j) μη κενό σύνολο
                        Θέσε Α(i)= Α(i) ένωση Α(j) και Α(j)= με το νέο Α(i)

2. Αφού τελειώσουν οι παραπάνω βρόχοι και εφόσον υπήρξαν μη κενές τομές θα πρέπει να επαναληφθούν μέχρι σε κάποια επανάληψη οι τομές να γίνουν όλες κενές.

3. Αφαίρεση από τα σύνολα Α(i) του ανακλαστικού (ταυτοτικού) στοιχείου.

Το πλήθος των επαναλήψεων στους δύο βρόχους ισούται με τους συνδυασμούς των n ανά 2 και αυξάνει ραγδαία.

Κατά προσέγγιση είναι n^2/2 (για 100 εγγραφές είναι 5.000 και για 1000 500.000)

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

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

Φυσικά εσύ ξέρεις τις απαιτήσεις της βάσης και εσύ αποφασίζεις.


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

dimmag 02-08-12 13:47

1 Συνημμένο(α)
Καλημέρα σε όλους
Κάποτε στο πανεπιστήμιο ένας φοιτητής ρώτησε έναν καθηγητή κάτι απλό, εκείνος του απάντησε μα είναι προφανές. Ο φοιτητής τον ρώτησε γιατί είναι προφανές. Ο καθγητής σάστισε και αφού πήγε το γραφείο του ασχολήθηκε για ώρες γύρισε και απάντησε, τελικά ήταν όντως προφανές.

Στο θέμα μας πάθαμε το ίδιο περίπου δεν είδαμε το προφανές και εξηγώ αν έχω ένα πίκακα tbl
με πεδία Α και Β και έχω παράδειγμα στήλες
Α-Β
α-β
γ-β
σε ερώτημα με tbl και tbl_1 σύνδεση στο Πεδίο Β και Α.tbl, Α.tbl_1 as B θα πάρω
A-B
α-γ
άρα παίρνω με ερώτημα q_0 και συμμετρικά δηλ
Α-Β
α-β
γ-β
β-α
β-γ
άρα για να τα πάρω όλα
α) Δημιουργώ ερώτημα q_1 με q_0 και q_0_1 σύνδεση στο Πεδίο Β και Α.q_0, Α.q_0_1 as B
β) Δημιουργώ ερώτημα q_all με q_0 union all με q_1
γ) Παίρνω μοναδικά ζεύγη
Τόσο απλό!!
Στο συνημμένο έχω παράδειγμα για το τι ακριβώς εννοώ
Όσο για το σχεδιασμό μια από τις βασικές αρχές είναι δεν καταχωρούμε ποτέ δεδομένα που μπορούμε να ανακτήσουμε με ερωτήματα.

Φιλικά
Δημήτρης

kapetang 02-08-12 20:53

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

Φίλε Δημήτρη, αν ψάξεις τα μηνύματά μου στο φόρουμ θα δεις ότι σε πάρα πολλά προτρέπω τα μέλη να μη έχουν ίδια πεδία σε πολλούς πίνακες (πληκτρολογούν πολλές φορές τα ίδια στοιχεία) και να μη αποθηκεύουν τιμές που μπορούν να υπολογιστούν.

Συμφωνώ συνεπώς απόλυτα με τη φράση σου «Όσο για το σχεδιασμό μια από τις βασικές αρχές είναι δεν καταχωρούμε ποτέ δεδομένα που μπορούμε να ανακτήσουμε με ερωτήματα» και τη θεωρώ πλεονασμό.

Για να ξεκαθαρίσω κάπως τις θέσεις μου, για το θέμα της ομοιότητας που έθεσες:

1) Θα πρέπει να σχεδιάζουμε τις βάσεις δεδομένων ώστε η ομοιότητα να υλοποιείται με μία μόνο ιδιότητα την: α~χ και β~χ και γ~χ => α, β, γ όμοια.

Τέτοια παραδείγματα έδωσα στις ΒΔ που ανέβασα στα προηγούμενα μηνύματά μου:
  • Όλοι οι καθηγητές ενός μαθητή θεωρούνται όμοιοι και προσδιορίζονται εύκολα.
  • Όλοι οι μαθητές ενός καθηγητή θεωρούνται όμοιοι και προσδιορίζονται εύκολα.
  • Όλες οι ερωτήσεις που ανήκουν στην ίδια κατηγορία θεωρούνται όμοιες και προσδιορίζονται εύκολα.
2)Τα στοιχεία που υπάρχουν στη στήλη ID_ΟΜΟΙΟΥ του πίνακα t_ΟΜΟΙΑ κάπου έχουν πληκτρολογηθεί.

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

3) Τα παραπάνω εφαρμόζονται στις νέες ΒΔ που σχεδιάζουμε.

Τι θα γίνει με μία υπάρχουσα στη οποία για να βρούμε τα «όμοια» θα πρέπει να εφαρμόσουμε όλες τις ιδιότητες της ομοιότητας;

Θα πρέπει να ψάξουμε ('οπως κάνεις) για να βρούμε λύση.

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

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

Στον πίνακα t_ΟΜΟΙΑ έχω προσθέσει την εγγραφή 113-25.

Αν ανοίξουμε το ερώτημα q_ΣΥΝΟΛΟ_ΟΜΟΙΩΝ στο 7 δεν υπάρχουν όλα τα όμοια του 25 που είναι όμοιο του 113 (μεταβατική ιδιότητα).

Δυσκολεύτηκα να κατανοήσω το κείμενό σου, επειδή, σε αντίθεση με όσα ισχύουν στην access, πρώτα αναγράφεται το πεδίο και μετά το όνομα του πίνακα ή του ερωτήματος.

4) Επειδή το θέμα έχει πάρει ειδικό χαρακτήρα και εκτός από μας δεν ασχολείται κανένας άλλος, αν θέλεις να το συνεχίσουμε στείλε προσωπικό μήνυμα.

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

Thanosp 03-08-12 08:33

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

Φίλε Δημήτρη, αν και έχω πολλά χρόνια να ασχοληθώ, με επιφύλαξη, ανεβάζω αρχείο που με vba κάνει αναζήτηση ομοίων εγγράφων έως 10000 δες κώδικα ορισμός πινάκων, για να τρέξει θα πρέπει να διορθώσεις την διαδρομή .."ο κώδικας στο πλαίσιο same της 1ης φόρμας , τα λέμε
Θανάσης

dimmag 03-08-12 09:31

Καλημέρα
Φίλε Γιώργο έχεις δίκιο για το omoia_6 δεν είναι σωστό, απ' ότι φαίνεται δεν υπάρχει απλή λύση. Μόνο με Multi Value Fields είναι σίγουρο.

Φίλε Θανάση ευχαριστώ που ασχολήθηκες θα το μελετήσω.

Φιλικά
Δημήτρης

Thanosp 03-08-12 12:55

1 Συνημμένο(α)
Καλημέρα
Το ξαναστέλνω με μικρή διόρθωση, ο τρόπος υπολογισμού γίνεται ως εξής
1ον αριθμητική ταξινόμιση στην 1η στήλη
2ο με βάση την στήλη αυτή βγαίνουν οι ομάδες με τους ίδιους αριθμούς
3ο με βάση τα δύο αριθμούς του εγγράφου εντοπίζονται σε ποιες ομάδες βρίσκονται
4ο εν συνεχεία βγαίνουν οι μοναδικοί αριθμοί
5ο ξανά οι μοναδικοί αριθμοί εντοπίζονται σε ποιες ομάδες είναι από την προηγούμενη σάρωση
και 6ο από τις νέες ομάδες βγαίνουν οι οριστικοί αριθμοί.
θανάσης

Thanosp 04-08-12 08:59

1 Συνημμένο(α)
Καλημέρα
Το ξαναστέλνω διορθωμένο, η εγγραφή αναζήτησης να μην περιλαμβάνετε στη λίστα
Θανάσης

dimmag 04-08-12 19:33

Καλησπέρα
Θανάση πολύ καλό δουλευει μια χαρά. Το είχα διορθώσει αυτό με το τρέχον.
Διόρθωσα και την παύλα στο τέλος.

Const strSeparator = " - "
Dim lngLen As Long

x = x & neo(i) & strSeparator


και στο τέλος πριν από το Me.Same = x

lngLen = Len(x) - Len(strSeparator)
If lngLen > 0 Then
x = Left(x, lngLen)
End If


Οι φόρμες δεν χρειάζονται καν σύνδεση.

Είναι και γρήγορο γιατί ψάχνει το τρέχον κάθε φορά, με ένα πεδίο στον πίκανα t_AITHMATA γράφεις το νούμερο που βρήκες και η αναζήτηση γίνεται σε ένα ερώτημα και με δεξί κλικ στη κύρια φόρμα βλέπεις όλα τα όμοια. Δεν χρειάζεται καν ο πίνακας t_ΟΜΟΙΑ.

Τελικά για όλα υπάρχουν λύσεις.

Ευχαριστώπολύ για το χρόνο σου.

Με εκτίμηση
Δημήτρης

Thanosp 05-08-12 07:23

Δημήτρη,
με την σειρά μου σ'ευχαριστώ,(όντως ασχολήθηκα αρκετό χρόνο,γιατί προσπάθησα να βρω την λύση με αλγόριθμο οπισθοδρόμησης αλλά μάτην.
Καλή συνέχεια.
Θανάσης

kapetang 05-08-12 11:03

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

Χαίρομαι που βρέθηκε λύση και συγχαίρω το Θανάση που την έδωσε.

Στη ΒΔ που επισυνάπτω υπάρχει μια λύση σύμφωνα με τον αλγόριθμο που είχα περιγράψει σε προηγούμενο μήνυμα.

Επειδή δεν έχω κατανοήσει πως ακριβώς είναι σχεδιασμένη η ΒΔ του Δημήτρη, έχω συμπεριλάβει μόνο τα βασικά.

1) Τον πίνακα «t_ΟΜΟΙΑ» του οποίου αναζητούμε τα όμοια.

2) Τον πίνακα «Tsame» όπου αποθηκεύονται όλα τα όμοια.

3) Το βοηθητικό ερώτημα «QryALL» που παρέχει τους μοναδικούς αριθμούς και των δύο στηλών του πίνακα «t_ΟΜΟΙΑ».

4) Τη φόρμα «frmSame» που κάνει τους υπολογισμούς

Ο κώδικας έχει παρατηρήσεις και νομίζω είναι εύκολα κατανοητός

Για να δείξω ότι όταν οι εγγραφές του «t_ΟΜΟΙΑ» γίνουν πολλές οι υπολογισμοί καθυστερούν πρόσθεσα στη φόρμα ένα κουμπί «Δημιουργία Παραδείγματος», ώστε να μπορούμε να δημιουργούμε πίνακες «t_ΟΜΟΙΑ» με το πλήθος των εγγραφών που θέλουμε.

Στον υπολογιστή μου όταν οι εγγραφές ήταν 500 χρειάστηκαν 4 λεπτά.

Οι υπολογισμοί γίνονται πατώντας το κουμπί «Εύρεση Ομοίων».

Πατώντας το κουμπί υπολόγισα τα όμοια για τον πίνακα «t_ΟΜΟΙΑ» που υπάρχει στη βάση omoia4.mdb και συνέκρινα τον πίνακα «Tsame» με τον πίνακα «zt_ΟΜΟΙΑ».

Διαπίστωσα διαφορές, όπως φαίνεται στο ερώτημα «qryCompare».

Δε γνωρίζω αν τα στοιχεία του πίνακα «zt_ΟΜΟΙΑ» υπολογίστηκαν με τη μέθοδο του Θανάση.

Νομίζω ότι θα πρέπει να γίνει κάποιος έλεγχος.

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

kapetang 05-08-12 19:25

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

Στα προηγούμενα μηνύματα μάλλον ήμουν απαισιόδοξος για την ανεύρεση λύσης που να λύνει το πρόβλημα σε αποδεκτό χρόνο.

Η ΒΔ που επισυνάπτω αποτελεί μία βελτίωση της προηγούμενης.

Συγκεκριμένα έχει πολύ λιγότερο κώδικα και είναι πολύ ταχύτερη.

Σε μια δοκιμή με πίνακα t_ΟΜΟΙΑ 1000 εγγραφών δημιούργησε τον πίνακα Tsame με 245.000 εγγραφές σε χρόνο 80 περίπου δευτερολέπτων.

Η βελτίωση οφείλεται στο ερώτημα «qryADD» που επαναλαμβανόμενο στον κώδικα βρίσκει τα όμοια σε συνεργασία με τον πίνακα «tHLP».

Δημήτρη θα μπορούσες να κάνεις δοκιμές και με τις δύο μεθόδους (του Θανάση και αυτή εδώ) για να ελέγξεις την ορθότητα των αποτελεσμάτων.

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


Η ώρα είναι 19:55.

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


Content Relevant URLs by vBSEO 3.3.2