Ανανέωση ιστοσελίδας

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #11  
Παλιά 31-07-12, 21:42
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 21-07-2010
Μηνύματα: 98
Προεπιλογή

Καλησπέρα Γιώργο
Αυτά που λές είναι σωστά είναι ένας τρόπος και αυτός.
Εγώ θέλω να αποφύγω τις πολλές καταχωρήσεις. Ένα αν βρώ τέλειωσα.
Το έχω λύσει το θέμα αρκετά καλά, κοίτα στο συνημμένο 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 γ (γ,β) (γ,β,α,β,β,γ) (α,β,γ) (α,β)


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

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


Με εκτίμηση
Δημήτρης
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb omoia_5.mdb (412,0 KB, 5 εμφανίσεις)
Απάντηση με παράθεση
  #12  
Παλιά 01-08-12, 12:52
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

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

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

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

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

Υποθέτουμε ότι ο πίνακας στον οποίο θέλουμε να προσδιορίσουμε τα όμοια έχει 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 και τις επαναλήψεις που απαιτούνται για να εξακριβώσουμε αν η τομή των συνόλων είναι κενή έχω τη γνώμη ότι θα καταλήξουμε σε μία εφαρμογή χωρίς προοπτικές (μόλις υπερβούμε κάποιο πλήθος εγγραφών θα αρχίσει να σέρνεται).

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

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


Φιλικά/Γιώργος
Απάντηση με παράθεση
  #13  
Παλιά 02-08-12, 14:47
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 21-07-2010
Μηνύματα: 98
Προεπιλογή

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

Στο θέμα μας πάθαμε το ίδιο περίπου δεν είδαμε το προφανές και εξηγώ αν έχω ένα πίκακα 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
γ) Παίρνω μοναδικά ζεύγη
Τόσο απλό!!
Στο συνημμένο έχω παράδειγμα για το τι ακριβώς εννοώ
Όσο για το σχεδιασμό μια από τις βασικές αρχές είναι δεν καταχωρούμε ποτέ δεδομένα που μπορούμε να ανακτήσουμε με ερωτήματα.

Φιλικά
Δημήτρης
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb omoia_6.mdb (228,0 KB, 8 εμφανίσεις)
Απάντηση με παράθεση
  #14  
Παλιά 02-08-12, 21:53
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb omoia_7.mdb (328,0 KB, 6 εμφανίσεις)
Απάντηση με παράθεση
  #15  
Παλιά 03-08-12, 09:33
Όνομα: Θανάσης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-02-2012
Μηνύματα: 238
Προεπιλογή

Καλημέρα

Φίλε Δημήτρη, αν και έχω πολλά χρόνια να ασχοληθώ, με επιφύλαξη, ανεβάζω αρχείο που με vba κάνει αναζήτηση ομοίων εγγράφων έως 10000 δες κώδικα ορισμός πινάκων, για να τρέξει θα πρέπει να διορθώσεις την διαδρομή .."ο κώδικας στο πλαίσιο same της 1ης φόρμας , τα λέμε
Θανάσης
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb omoia_4.mdb (444,0 KB, 4 εμφανίσεις)
Απάντηση με παράθεση
  #16  
Παλιά 03-08-12, 10:31
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 21-07-2010
Μηνύματα: 98
Προεπιλογή

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

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

Φιλικά
Δημήτρης
Απάντηση με παράθεση
  #17  
Παλιά 03-08-12, 13:55
Όνομα: Θανάσης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-02-2012
Μηνύματα: 238
Προεπιλογή

Καλημέρα
Το ξαναστέλνω με μικρή διόρθωση, ο τρόπος υπολογισμού γίνεται ως εξής
1ον αριθμητική ταξινόμιση στην 1η στήλη
2ο με βάση την στήλη αυτή βγαίνουν οι ομάδες με τους ίδιους αριθμούς
3ο με βάση τα δύο αριθμούς του εγγράφου εντοπίζονται σε ποιες ομάδες βρίσκονται
4ο εν συνεχεία βγαίνουν οι μοναδικοί αριθμοί
5ο ξανά οι μοναδικοί αριθμοί εντοπίζονται σε ποιες ομάδες είναι από την προηγούμενη σάρωση
και 6ο από τις νέες ομάδες βγαίνουν οι οριστικοί αριθμοί.
θανάσης
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb omoia_4.mdb (440,0 KB, 6 εμφανίσεις)
Απάντηση με παράθεση
  #18  
Παλιά 04-08-12, 09:59
Όνομα: Θανάσης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-02-2012
Μηνύματα: 238
Προεπιλογή

Καλημέρα
Το ξαναστέλνω διορθωμένο, η εγγραφή αναζήτησης να μην περιλαμβάνετε στη λίστα
Θανάσης
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb omoia_4.mdb (444,0 KB, 12 εμφανίσεις)
Απάντηση με παράθεση
  #19  
Παλιά 04-08-12, 20:33
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 21-07-2010
Μηνύματα: 98
Προεπιλογή

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

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_ΟΜΟΙΑ.

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

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

Με εκτίμηση
Δημήτρης
Απάντηση με παράθεση
  #20  
Παλιά 05-08-12, 08:23
Όνομα: Θανάσης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-02-2012
Μηνύματα: 238
Προεπιλογή

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


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας



Η ώρα είναι 20:46.