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

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 25-09-12, 23:09
Όνομα: Αποστόλης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 25-09-2012
Μηνύματα: 4
Προεπιλογή Σύνθετη αύξουσα αρίθμηση

Χαιρετώ το φόρουμ.
Θέλω σε μία φόρμα να συμπληρώνεται αυτόματα ένα πεδίο με τον επόμενο αύξοντα.
Το πεδίο όμως έχει την μορφή: Χ.ΧΧ.ΧΧ.ΨΨΨΨΨΨ. Τα Χ τα πληκτρολογώ ενώ τα Ψ είναι ο αύξων αριθμός. Η αρίθμηση θα πρέπει να ξεκινά για κάθε νέο συνδυασμό των Χ. Π.Χ.4.00.12.οοοοο1,2,3 κλπ και 4.01.12.000001,2,3 και 2.00.12.000001,2,3 κ.ο.κ.
Υπάρχει κάποια λύση;
Απάντηση με παράθεση
  #2  
Παλιά 26-09-12, 12:19
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα

Αποστόλη, καλωσόρισες στην παρέα μας.

Στη φόρμα και στο συμβάν «Change» του πεδίου που καταχωρείς τον κωδικό πρόσθεσε τον παρακάτω κώδικα:

Κώδικας:
Private Sub id_Change()
    Dim rs As DAO.Recordset, strSQL As String
    If Len(Me.id.Text) = 7 Then
        strSQL = "SELECT Max(Right([ID],6)) AS IX FROM Table1 WHERE Left([ID],7)='" & Me.id.Text & "'"
        Set rs = CurrentDb.OpenRecordset(strSQL)
        If IsNull(rs!IX) Then
            Me.id = Me.id.Text & "." & "000001"
        Else
            Me.id = Me.id.Text & "." & Format(rs!IX + 1, "000000")
        End If
        rs.Close
        Set rs = Nothing
    End If
End Sub
Φυσικά θα αντικαταστήσεις τα «Table1» και «ID»με τα πραγματικά.

Φιλικά/Γιώργος
Απάντηση με παράθεση
  #3  
Παλιά 26-09-12, 12:55
Όνομα: Κώστας
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-01-2012
Περιοχή: Πειραιάς
Μηνύματα: 181
Προεπιλογή

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

Αποστόλη,
κοίτα μήπως σου κάνει και αυτό.
Συνημμένα Αρχεία
Τύπος Αρχείου: zip TEST.zip (117,0 KB, 24 εμφανίσεις)

Τελευταία επεξεργασία από το χρήστη ασχετος : 26-09-12 στις 13:12.
Απάντηση με παράθεση
  #4  
Παλιά 26-09-12, 13:16
Όνομα: Κώστας
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-01-2012
Περιοχή: Πειραιάς
Μηνύματα: 181
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από ασχετος Εμφάνιση μηνυμάτων
Καλημέρα σ' όλους

Αποστόλη,
κοίτα μήπως σου κάνει και αυτό.
Διόρθωση στην Β.Δ. για να εμφανίζνται οι τελείες στον κωδικό και να συμπερεφέται ανάλογα σε Null τιμή.
Συνημμένα Αρχεία
Τύπος Αρχείου: zip TEST.zip (123,5 KB, 15 εμφανίσεις)
Απάντηση με παράθεση
  #5  
Παλιά 26-09-12, 13:46
Όνομα: Κώστας
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-01-2012
Περιοχή: Πειραιάς
Μηνύματα: 181
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από ασχετος Εμφάνιση μηνυμάτων
Διόρθωση στην Β.Δ. για να εμφανίζνται οι τελείες στον κωδικό και να συμπερεφέται ανάλογα σε Null τιμή.
Διόρθωση στην Dcount
Συνημμένα Αρχεία
Τύπος Αρχείου: zip TEST.zip (119,2 KB, 20 εμφανίσεις)
Απάντηση με παράθεση
  #6  
Παλιά 26-09-12, 14:28
Όνομα: Αποστόλης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 25-09-2012
Μηνύματα: 4
Προεπιλογή

Μόλις μπήκα στο φόρουμ.
Ευχαριστώ προκαταβολικά παιδιά. Είστε φοβεροί.
Θα δω τις λύσεις σε λίγο.
Απάντηση με παράθεση
  #7  
Παλιά 27-09-12, 00:56
Όνομα: Αποστόλης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 25-09-2012
Μηνύματα: 4
Προεπιλογή

