Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Συνεχόμενο Auto number
Γεια σας και χρονια πολλα. Ειμαι καινουργιος στην access(και στο forum ) και θα ηθελα μαθω πως μπορω να εχω ενα primary key το οποιο χωρις να ειναι ayto number να αυξανεται κατα 1 καθε φορα που εισαγω data. Το προβλημα προεκιψε οταν κανοντας delete ενα field το aytonumber primary key που ειχα συνεχισε να αυξανεται χανοντας ετσι την σειρα. |
#2
| |||
| |||
Καλημέρα και χρόνια πολλά. Ο κώδικας όπως μεταφέρθηκε από το site MsAccess που διατηρούμε (Δικός μας AutoNumber) Κώδικας για Εισαγωγή στο Module Public Function CustAutoNum(FormFieldID, TableName As String, Optional StartNum, Optional StepNum As Long) As Integer ' © Ηλιάδης Κωνσταντίνος : MsAccess VBA CODE, Mdb Applications, Eclass ' Κώδικας Ελεύθερος προς Ιδιωτική χρήση. ' 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 |
#3
| |||
| |||
Ευχαριστω για την απαντηση. Βασικα αυτο που θελω να κανω ειναι να εχω ενα field στην φορμα η οποια μου βγαζει τιμολογια το ποιο θα μου δινει το αριθμο των records οπου θα ειναι και ο αριθμος των τιμολιων μου. Δηλαδι να ξεκιναει π.χ απο το 1000 και να προσθετει +1 καθε φορα που παταω add new record. Φυσικα οταν σβησω ενα record (τιμολογιο) να επαναφερει τον αριθμο που εσβησα και οχι τον επομενο για μην χανετε και η αριθμιμενη σειρα των τιμολογιων. Ευχαριστω Γιωργος |
#4
| |||
| |||
Παράθεση:
|
#5
| |||
| |||
Καλησπέρα, Στο Πεδίο InvoiceNum θα βάλεις το εξής : =[CurrentRecord] και έτσι θα δείχνει ως Αριθμό τιμολογίου πάντα την τρέχουσα εγγραφή. Ωστόσο το InvoiceNum δεν θα είναι σωστό αν η φόρμα υποστεί ταξινόμηση ή και φιλτράρισμα επομένως θα πρότεινα την λύση που αναφέρουμε πιο πάνω. |
#6
| ||||
| ||||
Αγαπητέ φίλε Κοχ…(συγγνώμη, δεν κατάλαβα το όνομα σου), χρόνια πολλά καλωσόρισες στο φόρουμ! Γράφεις: Παράθεση:
Αλλά στην πράξη, δεν νομίζω να σ εξυπηρετεί το γεγονός ότι τα τιμολόγια σου με την πρώτη αλλαγή στη διάταξη των Records (ταξινόμηση, διαγραφή κτλ.) θα αποκτούν διαφορετικό νούμερο.. με ότι συνεπάγεται απ αυτό. Αυτός είναι o λόγος που ο αυτόματος αριθμητής δεν επιτρέπει την ίδια τιμή 2 φορές. Μπορείς να χρησιμοποιήσεις ένα υπολογισμένο πεδίο στη φόρμα σου με τον τύπο: =ID+1000 για να ξεκινάνε τα τιμολόγια σου από το 1000. Μ αυτό τον τρόπο θα μπορείς να διαχειρίζεσαι τα τιμολόγια με βάση το ID τους (που παραμένει άθικτο) ειδικότερα αν χρησιμοποιείς πίνακες με σχέσεις (Related Tables). Αν πάλι δεν σ ενοχλεί το γεγονός αυτό, πρόσθεσε ένα πεδίο στη φόρμα σου που θα απεικονίζει το νούμερο της τρέχουσας εγγραφής και στα Properties, στο «Control Source“, όπως είπε και ο Κωνσταντίνος γράψε: =[currentrecord] ή =[currentrecord]+1000 για να σου δείχνει τη σειρά της τρέχουσας εγγραφής + 1000 Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών Τελευταία επεξεργασία από το χρήστη Tasos : 29-12-09 στις 15:49. |
#7
| |||
| |||
Εχω κανει query για την φορμα ειναι ασχετο ή πρεπει να βαλω το ονομα του query στην θεση του ονοματος του table???
|
#8
| |||
| |||
Ευχαριστω πολυ για τις απαντησεις σας. Ελυσα το προβλημα με τον κωδικο ποθ μου δωσατε. Μηπος ομως ξερει κανεις να μου πει τι ειναι το Nz και το dmax για να μαθαινω κιολας???? Ευχαριστω Γιωργος |
#9
| |||
| |||
Καλησπέρα, Το nz είναι μια συνάρτηση που επιστρέφει ορισμένη τιμή όταν το αποτέλεσμα είναι null δηλαδή πιο απλά όταν μία μεταβλητή επιστρέψει null να το αλλάζει με μία άλλη τιμή. Το Dmax είναι συνάρτηση που επιστρέφει την μεγαλύτερη τιμή από ένα ορισμένο πεδίο σε έναν πίνακα και δύναται να δοθούν και κριτήρια δηλαδή από έναν πίνακα πχ TblPelates να εμφανίζεται το σύνολο των πωλήσεων (Πεδίο Sales) με κριτήριο το πεδίο (IDRegion) την τιμή 1 Οπότε δίνεις το εξής : Dmax("Sales","TblPelates","IDRegion="&1) Επίσης στο Vb Editor μπαίνεις με ALT+F11 και γράφοντας Dmax και πάνω σ'αυτό πατάς F1 έχεις την βοήθεια για την συνάρτηση. Επίσης ένα ακόμα Link για βοήθεια είναι το http://office.microsoft.com/el-gr/ac...813841032.aspx |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
Auto Size TextBox | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 0 | 12-01-17 14:15 |
Datasheet auto resize | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 0 | 22-11-16 17:49 |
[ Εκθέσεις ] Μεταφορά εγγραφών φόρμας σε έκθεση ως συνεχόμενο κείμενο | costas5 | Access - Ερωτήσεις / Απαντήσεις | 3 | 23-03-14 22:43 |
[Συναρτήσεις] Απορίες για auto update τιμών σε shared workbook | Φανφάρας | Excel - Ερωτήσεις / Απαντήσεις | 5 | 22-03-14 14:18 |
Αναγνώριση Serial Number του PC μου | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 5 | 25-11-13 12:31 |
Η ώρα είναι 14:28.