Νέος Κώδικας για Δικό μας AutoNumber

Συζητήσεις για την τοπική βάση δεδομένων Access της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Νέος Κώδικας για Δικό μας AutoNumber

Δημοσίευση από kon73 » 29 Ιούλ 2008 21:42

Παρουσιάζεται ως βοήθημα ο κώδικας για AutoNumber με δυνατότητες επιλογής τον αριθμό έναρξης, την τιμή βήματος (Πόσο θα αυξάνεται δηλαδή). Πριν τον κώδικα υπάρχουν κάποια εισαγωγικά σχόλια :

H Access όπως γνωρίζουμε μας δίνει την δυνατότητα σε ένα πεδίο ενός πίνακα να επιλέξουμε το AutoNumber ως επιλογή τύπου πεδίου. Το AutoNumber όμως είναι ως λειτουργία του προβληματικό. Δηλαδή με την επεξεργασία που κάνουμε σε μία εγγραφή όταν δεν την αποθηκεύσουμε αλλά πατήσουμε πχ ESC τότε ο αριθμός του AutoNumber έχει ήδη δεσμευτεί και μεταβαίνοντας σε νέα εγγραφή δεν μας δίνει το Autonumber τον σωστό αριθμό αλλά 2 αριθμούς μετά. Με δεύτερο Esc μεταβαίνει στον 3 αριθμό κοκ.

Μπορούμε να διορθώσουμε το Autonumber αν κλείσουμε τον πίνακα και την βάση και ξανά ανοίξουμε και δώσουμε εγγραφή καινούργια. Όμως επειδή αυτό είναι φανερό ότι δεν είναι λειτουργικό μεταβαίνουμε στην επιλογή να κατασκευάσουμε μία συνάρτηση που θα μας επιστρέφει τον σωστό αριθμό.

Θα πρέπει ο κώδικας να εισαχθεί σε ένα Module και θα καλείται από το Event Before Insert της Φόρμας (Πριν δηλαδή εισαχθεί μία καινούργια εγγραφή).


Κώδικας για Εισαγωγή στο Module

Κώδικας: Επιλογή όλων

Public Function CustAutoNum(FormFieldID, TableName As String, Optional StartNum, Optional StepNum As Long) As Integer
' © Ηλιάδης Κωνσταντίνος : http://www.MsAccess.gr
' Κώδικας Ελεύθερος προς Ιδιωτική χρήση.
' FormFieldID : Το Όνομα του πεδίου της φόρμας στο οποίο θέλουμε να εφαρμόσουμε 
'               την αύξουσα αρίθμηση
' TableName   : Το όνομα του πίνακα που αντιστοιχεί στην ιδιότητα RecordSource της    ' φόρμας.
' StartNum    : Αριθμός που δηλώνει την έναρξη αρίθμησης
' StepNum     : Βήμα, κατά πόσο θα αυξάνει ο αριθμός

If IsMissing(StartNum) Then
     CustAutoNum = Nz(DMax(FormFieldID, TableName), 0) + Nz(StepNum, 1)
Else
     CustAutoNum = Nz(DMax(FormFieldID, TableName), StartNum - Nz(StepNum, 1)) + Nz(StepNum, 1)
End If
End Function

Καλούμε τον κώδικα στο BeforeInsert της Φόρμας με ένα παράδειγμα στο οποίο το όνομα πεδίου της φόρμας είναι το ID και ο πίνακας ο Customers. Ξεκινά η αρίθμηση από το 10 και αυξάνει κατά 1.

Κώδικας: Επιλογή όλων

Private Sub Form_BeforeInsert(Cancel As Integer)
    Me.ID = CustAutoNum("ID", "Customers", 10, 1)
End Sub
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
Εικόνα

Απάντηση

Επιστροφή στο “MS Access”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης