Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > [ Πίνακες ] Ορισμός τυχαίου αριθμού σε πεδίο πίνακα

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 25-02-10, 15:52
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-02-2010
Μηνύματα: 88
Προεπιλογή Ορισμός τυχαίου αριθμού σε πεδίο πίνακα

Καλησπέρα σε όλους ...
Θα ήθελα τη βοήθειά σας σε ένα πρόβλημα που αντιμετωπίζω.
Έχω ένα πίνακα με ονόματα μαθητών και για κάθε όνομα υπάρχει ένα πεδίο όπου θέλω να καταχωρώ ένα τυχαίο αριθμό κλήρωσης μέσω VB αν είναι εφικτό.
Θα πρέπει αυτός ο αριθμός να είναι κυμαίνεται μεταξύ δύο τιμών (μικρότερης και μεγαλύτερης πχ 1 και 20 ή 1 και 12) και θα πρέπει να είναι διαφορετικός για κάθε μαθητή. Θα πρέπει να πω ότι το πλήθος των μαθητών θα είναι πάντα μικρότερο ή ίσο με τη μεγαλύτερη τιμή πχ. το 20 ή το 12.

Επισυνάπτω τη βάση δεδομένων προς διευκόλυνση

Ελπίζω να μη ζητώ πολλά, ευχαριστώ εκ των προτέρων...
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb Κλήρωση.mdb (1,67 MB, 29 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 26-02-10, 03:18
Το avatar του χρήστη editolis
Super Moderator
Όνομα: Τολης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 02-01-2010
Περιοχή: ATHENS-GREECE
Μηνύματα: 180
Προεπιλογή

Αγαπητε φιλε,

Δες εαν το αρχειο που σου επισυναπτω
ειναι αυτο που ζητας...
Συνημμένα Αρχεία
Τύπος Αρχείου: zip ΚλήρωσηNEW.zip (25,3 KB, 23 εμφανίσεις)
Απάντηση με παράθεση
  #3  
Παλιά 26-02-10, 10:12
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-02-2010
Μηνύματα: 88
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από editolis Εμφάνιση μηνυμάτων
Αγαπητε φιλε,

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

Είναι σαν να θέλουμε να μοιράσουμε 12 ή 14 ή 20 νούμερα σε μαθητές χωρίς να έχουν τον ίδιο αριθμό δύο μαθητές.

Δεν ξέρω πως μπορεί να γίνει ή αν μπορεί να γίνει.
Απάντηση με παράθεση
  #4  
Παλιά 26-02-10, 11:34
Το avatar του χρήστη editolis
Super Moderator
Όνομα: Τολης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 02-01-2010
Περιοχή: ATHENS-GREECE
Μηνύματα: 180
Προεπιλογή

Μου πηρε λιγο χρονο αλλα νομιζω
οτι ειναι αυτο που ζητας.

Σου επισυναπτω την Βαση Δεδομενων...
Συνημμένα Αρχεία
Τύπος Αρχείου: zip KlirosiNewType.zip (26,9 KB, 32 εμφανίσεις)
Απάντηση με παράθεση
  #5  
Παλιά 26-02-10, 15:20
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

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

Αγαπητέ Δημήτρη, καλωσόρισες στην παρέα μας!

Η δημιουργία τυχαίων αριθμών με όριο, επιτυνχάνεται είτε με SQL (βλ. το παράδειγμα του Τόλη), είτε με τη χρήση του αντικειμένου "Scripting.Dictionary" από τη βιβλιοθήκη Scripting Object - "scrrun.dll" (αν χρειαστεί, το βρίσκουμε εδώ: VBE> Tools> References > Microsoft Scripting Runtime).
Το αντικείμενο αυτό δεν επιτρέπει διπλοεγγραφές στους πίνακες (Array) που δημιουργεί. Αυτή ακριβώς την ιδιότητα χρησιμοποιούμε για να δημιουργήσουμε έναν πίνακα με μοναδικές τυχαίες τιμές που κατόπιν θα περαστούν στο κατάλληλο πεδίο στον πίνακα της βάσης.
Από πλευράς απόδοσης, το "Scripting.Dictionary" είναι ταχύτατο.

Δείτε ένα παράδειγμα κώδικα.
Ο κώδικας προϋποθέτει ένα πεδίο με το όνομα "LotNr".

Option Compare Database
Option Explicit

Private Sub cmdRandomize_Click()
Dim i%, RecCount%, fld As DAO.Field, TheKeys As Variant
With CurrentDb.OpenRecordset(Me.RecordSource, dbOpenDynaset)
If .RecordCount Then .MoveLast: .MoveFirst
RecCount = .RecordCount
Set fld = .Fields("LotNr")
On Error Resume Next
With CreateObject("Scripting.Dictionary")
While .Count < RecCount
.Add Int((RecCount * Rnd) + 1), 0
Wend
TheKeys = .Keys
End With
If Err Then Err.Clear: On Error GoTo 0
For i = 0 To RecCount - 1
.Edit
fld = TheKeys(i)
.Update
.MoveNext
Next
.Close
End With
Me.Refresh
End Sub
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 26-02-10 στις 18:41.
Απάντηση με παράθεση
  #6  
Παλιά 26-02-10, 15:51
Το avatar του χρήστη Meteora
Συντονιστής
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 28-12-2008
Περιοχή: Θεσσαλονίκη
Μηνύματα: 1.033
Προεπιλογή

Τάσοοοοοοοοοοοοοοοοοοοοοο ! Το Σαββατοκύριακο τι θα κάνουμε ;
Λοιπόν !
Απαγορεύεται να γράφουν στην Access την Παρασκευή - Σάββατο - Κυριακή οι παρακάτω : Τόλης, Γιάννης, Κώστας και Τάσος!
Αστειεύομαι. Όλοι περιμένουμε τα γραψίματά τους...
Την Καλημέρα -και απο εδώ - σε όλους σας
Φιλικά / Νίκος
Απάντηση με παράθεση
  #7  
Παλιά 26-02-10, 17:12
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

........Αγαπητέ μου θα χρειαστούμε αμέτρητα Σαββατοκύριακα για να καλύψουμε το Θέμα:
Office μέχρι την έκδοση 2007!
Μετά.. πάμε γι άλλα (Office 2010...)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 26-02-10 στις 18:39.
Απάντηση με παράθεση
  #8  
Παλιά 26-02-10, 18:34
Όνομα: Ηλιάδης Κωνσταντίνος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-12-2008
Περιοχή: Chicago
Μηνύματα: 119
Προεπιλογή

Καλησπέρα,

Παρουσιάζω μια προσωπική μου συνάρτηση παραγωγής τυχαίων αριθμών και παίρνει απλά την Minimum (Ελάχιστη) και Maximum (Μέγιστη) τιμή.

Ενώ αν θέλουμε να την περάσουμε σε SQL ερώτημα αλλάζουμε λίγο την Randomize βάζοντας και το DumField παράμετρο
και η μία στήλη θα είναι οι τυχαίοι αριθμοί πχ η στήλη ας λέγεται (FieldRand) θα βάλουμε στην συνάρτηση και το DumField οπότε έχουμε Πχ για εύρος τυχαίων αριθμών από 10 έως 20 "Select Field1, Field2, Randomize(10,20,[Field1]) as FieldRand From Table1"


Public Function Randomize(Min, Max As Integer) As Integer
Randomize = Int((Max - Min + 1) * Rnd + Min)
End Function

'Για SQL Ερώτημα

Public Function Randomize(Min, Max As Integer, DumField ) As Integer
Randomize = Int((Max - Min + 1) * Rnd + Min)
End Function
Απάντηση με παράθεση
  #9  
Παλιά 26-02-10, 20:53
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-02-2010
Μηνύματα: 88
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από editolis Εμφάνιση μηνυμάτων
Μου πηρε λιγο χρονο αλλα νομιζω
οτι ειναι αυτο που ζητας.

Σου επισυναπτω την Βαση Δεδομενων...

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

Χίλια ευχαριστώ σε όλους και καλό Σαββατοκύριακο.

Φιλικά Δημήτρης
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb KlirosiNewType.mdb (916,0 KB, 40 εμφανίσεις)
Απάντηση με παράθεση
  #10  
Παλιά 26-02-10, 23:33
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Δημήτρη έτσι:

Κώδικας:
Private Sub Εντολή11_Click()
    Dim i%, RecCount%, fld As DAO.Field, TheKeys As Variant, strSQL$
    strSQL = "Select * From " & Me.RecordSource & IIf(Me.FilterOn, " Where " & Me.Filter, vbNullString)
    With CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
    
        If .RecordCount Then .MoveLast: .MoveFirst
        RecCount = .RecordCount
        Set fld = .Fields("ΑρΚλήρωσης")
        On Error Resume Next
        With CreateObject("Scripting.Dictionary")
            While .Count < RecCount
                .Add Int((RecCount * Rnd) + 1), 0
            Wend
            TheKeys = .Keys
        End With
        If Err Then Err.Clear: On Error GoTo 0
        For i = 0 To RecCount - 1
            .Edit
            fld = TheKeys(i)
            .Update
            .MoveNext
        Next
        .Close
    End With
    Me.Refresh

End Sub
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 27-02-10 στις 03:50.
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


Παρόμοια Θέματα

Θέμα Δημιουργός 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:46.