Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Φόρμες ] Σύνθετη αύξουσα αρίθμηση (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/2074-sintheti-aiksoysa-arithmisi.html)

alamanos 25-09-12 22:09

Σύνθετη αύξουσα αρίθμηση
 
Χαιρετώ το φόρουμ.
Θέλω σε μία φόρμα να συμπληρώνεται αυτόματα ένα πεδίο με τον επόμενο αύξοντα.
Το πεδίο όμως έχει την μορφή: Χ.ΧΧ.ΧΧ.ΨΨΨΨΨΨ. Τα Χ τα πληκτρολογώ ενώ τα Ψ είναι ο αύξων αριθμός. Η αρίθμηση θα πρέπει να ξεκινά για κάθε νέο συνδυασμό των Χ. Π.Χ.4.00.12.οοοοο1,2,3 κλπ και 4.01.12.000001,2,3 και 2.00.12.000001,2,3 κ.ο.κ.
Υπάρχει κάποια λύση;

kapetang 26-09-12 11:19

Καλημέρα

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

Στη φόρμα και στο συμβάν «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»με τα πραγματικά.

Φιλικά/Γιώργος

ασχετος 26-09-12 11:55

1 Συνημμένο(α)
Καλημέρα σ' όλους

Αποστόλη,
κοίτα μήπως σου κάνει και αυτό.

ασχετος 26-09-12 12:16

1 Συνημμένο(α)
Παράθεση:

Αρχική Δημοσίευση από ασχετος (Μήνυμα 12221)
Καλημέρα σ' όλους

Αποστόλη,
κοίτα μήπως σου κάνει και αυτό.

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

ασχετος 26-09-12 12:46

1 Συνημμένο(α)
Παράθεση:

Αρχική Δημοσίευση από ασχετος (Μήνυμα 12224)
Διόρθωση στην Β.Δ. για να εμφανίζνται οι τελείες στον κωδικό και να συμπερεφέται ανάλογα σε Null τιμή.

Διόρθωση στην Dcount

alamanos 26-09-12 13:28

Μόλις μπήκα στο φόρουμ.
Ευχαριστώ προκαταβολικά παιδιά. Είστε φοβεροί.
Θα δω τις λύσεις σε λίγο.

alamanos 26-09-12 23:56

Φίλε Κώστα
ο κώδικας σου δουλεύει καλύτερα αλλά έχει ένα πρόβλημα. Μετράει τις εγγραφές με το ίδιο πρόθεμα και δίνει τον επόμενο κωδικό ως πλήθος +1. Το σωστό είναι να βρίσκει τον μεγαλύτερο και να δίνει τον επόμενο. Γιατί μπορεί να υπάρχουν ενδιάμεσες εγγραφές που έχουν διαγραφεί.
Ο κώδικας του Γιώργου δουλεύει έτσι αλλά όταν τον βάζω στην εφαρμογή μου βγάζει σφάλμα "compile error User-defined type not defined ".

ασχετος 27-09-12 08:46

1 Συνημμένο(α)
Καλημέρα σ' όλους

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

Ελπίζω να σου κάνει

Tasos 27-09-12 12:30

Καλησπέρα!

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

Στο πεδίο της φόρμας [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


Φιλικά

Τάσος

kapetang 27-09-12 17:06

1 Συνημμένο(α)
Καλησπέρα στην παρέα

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

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

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

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

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

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

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

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

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

Φιλικά/Γιώργος


Η ώρα είναι 08:00.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2