![]() |
Δημιουργία Πίνακα Με Συγκεκριμένο Αριθμό Εγγραφών Έχω την εντύπωση πως το πρόβλημα που παραθέτω είναι ζόρικο. Έχω ένα πίνακα με καταχωρημένα όλα τα δυνατά μικρά ελληνικά ονόματα (ανδρικά και γυναικεία) συνόλου 1710 εγγραφών. Θέλω μέσα από μία φόρμα να επιλέγω αν θέλω ανδρικά ή γυναικεία ή και τα δύο (εύκολο, το έχω κάνει) και σε ένα άλλο πεδίο να ορίζω πόσες τυχαίες εγγραφές θέλω. Το μεγαλύτερο πρόβλημα έγκειται όταν ο επιθυμητός αριθμός είναι μεγαλύτερος από τον συνολικό αριθμό των ονομάτων γιατί δεν μπορεί να χρησιμοποιηθεί ή SELECT TOP. Για την τυχαιότητα χρησιμοποιώ την RND([OnomaID]). Λύση; (Μια παραλλαγή του προβλήματος είναι όταν θέλουμε να γεμίσουμε με τυχαίες ημερομηνίες πάλι έναν συγκεκριμένο αριθμό εγγραφών αλλά εκεί δεν χρειάζεται να διαλέξουμε εγγραφές από υπάρχον πίνακα). |
Καλησπέρα φίλε/φίλη (δεν ξέρουμε και το όνομα σου) Καλό θα ήταν να ξέρουμε σε ποιον απευθυνόμαστε. Eίναι τακτική και ένας από τους κανόνες του φόρουμ, να γράφουμε το όνομα μας. Θα σε παρακαλούσα λοιπόν να συμπληρώσεις το πεδίο όνομα προσφώνησης στο User Profile. |
Έγινε! Για το πρόβλημα καμιά ιδέα; |
Γιώργο καλησπέρα και καλωσόρισες στην παρέα μας! Έστω ότι επιλέγεις έναν αριθμό εγγραφών που είναι μεγαλύτερος από τον συνολικό αριθμό των ονομάτων. Τι πρέπει να συμβεί κατά την επιθυμία σου; Πως θέλεις να αντιδράσει η εφαρμογή σου; Φιλικά Τάσος |
Καλσπέρα! Ευχαριστώ! Εάν πχ θέλω 2000 εγγραφές και έχω 1700 μοναδικές να κάνει μία τυχαία κατανομή (επαναληπτικών ή όχι εγγραφών) σε ένα νέο πίνακα. |
1 Συνημμένο(α) Καλησπέρα Αν και τα γράφεις μυστήρια, (λόγω τίτλου;) μάλλον κατάλαβα τι θέλεις. Στην εφαρμογή, που επισυνάπτω, υπάρχει μία φόρμα με τρία κουμπιά. 1. Με κλικ στο πρώτο δημιουργούνται δύο πίνακες με γυναικεία και αντρικά ονόματα και εμφανίζονται στα τρία πτυσσόμενα σύνθετα πλαίσια ξεχωριστά και όλα μαζί. 2. Με κλικ στο δεύτερο εμφανίζονται οι κορυφαίες τιμές που θέλουμε από τον πίνκα των γυναικείων ονομάτων. Αντιμετωπίζεται και το πρόβλημα, όταν ζητούμε πραπάνω εγγραφές από αυτές που έχει ο πίνακας. Αυτό μπορεί να γίνει και με άλλους πίνακες. 3. Με κλικ στο τρίτο παίρνουμε ένα πίνακα με τυχαίες ημερομηνίες. Μία ημερομηνία θεωρείται τυχαία, όταν και τα τρία τμήματα, που την απαρτίζουν (έτος, μήνας, μέρα) είναι τυχαία. Με μια γραμμή κώδικα αντιμετωπίζεται και το πρόβλημα του αριθμού των ημερών κατά μήνα (28, 29, 30,31). Περιμένω να στείλεις τη δική σου λύση. Φιλικά/Γιώργος |
Καλησπέρα και πάλι Καθώς κοίταζα την εφαρμογή, που επισυνάπτεται στο προηγούμενο μύνημά μου, διαπίστωσα ότι στο πάνω μέρος της φόρμας τα πεδία κειμένου δεν αντιστοιχούν στις ετικέτες. Στην ετικέτα για τους άνδρες αντιστοιχεί το πεδίο κειμένου για τις γυναίκες και αντίστροφα. Για να διορθωθεί το μπέρδεμα θα πρέπει, σε προβολή σχεδίασης, να γίνει εναλλαγή της θέσης των δύο πεδίων κειμένου (numAdron, numGinekon). Φιλικά/Γιώργος |
1 Συνημμένο(α) Καλησπέρα κι από μένα! Όντως υπάρχει ένα πέπλο μυστηρίου γύρω από τα μηνύματα του ...μυστήριου Γιώργου αλλά νομίζω πως αυτό που ζητάει είναι να έχει τον αριθμό εγγραφών που θέλει ακόμη και αν τα διαθέσιμα ονόματα είναι λιγότερα από τα απαιτούμενα, απλά τα υπόλοιπα θα είναι διπλότυπα. Κάτι τέτοιο προσπαθεί να κάνει και το παράδειγμα που επισυνάπτω. Δυστυχώς αυτή τη στιγμή δεν έχω χρόνο για περισσότερες λεπτομέρειες. Δείτε το και τα λέμε αργότερα... Τα λέμε, Γιάννης. |
Καλησπέρα ξανά από μένα. Συγχωρείστε μου τις μινιμαλιστικές περιγραφές είναι εγγενής προδιαγραφή του συστήματος μου! Θα εξηγήσω λεπτομερώς ξεκινώντας από που προέρχεται η ιδέα. Πρόσφατα χρειάστηκα να γεμίσω πολύ μεγάλους πίνακες με ψευδοστοιχεία. Πχ. είχα ένα πίνακα προσώπων με 3000 εγγραφές και έπρεπε να κατασκευάσω τυχαία μικρά ονόματα, ημερομηνίες γέννησης, διευθύνσεις, e-mail κλπ. Την βρωμοδουλειά την έκανα στο Excel βρήκα και μερικά έτοιμα εργαλεία δημιουργίας τυχαίων εγγραφών αλλά ήταν φτιαγμένα για την αμερικανική πραγματικότητα (ξένα ονόματα, αριθμοί κοιν. ασφάλισης κλπ). Σκέφτηκα γιατί να μην κατασκευάσω ένα εργαλείο στην Access που χρησιμοποιώ συνέχεια για να μου λύσει και τα χέρια για την επόμενη φορά που θα χρειαστώ τέτοια εργασία. Έτσι συγκέντρωσα σε ένα πίνακα όλα τα μικρά ελληνικά ονόματα που συναντά κανείς και συνολικά ήταν 1710 εγγραφές (ανδρικά και γυναικεία). Στον πίνακα πέρα από κλειδί και όνομα υπάρχει και η αντιστοιχεία αν το όνομα είναι ανδρικό ή γυναικείο. Στην φόρμα τώρα πέρα από το φίλτρο του φύλου (ανδρικά,γυναικεία, όλα) θα πρέπει να υπάρχει και ένα πεδίο με τον επιθυμητό αριθμό εγγραφών που θα περιέχει ένας νέος πίνακας που θα δημιουργείται και θα έχει μία τυχαία κατανομή ονομάτων ακόμα και επαναληπτικών. Το πρόβλημα είναι ότι ένα select query μπορεί να επιλέξει αριθμό ονομάτων όχι μεγαλύτερο από τον διαθέσιμο. Έτσι ενώ έχω 1710 μοναδικά ονόματα αν επιθυμώ να γεμίσω αυτόματα ένα πίνακα με 4000 εγγραφές δεν γίνεται με ένα ερώτημα επιλογής. Έχοντας ρίξει μία γρήγορη ματιά στις λύσεις που προτείνετε: @kapetang Σε ότι αφορά τα ονόματα απ΄ ότι καταλαβαίνω τα δημιουργείς με βάση το Μυστήριος-α. Εγώ έχω ήδη τον πίνακα με τα ονόματα και από εκεί θέλω να επιλέγονται. Το κομμάτι με τις ημερομηνίες λειτουργεί άψογα. @nisgia To προσέγγισες όπως ήθελα αλλά κάνεις τη διάκριση μεταξύ ανδρικών και γυναικείων βάση του τελικού "ς" που σε μερικές περιπτώσεις δεν ισχύει (πχ. Άλκηστις) αλλά αυτό είναι κάτι που μπορεί να αφαιρεθεί. Επίσης βλέπω ότι έχεις βάλει ένα "κόφτη" στον επιθυμητό αριθμό εγγραφών (30 φορές τα διαθέσιμα ονόματα). Με τι κριτήρια το έκανες; Τέλος για να προσθέσουμε ένα βαθμό δυσκολίας παραπάνω τι θα γινόταν αν δίπλα σε κάθε όνομα υπήρχε μία παράμετρος με το ποσοστό της πραγματικής κατανομής του πληθυσμιακά; (πχ. το όνομα Γιώργος το έχει το 13,6% των ανδρών και θέλουμε αυτό το ποσοστό να υπάρχει και στην νέα "τυχαία" κατανομή) (που τα σκέφτομαι ε;) Ευχαριστώ πολύ για τον χρόνο σας. |
1 Συνημμένο(α) Η υλοποίηση των τυχαίων ημερομηνιών μόνο με μία μικρή μετατροπή ώστε να βολεύει για ημερομηνίες γέννησης αφού επιλέξουμε μεταξύ δύο ηλικιών (πχ. μεταξύ 22 και 27). |
Την είδα και τη βρίσκω καλή. Σχετικά με τα ονόματα, αν εμφάνιζες τους πίνακες με τα ονόματα το φύλο και τις συχνότητές τους στον πληθυσμό, ίσως κάποιος θα σου έδινε τη λύση που ακριβώς θέλεις. |
1 Συνημμένο(α) Προσπάθησα να φτιάξω κάτι που να λαμβάνει υπ' όψη τη συχνότητα εμφάνισης των ονομάτων. Για την ακρίβεια πήρα τη λύση που έδω σε ο nisgia και... έκανα κάτι που: 1) Δείχνει να δουλεύει χωρίς όριο εγγραφών 2) Λαμβάνει υπ' όψη τη συχνότητα εμφάνισης των ονομάτων 3) Είναι εξαιρετικά αργό (κακό αυτό) 4) Δεν έχει ίχνος error trapping (πολύ κακό αυτό) 5) Δεν ξεχωρίζει ανδρικα-γυναικεία ονόματα (έβαλα μόνο αντρικά με σχετικά σωστά ποσοστά) 6) Είχε πλάκα -χάρηκα με τον τρόπο που σκέφτηκα ώστε να πετύχω το (2)- ΥΓ. Το αρχείο και ο κώδικας που ανεβάζω εδώ είναι τελικά εντελώς διαφορετικά σε σχέση με τη λύση που έδωσε ο nisgia (του οποίου ο κώδικας είναι πολύ πιο σωστός -σε θέματα ποιότητας- από το δικό μου). |
Φίλε Kapetang δεν έχω την κατανομή των ονομάτων στον πληθυσμό. Ήταν απλά μια ιδέα που μου ήρθε και χαίρομαι που έδωσε έναυσμα στον schizo του οποίου κοιτάω τώρα την υλοποίηση. Έχω μόνο τον πίνακα των ονομάτων και την κατηγοριοποίηση ανά φύλο. Αν θέλετε τον ποστάρω. |
Καλημέρα Γιάννη (mistirios) ανέβασε τον πίνακα των ονομάτων, που έχεις. Θα ήταν χρήσιμος, αφού, όσοι ασχολούνται με το πρόβλημα, αναγκάζονται να δημιουργήσουν το δικό τους με πολύ λιγότερες εγγραφές. Αυτό ίσως έχει και ένα κόστος, θα χαθεί λίγο από το μυστήριό σου! Φιλικά/Γιώργος |
1 Συνημμένο(α) Συνονόματε Γιώργο μη με κάνεις Γιάννη. Ιδού ο πίνακας με τα ονόματα. |
1 Συνημμένο(α) Καλησπέρα Στη βάση δεδομένων, που επισυνάπτω, δίνω μια λύση στο πρόβλημα δημιουργίας δειγμάτων τυχαίων ονομάτων και ημερομηνιών, που έβαλε ο Γιώργος (mistirios), χρησιμοποιώντας τον πίνακα ονομάτων που ανέβασε. 1. Η πρώτη λύση που σκέφτηκα, για το δείγμα (δ) των ονομάτων, ήταν να δημιουργείται ένας τυχαίος ακέραιος, στο διάστημα 1 έως πλήθος εγγραφών (π) του πίνακα ονομάτων και στη συνέχεια να επιλέγεται η εγγραφή που είναι σ' αυτή τη θέση. Δεν την ακολούθησα επειδή είναι αργή και αφήνει έξω εγγραφές και στην περίπτωση που δ>π. Χρησιμοποίησα ένα αποθηκευμένο ερώτημα, το οποίο επιλέγει όλες τις εγγραφές του πίνακα ονομάτων και στη συνέχεια τις ταξινομεί (ανακατεύει) κατά τυχαίο τρόπο. Από αυτό το σύνολο λαμβάνονται όλες ή μέρος των εγγραφών, ανάλαγα με το μέγεθος του δείγματος. 2. Για τη δημιουργία δείγματος τυχαίων ημερομηνιών, κάθε τμήμα της (έτος, μήνας, μέρα) παράγεται τυχαία. Οι παραγόμενες ημερομηνίες είναι έγκυρες (λαμβάνεται υπόψη ο αριθμός των ημερών κάθε μήνα, ακόμα και αν το έτος είναι δίσεκτο), ώστε αν αποθηκευθούν σε ένα πεδίο Date να μη προκαλείται λάθος. 3. Για την περίπτωση, που πρέπει να λαμβάνεται υπόψη και η συχνότητα των ονομάτων (πιθανότητα), σκέφτηκα κάποια λύση (δημιουργία βοηθητικού πίνακα, όπου ο λόγος του αριθμού εμφάνισης κάποιου ονόματος θα εκφράζει τη συχνότητά του στον πληθυσμό), δεν την επεξεργάστηκα γιατί έχει κάποιες αδυναμίες. Ίσως ο Μάριος (schizo), που ασχολήθηκε με το θέμα να έχει μια καλύτερη λύση. Φιλικά/Γιώργος ΥΓ .Φίλε Γιώργο να με συγχωρείς που σε ξαναβάφτισα. Έπρεπε να είμαι πιο προσεκτικός, αφού το πρόβλημά μας σχετίζεται με ονόματα. Δεν έβαλα τις ηλικίες επειδή έχουμε και άλλες ημερομηνίες άσχετες (εισαγωγή, εξαγωγή υλικών, κλπ). Είδα τα ονόματα στον πίνακα. Φανταστικά. Ξέθαψες και τους αρχαίους. Είναι μυστήριο πως τα συγκέντρωσες. |
1 Συνημμένο(α) Καλησπέρα στη παρέα! Φίλε Γιώργο (kapetang), ευτυχώς οι υπολογιστές αντιμετωπίζουν τις ημερομηνίες ως σειριακούς αριθμούς, οπότε δεν χρειάζεται να ανησυχείς και τόσο για τα δίσεκτα και τους κουτσοφλέβαρους όταν πρόκειται για αριθμητικές πράξεις με ημερομηνίες.:happy: Με λίγα λόγια, είναι περιττό να λαμβάνεις υπόψη το έτος, τον μήνα και την ημέρα όταν το μόνο που θέλεις είναι μια τυχαία, ακέραια τιμή μέσα από ένα εύρος συνεχόμενων τιμών. Συνεπώς, μια συνάρτηση σαν την παρακάτω κάνει αρκετά καλά αυτή τη δουλειά: Κώδικας: Function RandomDate(ByVal dtmLDate As Date, _ενώ το όρισμα dtmUDate (προαιρετικό) αντιστοιχεί στη μεγαλύτερη. Tip: Αν περάσεις τη συνάρτηση Date() στο όρισμα dtmLDate, θα έχεις μια τυχαία ώρα από τα μεσάνυχτα μέχρι τώρα.:dft012: @mistirios Φίλε Γιώργο, πρώτα απ' όλα, να σε ευχαριστήσω για το πολύτιμο αρχείο που μας έδωσες! Νομίζω πως του αξίζει μια θέση στα "Χρήσιμα αρχεία". Thank's a lot! Ο "κόφτης" που λες, ήταν εκεί για να μην γίνει υπερβολικά πολύπλοκο το ερώτημα και διαμαρτυρηθεί ο μεταγλωττιστής της SQL.:pchit: Όσο για το φύλο των ονομάτων έχεις δίκιο! Ήταν πολύ απλοϊκό το Like "*ς" αλλά για τις ανάγκες των δοκιμών μου έκανε δουλειά.:laugh: Στην συνέχεια βρήκα το Like "!ιίς" για τα ανδρικά και το Not Like "!ιίς" για τα γυναικεία τα οποία δούλευαν πολύ καλά μέχρι που σήμερα είδα πως το Άδωνις καταλήγει σε "ις".:noexpression: Εσύ αλήθεια, πως αντιστοίχησες το φύλο σε κάθε όνομα;:mellow: Η σημερινή μου προσέγγιση πάντως δουλεύει με αριθμητικές τιμές για τα φύλα οπότε κοιμάμαι ήσυχος.:dft003: Εκτός αυτού, αντιστοιχίζει και μια τυχαία ημερομηνία γέννησης σε επιλεγμένο όνομα. Όσο για την συχνότητα των ονομάτων, δεν ασχολήθηκα καθόλου και το άφησα για "αύριο". Εξετάστε τη και αν βρείτε κάτι ενδιαφέρον ή κάποιο πρόβλημα, τα ξαναλέμε. Φιλικά, Γιάννης. |
Καλησπέρα στην παρέα Κάποιες σκέψεις για την περίπτωση, που στη δειγματοληψία, λάβουμε υπόψη και τη συχνότητα του ονόματος στον πληθυσμό. 1. Υποτίθεται ότι στον πίνακα με τα ονόματα (tblNames) υπάρχει στήλη (sixnotita) με τη συχνότητα (%) κάθε ονόματος. Επειδή η δειγματοληψία περιορίζεται στον πίνακα (tblNames) το άθροισμα των τιμών στη στήλη (sixnotita) είναι 100. 2. Πρέπει να δημιουργήσουμε ένα πίνακα (tblKlirotida), ο οποίος θα περιέχει όλες τις εγγραφές του (tblNames), σε αναλογία ίση με την (sixnotita), από τον οποίο θα λαμβάνεται το τυχαίο δείγμα. 3. Το πλήθος των γραμμών (κ) του (tblKlirotida) εξαρτάται από την ακρίβεια της συχνότητας. Για παράδειγμα αν εκφράζεται με δύο δεκαδικά (5,69) απαιτούνται 10.000 εγγραφές (100/0,01). Άν υπάρχει όνομα με συχνότητα 0,001, για να εκπροσωπηθεί στον (tblKlirotida) πρέπει να έχει 100.000! εγγραφές. 4. γινόμενο της (sixnotita) με το πλήθος των γραμμών (π) διά 100 (σ) , θεωρητικά είναι ακέραιος, αλλά καλό είναι να χρησιμοποιείται στρογγυλοποίηση με την Round, μας δίνει το πλήθος των επαναλήψεων κάθε ονόματος στον (tblKlirotida). 5. Αφού δημιουργηθεί ο (tblKlirotida) τον ταξινομούμε τυχαία και λαμβάνουμε το δείγμα. Στο ίδιο σκεπτικό βασίζεται και η ακόλουθη λύση. Αντί να δημιουργήσουμε τον πίνακα (tblKlirotida) , χωρίζουμε τους ακέραιους από το 1 έως π, σε τόσα διαστήματα όσες είναι οι εγγραφές του (tblNames) και έτσι ώστε κάθε διάστημα να περιέχει ένα αριθμό ακεραίων (σ), προσδιοριζόμενο σύμφωνα με την παράγραφο 4. Αυτό μπορεί να γίνει με ένα array f(i)=j , του οποίου ο δείκτης θα παίρνει τιμές από το 1 έως π, ενώ το j από 1 έως το πλήθος των γραμμών του (tblNames). Για παράδειγμα στο πρώτο διάστημα ο δείκτης θα παίρνει τιμές 1 έως σ1 και το J=1, στο δεύτερο σ1+1 έως σ1+σ2 και j=2 κλπ. Στη συνέχεια δημιουργούμε ένα τυχαίο ακέραιο από 1 έως π, έστω n, και επιλέγουμε τη γραμμή f(n) του (tblNames) για το δείγμα. Ελπίζω να μη υπάρχει καμιά πατάτα στους παραπάνω συλλογισμούς, να τους διατύπωσα κατανοητά και να βρεθεί κάποιος φίλος να τους υλοποιήσει για να φανεί αν είναι εφικτοί. Φιλικά/Γιώργος Υ.Γ Φίλε Γιάννη ευχαριστώ για τον εύκολο τρόπο, που υπέδειξες, δημιουργίας τυχαίων ημερομηνιών. Ο κουτσοβλέβαρος, αν και κουτσός, με παίδεψε πολύ, παραλίγο να γράψω κώδικα προσδιορισμού των δίσεκτων. Σε ευχαριστώ και για τον υποδειγματικό κώδικα και τα πειραχτήρια τις φατσούλες. |
Καλημέρα ξανά από μένα. Χαίρομαι που έδωσα έναυσμα για σκέψη και δημιουργικότητα. Δυστυχώς είμαι πολύ πηγμένος τελευταία και δεν βρίσκω χρόνο να εμβαθύνω στις λύσεις σας. Πάντως η αρχική λύση από τον schizo δεν αναπαράγει σωστά τις συχνότητες στο νέο τυχαίο δείγμα. Όσο για τον πίνακα με τα ονόματα, τα μάζεψα από διάφορες λίστες στο δίκτυο, και αφού αφαίρεσα διπλοεγγραφές ή άλλα περιττά πέρασα το φύλο με το χέρι: στο excel για μεγαλύτερη ταχύτητα όπου το όνομα ήταν ανδρικό έβαζα δίπλα "1" και στα γυναικεία "2". Δεν ήταν δουλειά ευχάριστη αλλά δεν πήρε και πάνω από τρεις ώρες μαζεμένες. Μετα αντικατέστησα ομαδικά το 1 με ΑΝΔΡΑΣ και το 2 με ΓΥΝΑΙΚΑ. Αρχικός μου σκοπός είναι να φτιάξω μια εφαρμογή παραγωγης τυχαίων στοιχείων (ονομάτων, ημερομηνιών) που μας απασχολεί ήδη, αλλά και επαγγελμάτων, πόλεων, τηλεφώνων κλπ. Παράλληλα μαζεύω στοιχεία και φτιάχνω τις αντίστοιχες λίστες από όπου θα επιλέγονται τυχαία δείγματα. |
Συνονόματε Καλημέρα Ξαναδές τη λίστα των ονομάτων, έχω την εντύπωση ότι παριέχει κάποιες διπλοεγγραφές, αν θυμάμαι καλά περίπου 15. |
2 Συνημμένο(α) Γιώργο (mistirios), Είδα την επισήμανσή σου και... στενοχωρήθηκα. Ξανακοίταξα λοιπόν τον κώδικά μου, και βεβαιώθηκα ότι αλγοριθμικά είναι σωστός. Το πρόβλημα που αναφέρεις οφείλεται στο ότι το άθροισμα των ποσοστών του πίνακα από τον οποίο παίρνω τα ονόματα δεν κάνει 100%. Ανεβάζω λοιπόν ξανά τη λύση που είχα δώσει, με πίνακα που τα ποσοστά εμφάνισης των ονομάτων αθροίζονται στο 100%, ελαφρώς βελτιωμένη και με αρκετά χαρακτηριστικά (που έφτιαξα για να ελέγξω την ορθότητα του αποτελέσματος). Θα δεις τώρα ότι σε μεγάλα δείγματα (π.χ. 1000), τα ονόματα αναπαράγονται με σωστές συχνότητες. Μάλλον είναι λοιπόν ώρα να εξηγήσω το πως δουλεύει η κατανομή. Έχουμε και λέμε: Σε κάθε όνομα αντιστοιχεί ένα ποσοστό εμφάνισης στον πληθυσμό, δηλαδή ένας πραγματικός αριθμός από το 0 μέχρι το 1 (π.χ. ποσοστό 0,12 = 12%). Ο κώδικας λοιπόν: 1) επιλέγει τυχαία μια εγγραφή 2) παράγει έναν τυχαίο αριθμό από το 0 μέχρι το 1 -με την rnd- (π.χ. τυχαίος αριθμός 0,05) 3) συγκρίνει το ποσοστό εμφάνισης της επιλεγμένης εγγραφής με τον τυχαίο αριθμό και... 4) αν το ποσοστό αυτό είναι μεγαλύτερο από τον τυχαίο αριθμό, τότε προσθέτει την εγγραφή, αλλιώς ξαναπάει στο βήμα 1 Η διαδικασία επαναλαμβάνεται μέχρι να συγκεντρωθρί ο απαιτούμενος αριθμός εγγραφών. Το παραπάνω (πιστεύω) βγάζει σωστά αποτελέσματα εξ' αιτίας του βήματος 3. Όσο δηλαδή πιο μεγάλο είναι ένα ποσοστό, τόσο περισσότερες πιθανότητες έχει να είναι μεγαλύτερο από έναν τυχαίο αριθμό, άρα και να προστεθεί στο νέο πίνακα. Γιώργο (kapetang), Το σκεπτικό σου για την κατανομή, νομίζω πως είναι ολόσωστο. Όπως είπες όμως κι εσύ, χρειάζεται να δημιουργήσει, έστω και προσωρινά, μια τεράστια λίστα για να επιλέξει εγγραφές μέσα από αυτή. Επίσης, έχεις δίκιο για τη λίστα με τα ονόματα. Παρατήρησα κι εγώ τις διπλοεγγραφές. Είδα ακόμα κάποια μικρολαθάκια (π.χ. κάποια ονόματα όπως το "Άδωνις" δεν είχαν τόνο, 1-2 είχαν καταχωρηθεί σε λάθος φύλο κλπ). Την ανεβάζω ξανά με τις διορθώσεις (μπορεί βέβαια να έχει και άλλα λάθη). Όπως και να 'χει πάντως, η λίστα είναι εξαιρετική. Γιώργο (mistirios), -υποθέτω και εκ μέρους πολλών άλλων- ευχαριστούμε. ΥΓ. Όταν προσπαθώ να δημιουργήσω πίνακα ονομάτων με πάρα πολλές εγγραφές (π.χ. 10.000), το progress bar που έχω φτιάξει, μπορεί να κολλήσει (στο repaint που κάνει). Έχει κανείς καμμιά ιδέα γιατί συμβαίνει αυτό, αν και πώς μπορώ να το αποφύγω; |
1 Συνημμένο(α) Καλησπέρα στη παρέα! Φίλε Γιώργο (mistirios), ο σκοπός σου μου φαίνεται πολύ καλός και όπως βλέπεις έχεις δίπλα σου αρκετούς φίλους με διάθεση για βοήθεια. Προσωπικά σε θαυμάζω για το κουράγιο σου στη συλλογή των δεδομένων και ειδικά για την χειροκίνητη εισαγωγή του φύλου ονομάτων. :shock2: Να ξέρεις πάντως πως τα κριτήρια LIKE "!ιίς" και NOT LIKE "!ιίς" για τους άνδρες και τις γυναίκες αντίστοιχα, δουλεύουν τέλεια εκτός της περίπτωσης των ανδρικών ονομάτων που καταλήγουν σε "ιίς". (σπάνιες πιστεύω περιπτώσεις... :huh:) Στο θέμα των συχνοτήτων τώρα... Το δικό μου σκεπτικό από την αρχή ήταν πολύ κοντά στο σκεπτικό του Γιώργου (kapetang) όμως εκείνο που με φόβιζε δεν ήταν ο τεράστιος κέρσορας των απαιτούμενων εγγραφών αλλά οι πολλές επαναλήψεις (Loops) διότι απαιτείται ξεχωριστή επεξεργασία για το κάθε διαθέσιμο όνομα του επιλεγμένου φύλου. Φυσικά στο απλοϊκό παράδειγμα που επισυνάπτω χρησιμοποιώ πολύ λίγα ονόματα (8 και μόνο ανδρικά) αλλά αναρωτιέμαι πως θα τα πάει με 800+ ή τα 1710;:worry: (1695 για την ακρίβεια διότι τα 15 είναι διπλά :015:) Η τεχνική που ακολούθησα χρησιμοποιεί έναν βοηθητικό πίνακα με 100.000 ...μηδενικά! Από αυτόν "τραβάω" n εγγραφές και μέσω εξωτερικής ένωσης, με ένα ερώτημα επιλογής που τρέχει μια φορά για κάθε όνομα ξεχωριστά, επιλέγω το κάθε όνομα για n φορές. Τέλος, επιλέγω με έναν όρο TOP PERCENT από το παραπάνω αποτέλεσμα τον αριθμό των εγγραφών που προκύπτει από τη σχέση n*(συχνότητα ονόματος) και τις προσαρτώ σε έναν πίνακα ονόματι tblSamble. Όπου n ο συνολικός αριθμός του τελικού δείγματος. Παράδειγμα: Δείγμα με 1000 ονόματα. Αν για παράδειγμα το όνομα Γιώργος έχει συχνότητα 20% επιλέγουμε το "Γιώργος" 1000 φορές και από αυτές επιλέγουμε το 20% (200) και τις προσαρτούμε στον πίνακα δείγματος συνεχίζοντας την ίδια διαδικασία με όλα τα διαθέσιμα ονόματα ξεχωριστά. Αυτά με τη θεωρία. Τα υπόλοιπα στο συνημμένο αρχείο.:thumbs-up: OffTopic: @kapetang Να' σαι καλά φίλε Γιώργο! Η ευχαρίστηση δική μου! Όσο για τις ημερομηνίες, καλύτερα να τις αντιμετωπίζουμε ως έχουν: Ως σειριακούς αριθμούς. Όταν ξεφεύγεις απ' την επαναληπτικότητα του ημερολογίου, όχι μόνο οι συναρτήσεις, αλλά ακόμη και η ίδια σου η κοσμοθεωρία βελτιώνεται!:icon_alien: @schizo Φίλε Μάριε, μην στενοχωριέσαι ποτέ με τις παρατηρήσεις. Ακόμη και οι άδικες, αν δεν είναι κακόβουλες, σου βγαίνουν πάντα σε καλό.:thumbup1: Να 'στε όλοι καλά και σας ευχαριστώ που επιμένετε να "καίγεστε" στο ms-office.gr καλοκαιριάτικα! :013: Γιάννης Υ.Γ. Όσον αφορά τις ημερομηνίες, θα ήθελα να πως πως σε κάποιο κομμάτι της "SelectRandomNames" του "RandomNames2" φάνηκα και εγώ αρκετά φλύαρος με τις παρακάτω εκφρασεις: Κώδικας: ...η πολύ χρήσιμη συνάρτηση DateAdd(). Με την DateAdd() λοιπόν, οι παραπάνω εκφράσεις γίνονται: Κώδικας: ... |
Καλημέρα στην παρέα Για τη λύση του φίλου Μάριου, που κοίταξα, σημειώνω τα εξής: 1. Το πρόβλημα σε μεγάλες τιμές του δείγματος οφείλεται στη δήλωση κάποιων μεταβλητών. Οι i και intAsked να δηλωθούν Long και αντί της Cint() να χρησιμοποιηθεί η Clng(). 2. Ο αλγόριθμος μου φαίνεται λογικός, αλλά όταν ζήτησα δείγμα 50.000 ονομάτων, έβγαλε περίεργα αποτελέσματα. Πάντως την ιδέα τη βρίσκω πολύ έξυπνη, ίσως ομως έχει κάποιο πρόβλημα που δε γίνεται εύκολα αντιληπτό. 3. Η ταχύτητα μάλλον θα μπορούσε να βελτιωθεί , αν αντί της συνάρτησης DlookUP() , χρησιμοποιούνταν ένα RecordSet, μιας εγγραφής, με κριτήριο [onomaID] = randRecord. Φιλικά/Γιώργος |
Φίλε Μάριε δεν γνωρίζω τι λάθος έκανα σε μια δοκιμή με δείγμα 50000 ονόματα και βγήκε ένα δείγμα με 50.000 Γιώργους (συνονόματους). Επειδή μου φάνηκε παράλογο το ξανακοίταξα και είδα ότι τα αποτελέσματα είναι φυσιολογικά. Γιώργος |
Γιώργο (kapetang), Πράγματι, αν θέλουμε πολλές εγγραφές καλό είναι να αλλάξουμε τον τύπο των μεταβλητών σε long. Αυτό που με προβληματίζει όμως, είναι πως συνέβη και σε εμένα να γεμίσει ένας πίνακας με Γιώργηδες. Μειώνοντας δραστικά τον επιθυμητό αριθμό εγγραφών συνέχισε να εμφανίζει μόνο το όνομα Γιώργος. Έκανα compact & repair και δεν ξαναεμφανίστηκε. Θεώρησα τότε πως ενδεχομένως να είναι κάποιο εσωτερικό "μπέρδεμα" με τους πίνακες και δεν ασχολήθηκα. Εφ' όσον όμως συνέβη και σε εσένα, ενδεχομένως να έχω κάνει κάποιο λάθος, οπότε θα προσπαθήσω να το αναπαράγω. Υπάρχει βέβαια και η περίπτωση να ήταν όντως "μπέρδεμα" που είχε δημιουργήθεί ήδη στο αρχείο που ανέβασα. Αν είναι έτσι, το να δημιουργήσει και στους δυο μας προβλήματα είναι αναμενόμενο. off topic ΥΓ. Επειδή τα γραπτά μπορεί καμιά φορά να παρερμηνεύονται κατά λάθος, όταν είπα πιο πάνω ότι στενοχωρήθηκα, δεν εννοούσα την παρατήρηση, αλλά ότι είχα χαρεί πολύ όταν σκέφτηκα τον αλγόριθμο, και το να βρεθεί λάθος, μου έκοψε αυτή τη χαρά (αυτό ήταν όλο κι όλο). Ίσα ίσα, με τιμά που κάποιος κάθησε και ασχολήθηκε με την προσπάθειά μου. |
Γουάου, το θέμα έχει πάρει φωτιά! Φίλε schizo χαίρομαι που επανήλθες με εξηγήσεις και νέα αντιμετώπιση και μου άρεσε πολύ και το εφέ που πρόσθεσες! (η μπάρα).:dft003: Θέλω να μου πείτε για τις διπλοεγγραφές τι είδους ήταν γιατί ένα ερώτημα που έτρεξα δεν βρήκε. Επίσης μέσα στον κατάλογο υπάρχουν παραλλαγές του ίδιου ονόματος επίτηδες (γιάννης, γιαννακός π.χ). Στα ορθογραφικά πάσο. Να ξέρετε επίσης ότι έχω και άλλους πίνακες με πολλά στοιχεία οπότε ετοιμαστείτε! :dft011: |
Καλησπέρα στα κομάντα του ms-office! :028: Μάριε, ασχολήθηκα λίγο με την εφαρμογή σου και θα συμφωνήσω με τους Γιώργους ότι η ιδέα σου αξίζει συγχαρητήρια!:thumbup: Την πιο μεγάλη ευθύνη στο θέμα της ταχύτητας πάντως, τη φέρει η έκφραση: Κώδικας: ...Το μεγαλύτερο ποσοστό του πίνακα ονομάτων είναι αυτό του Γιώργου(0,1221). Όμως η Rnd() επιστρέφει μια τιμή μεταξύ 0 και 1. Φανταστείτε λοιπόν πόσες "λούπες" πάνε χαμένες..! :bored: (Δοκίμασα την προσθήκη 10000 ονομάτων και ...μ' έστειλε για τσιγάρο!:redface:) Η λύση σε αυτό είναι να αναγκαστεί η Rnd() κάθε φορά να επιστρέφει μια τιμή μεταξύ 0 και 0,1221. Αν έχετε ακόμη όρεξη, αντικαταστήστε την cmdAppendNames_Click() με αυτή: Κώδικας: Private Sub cmdAppendNames_Click()αλλά έχω την εντύπωση πως βελτιώθηκε και λίγο η απόκλιση. Οφείλω όμως να σου ζητήσω συγγνώμη Μάριε που αφαίρεσα την progress bar. Το αισθητικό αποτέλεσμα ήταν τέλειο αλλά η progress bar της Access είναι ταχύτερη και στην ταχύτητα πονάει λίγο η διαδικασία. (Εδώ που τα λέμε θα μπορούσε να βελτιωθεί πολύ και διαδικασία ενημέρωσης αλλά...) OffTopic: Επίσης, να σου ζητήσω συγγνώμη που σε παρεξήγησα πριν αλλά όπως είπες και εσύ για όλα φταίει ο γραπτός λόγος που στερείται ύφους.:what: Γιαυτό όμως τα έχουμε τα σκασμένα τα emoticons! Βάλτε και κανένα και μην φοβάστε, δεν σας τα χρεώνουμε.:001_rolleyes: Παράθεση:
Δε μασάμε εμείς...! :028: |
Εύρεση διπλοεγγραφών Παράθεση:
Κώδικας: SELECT fldName, Count(fldName) AS CountOffldNameΚαι μια σχετική και πολύ χρήσιμη (όπως αρχικά φαίνεται) σελίδα: Ελληνικά Ονόματα Ελλήνων και Ελληνίδων, Στατιστική Συχνότητα Πάντως Γιώργο, από αριθμό ονομάτων ...του ρίχνεις στα αυτιά του foundali..! :biggrin: |
2 Συνημμένο(α) Καλημέρα στην παρέα Προκειμένου να δοκιμαστούν τα προγράμματα που δημιούργησε η παρέα, σε πραγματικές συνθήκες, χρησιμοποίησα ένα πίνακα 1693 διαφορετικών ονομάτων. Οι συχνότητες (πιθανότητες) των ονομάτων είναι τυχαίες και έχουν άθροισμα 1 (100%). 1. Το RandomNamesMarios2.mdb είναι το πρόγραμμα που δημιούργησε ο Μάριος. Λειτουργεί κανονικά, αλλά είναι αργό. 2. Το RandomNamesMarios3.mdb (επισυνάπτεται) είναι το πρόγραμμα του Μάριου, όπως τροποποιήθηκε από το Γιάννη. Έχει βελτιωθεί στην ταχύτητα και λειτουργεί κανονικά. 3. Το NameFrequency.mdb (δεν επισυνάπτεται) είναι το πρόγραμμα του Γιάννη. Είναι ταχύτατο αλλά σε πραγματικές συνθήκες εμφανίζει λάθος χρόνου εκτέλεσης. Επίσης και με τον πίνακα των περιορισμένων ονομάτων αν ζητήσουμε μικρό δείγμα, πχ 12 εγγραφών θα δημιουργήσει δείγμα των 17 εγγραφών. Στα παραπάνω προγράμματα οι αλγόριθμοι είναι πρωτότυποι, ευφυείς και λογικοί, αλλά δημιουργούν και κάποιες υπόνοιες για την ορθότητά τους. 4. Στο RandomNamesGorge.mdb (επισυνάπτεται) , προκειμένου να γίνει σύγκριση με τα προηγούμενα, χρησιμοποιώ μια κλασική μέθοδο δειγματοληψίας. Δημιουργείται μια κληρωτίδα ονομάτων, στην οποία η αναλογία κάθε ονόματος (πλήθος εμφάνισης προς συνολικό πλήθος) ισούται με την πιθανότητα του ονόματος και ακολούθως λαμβάνεται τυχαία το δείγμα. Χρησιμοποιεί μια τροποποίηση του περιβάλλοντος χρήστη και του μαγικού (σφαιράτου) κώδικα του Γιάννη. Φαίνεται να λειτουργεί καλά, αλλά χρειάζεται να δοκιμαστεί. Συμπέρασμα: Στο ζόρικο πρόβλημα που έβαλε ο Γιώργος (mistirios); έγινε σημαντική δουλειά, αλλά, κατά τη γνώμη μου, δεν παρουσιάστηκε ακόμα η άριστη λύση. Φιλικά/Γιώργος |
Παράθεση:
:bye: |
Καλησπέρα! Το κατέβασα και ανοίγει κανονικά. Δεν δοκιμάζεις ξανά; |
καλησπέρα πως μπορω να έχω σε μια φορμα όλες τις εγγραφές σε μια σελίδα και πατώντας πάνω σε μια εγγραφή να ανοιγει η φόρμα σ' αυτη; πχ σε προβολή φυλλου δεδομένων βλέπω όλες τις επαφες μου, πως μπορώ κλικαροντας σε μια απο αυτες να μπαινω στη φορμα οπου συμπληρώνω τα στοιχεία της |
Απαντώντας γενικά αν στην ιδιότητα <onclick> ή <double-click> του id (του πεδίου κλειδιού) των εγγραφών αντιστοιχήσεις μία μακροεντολή ή κώδικα που να ανοίγει την φόρμα με το id της εγγραφής που κάνεις κλικ τότε έχεις αυτό που θες. Αν δουλεύεις με Access 2007 ή νεώτερη υπάρχει υλοποιημένο στα templates που μπορείς να βρες στο office online. |
EΧΩ ΑCESS 2003 Στην προβολη φύλλου δεδομένων δεν μπορώ να έχω προσβαση στις ιδιότητες του πεδίου Any help |
Καλημέρα σε όλους Αν πατήσεις το συνδυασμό πλήκτρων: alt+enter θα εμφανιστεί το φύλλο ιδιοτήτων. Ίσως σε βοηθήσει. Γιώργος |
Mπορει καποιος να μου συντάξει κωδικα για να ανοιγει η φόρμα στο συγκεκεριμένο id. Ευχαριστω |
1 Συνημμένο(α) σασ στελνω ενα δειγμα και το τι θελω να κανω θελω σε μια φορμα να φαόνονται όλα τα επιθετα και πατώντας πανω στο επιθετο να μου ανοιγει η φόρμα στο αντιστοιχω id |
1 Συνημμένο(α) Σε μία πρόχειρη αλλά λειτουργική υλοποίηση αυτού που θέλεις να κάνεις έφτιαξα μία φόρμα βασισμένη στον Πίνακα 1 με τα πρόσωπα που προβάλλει τις εγγραφές σε μορφή φύλλου δεδομένων (datasheet) με ονομασία frm_ProsopaSeProvoliListas. Μετά έφτιαξα μία μακροεντολή που να ανοίγει την φόρμα Πίνακας 2 με τα στοιχεία του προσώπου με συγκεκριμένο id. Τη μακροεντολή αυτή την αντιστοίχησα στο event double-click του id της φόρμας σε προβολή datasheet και όχι στο επώνυμο γιατί μπορεί πολλά πρόσωπα να έχουν το ίδιο επώνυμο. Έτσι κάνοντας διπλό-κλικ στο id ανοίγει η φόρμα Πίνακας 2. |
Ενας απλος κωδικας στο Onclick ενος κουμπιου σου ειναι ο εξης: (Η Access θα σου εμφανισει ενα κουμπι σε καθε εγγραφη σου στην συνεχομενη σου φορμα) Οπου frm1 η φορμα σου που θα ανοιγει. ================================================== ===================== Dim stDocName As String Dim stLinkCriteria As String stDocName = "frm1" stLinkCriteria = "[id]=" & Me![id] DoCmd.OpenForm stDocName, , , stLinkCriteria ================================================== ===================== Μεσα απο αυτη την διαδικασια μπορεις να κανεις το double click στο ονομα, μπορεις να κανεις "κρυφο" το κουμπι κλπ. Καλη συνεχεια.... |
1 Συνημμένο(α) Χαιρετώ την παρέα Να και μια άλλη εκδοχή διαχείρισης με combobox! Έχετε την καλημέρα μου/ Νικος Δ. |
| Η ώρα είναι 10:26. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.