Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#11
| |||
| |||
Να επισημάνω κάτι που είναι αρκετά χρήσιμο σαν τακτική. Για να περιορίσουμε τις λούπες στους κώδικες που είδα παρακάτω μπορούμε να ορίζουμε κάθε φορά που το Randomize βρίσκει την τιμή Min ή Μax να αλλάζει τα όρια της. Έτσι θα περιορίζονται οι τιμές. πχ Min = 1 Και Max 10 όταν βρεθεί το 1 γίνεται Min=2 έως Max 10. οπότε όταν μείνει η τιμή πχ 8 δεν θα χρειαστεί να έχουμε καμία λούπα καθότι τότε το Min με το Max θα είναι το ίδιο και βάζοντας την συνθήκη if min=max τότε μας δίνει και τον τελευταίο αριθμό άμεσα. Την αποθήκευση θα την εφάρμοζα με ένα Array με μήκος όσο το Εύρος του Min και Max και απλά έναν έλεγχο αν υπάρχει η τιμή να προσπερνάει και να μην το αποθηκεύει. Έτσι θα έχουμε Randomize με λιγότερες λούπες και προφανώς με όποιο Min και Max θέλουμε. |
#12
| |||
| |||
Παράθεση:
Ευχαριστώ τους φίλους του forum που έλυσαν το πρόβλημα. Η λύση που δούλεψε καλύτερα ήταν αυτή του Τάσου. Θα ήθελα όμως να ευχαριστήσω και τον Τόλη και τον Κωνσταντίνο που ασχολήθηκαν. Και κάτι τελευταίο. Στον κώδικα του Τάσου σε ποίο σημείο θα μπορούσαμε να ορίσουμε εμείς την ανώτερη τιμή (Max) που θα παίρνει. Φιλικά Δημήτρης |
#13
| ||||
| ||||
Δημήτρη, η Max στην περίπτωση μας είναι η μεταβλητή "RecCount" . Κώδικας: .....Add Int((RecCount * Rnd) + 1), 0 Έδώ να πούμε ότι η συνάρτηση αυτή μπορεί να βελτιωθεί στην απόδοσή της κατά 33% περίπου (το συζητήσαμε με τον Κωνσταντίνο) δηλαδή σε πλήθος εγγραφών μεγαλύτερο του 50.000 θα έχουμε ένα κέρδος της τάξης των 1 - 2 δευτερολέπτων. Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών Τελευταία επεξεργασία από το χρήστη Tasos : 27-02-10 στις 18:52. |
#14
| |||
| |||
Τάσο έκανα την αλλαγή και είναι αυτό που ήθελα. Και πάλι ένα μεγάλο ευχαριστώ. Φιλικά Δημήτρης |
#15
| ||||
| ||||
Με την ευκαιρία να δώσω και εγώ δυο χρήσιμες ίσως συναρτήσεις. Η πρώτη (RandomRank) μας επιστρέφει έναν πίνακα ακεραίων σε τυχαία κατάταξη ενώ η δεύτερη (ScrambledArray) μας επιστρέφει "ανακατεμένο" τον πίνακα που της περνάμε δια αναφοράς ως παράμετρο. Με τα ορίσματα της RandomRank καθορίζουμε το εύρος των τιμών που θέλουμε να μας επιστρέψει. Κώδικας: Function RandomRank(ByVal lngMax As Long, _ Optional ByVal lngMin As Long = 1) As Long() 'Δημιουργία πίνακα με τυχαία κατάταξη Dim alngArray() As Long Dim lngPos As Long Dim lngTemp As Long Dim i As Long ReDim alngArray(lngMin To lngMax) For i = lngMin To lngMax alngArray(i) = i Next i For i = lngMax To (lngMin + 1) Step -1 lngPos = Int((i - lngMin + 1) * Rnd + lngMin) lngTemp = alngArray(lngPos) alngArray(lngPos) = alngArray(i) alngArray(i) = lngTemp Next i RandomRank = alngArray() End Function Function ScrambledArray(varArray As Variant) As Boolean 'Τυχαίο ανακάτεμα του πίνακα varArray Dim i As Long Dim lngUB As Long Dim lngLB As Long Dim lngPos As Long Dim varTemp As Variant If IsArray(varArray) Then lngUB = UBound(varArray) lngLB = LBound(varArray) For i = lngUB To lngLB + 1 Step -1 lngPos = Int((i - lngLB + 1) * Rnd + lngLB) varTemp = varArray(lngPos) varArray(lngPos) = varArray(i) varArray(i) = varTemp Next i ScrambledArray = lngUB > lngLB End If End Function
__________________ Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...! ----------------------------------------------- Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης. Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά! |
#16
| ||||
| ||||
Καλημέρα! Είχα φτιάξει κάτι παρόμοιο αλλά δεν το δημοσίευσα τελικά αφού η χρήση του σε πολλά δεδομένα (όπου θα υπάρξει αισθητή διαφορά χρόνου εκτέλεσης) θα είναι μάλλον περιορισμένη:
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#17
| |||
| |||
ΠΡΟΒΛΗΜΑ με τους τυχαίους αριθμούς σε πίνακα. Παράθεση:
ΠΡΟΒΛΗΜΑ με τους τυχαίους αριθμούς σε πίνακα. Καλησπέρα σε όλους τους φίλους του forum. Πριν από μερικές ημέρες είχα ζητήσει την βοήθειά σας για κάτι που ήθελα να κάνω. Σαν λύση χρησιμοποίησα τον κώδικα που είχε φτιάξει ο Τάσος και όλα φαινόταν να λειτουργούν καλά. Σήμερα που χρησιμοποίησα τη Βάση δεδομένων μου βγάζει ένα μήνυμα λάθους το οποίο δεν μπορώ να καταλάβω γιατί το βγάζει. Επισυνάπτω τη ΒΔ και αν μπορεί κάποιος ας βοηθήσει. Φιλικά Δημήτρης |
#18
| ||||
| ||||
Δημήτρη καλησπέρα! Γράψε μας το νούμερο και την περιγραφή του μηνύματος λάθους που παίρνεις. Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#19
| |||
| |||
Τάσο το μήνυμα που παίρνω είναι: Run-time error '457' This key is already associated with an element of this collection |
#20
| ||||
| ||||
Αγαπητέ Δημήτρη καλησπέρα! Μάλλον έχεις αφαιρέσει το : On Error Resume Next πριν από τη γραμμή: With CreateObject("Scripting.Dictionary") Τα λέμε.. Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
Παραγωγή τυχαίου αριθμού-Πρόβλημα | parara | Access - Ερωτήσεις / Απαντήσεις | 3 | 06-05-16 19:02 |
Παραγωγή τυχαίου αριθμού & απενεργοποίηση VBA | parara | Access - Ερωτήσεις / Απαντήσεις | 2 | 25-03-16 09:52 |
help πεδιο σε πινακα | sfedona85 | Access - Ερωτήσεις / Απαντήσεις | 5 | 24-02-09 08:44 |
Η ώρα είναι 07:49.