Φίλε Κώστα
ο κώδικας σου δουλεύει καλύτερα αλλά έχει ένα πρόβλημα. Μετράει τις εγγραφές με το ίδιο πρόθεμα και δίνει τον επόμενο κωδικό ως πλήθος +1. Το σωστό είναι να βρίσκει τον μεγαλύτερο και να δίνει τον επόμενο. Γιατί μπορεί να υπάρχουν ενδιάμεσες εγγραφές που έχουν διαγραφεί.
Ο κώδικας του Γιώργου δουλεύει έτσι αλλά όταν τον βάζω στην εφαρμογή μου βγάζει σφάλμα "compile error User-defined type not defined ".
Απάντηση με παράθεση
  #8  
Παλιά 27-09-12, 09:46
Όνομα: Κώστας
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-01-2012
Περιοχή: Πειραιάς
Μηνύματα: 181
Προεπιλογή

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

Αποστόλη έχεις δίκιο
Το έφτιαξα, όπως και στην περίπτωση που ήταν Null

Ελπίζω να σου κάνει
Συνημμένα Αρχεία
Τύπος Αρχείου: zip TEST.zip (123,2 KB, 20 εμφανίσεις)
Απάντηση με παράθεση
  #9  
Παλιά 27-09-12, 13:30
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Καλησπέρα!

Θα πρότεινα μια διαφορετική προσέγγιση.

Στο πεδίο της φόρμας [ID] έχουμε:
  • Μάσκα εισαγωγής = 9,99,99,999999;;
  • Κανόνας επικύρωσης = Is Null Or Len([ID])=5
  • Κείμενο επικύρωσης = Ότι χρειάζεται για να ενημερωθεί κατάλληλα ο χρήστης

Στο συμβάν "Με την αλλαγή" του πεδίου [ID] χρησιμοποιείται ο παρακάτω κώδικας:

Κώδικας:
Private Sub ID_Change()
    Dim strText As String, i As Long
    strText = Replace(Replace(Me.ID.Text, "_", ""), ".", "")
    If Len(strText) = 5 Then
        i = DCount("[ID]", "tbl_TEST", "left([ID],5)='" & strText & "'")
        If i Then
            Me.ID = strText & Format(i + 1, "000000")
        Else
            Me.ID = strText & "000001"
        End If
    End If
End Sub
Edit:

Πιο απλοποιημένα και μετά από συζήτηση με τον Γιώργο (kapetang):
Κώδικας:
Private Sub ID_Change()
    Dim i As Long
    strText = Replace(Replace(Me.ID.Text, "_", ""), ".", "")
    If Len(strText) = 5 Then
    i = Nz(DMax("Right([ID],5)", "tbl_TEST", "left([ID],5)='" & strText & "'"))
            Me.ID = strText & Format(i + 1, "000000")
    End If
End Sub

Φιλικά

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

Τελευταία επεξεργασία από το χρήστη Tasos : 28-09-12 στις 08:47.
Απάντηση με παράθεση
  #10  
Παλιά 27-09-12, 18:06
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα στην παρέα

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

Για τη σωστή μεταφορά πρέπει:

1) Το Table1 να το αντικαταστήσεις με το όνομα του δικού σου πίνακα και να το βάλεις ανάμεσα σε δύο αγκύλες ([ ]).

2) Όπου υπάρχει το [ID] να αντικαταστήσεις το ID με το όνομα του πεδίου που καταχωρείς τον κωδικό.

3) Στην έκφραση Me.id.Text, το id θα το αντικαταστήσεις με το όνομα του πλαισίου κειμένου της φόρμας στο οποίο καταχωρείς τον κωδικό. Αν έχει κενά θα το βάλεις σε αγκύλες.

Για σιγουριά η αντικατάσταση να γίνει με αντιγραφή και επικόλληση.

Κατά τη γνώμη μου οι λύσεις που χρησιμοποιούν την Dcount έχουν το εξής μειονέκτημα:

Αν έχουμε 4 εγγραφές με ίδιο πρώτο τμήμα κωδικού, της 4ης εγγραφής το δεύτερο τμήμα θα είναι 000004.

Αν διαγράψουμε τη δεύτερη εγγραφή και περάσουμε μία νέα θα πάρουμε μια εγγραφή με δεύτερο τμήμα 000004, που ήδη υπάρχει.

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb SpecialKodikos.mdb (468,0 KB, 50 εμφανίσεις)
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[ Φόρμες ] Αυξουσα αριθμηση vala Access - Ερωτήσεις / Απαντήσεις 1 05-01-17 18:59
Αύξουσα αρίθμηση σε πεδίο ερωτήματος ΚΩΣΤΑΣ2 Access - Ερωτήσεις / Απαντήσεις 3 13-09-15 11:11
[ Φόρμες ] Σύνθετη αναζήτηση εγγραφών marpapa Access - Ερωτήσεις / Απαντήσεις 6 19-07-12 23:50
[ Φόρμες ] Αύξουσα αρίθμηση σε πεδίο φόρμας mgeorge Access - Ερωτήσεις / Απαντήσεις 18 01-06-11 23:33


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