montoya_vou Δημοσ. 6 Δεκεμβρίου 2018 Δημοσ. 6 Δεκεμβρίου 2018 Καλησπέρα στην κοινότητα. Η απορία μου μπορεί να είναι εντελώς απλή για όσους γνωρίζουν καλά την access. Έχω έναν πίνακα στον οποίο στο ένα πεδίο καταχωρούμε με αυτόματη αρίθμηση τον αριθμό κυκλοφορίας δίνοντας μέσω ερωτήματος την τιμή που θέλω να ξεκινάει η αρίθμηση. Το πρόβλημα μου είναι ότι χρειάζεται ανά τακτά χρονικά διαστήματα να δίνουμε κάποιον αριθμό κυκλοφορίας εκτός αυτόματης αρίθμησης και να αφαιρείται ο αριθμός που διαλέξαμε από την αυτόματη αρίθμηση... Ελπίζω να έγινε κατανοητή η απορία μου. Ευχαριστώ εκ των προτέρων.
masteripper Δημοσ. 6 Δεκεμβρίου 2018 Δημοσ. 6 Δεκεμβρίου 2018 (επεξεργασμένο) ΑΝ είναι AutoNumber μπορείς να βρίσκεις τα "κενά" και να εισάγεις εκεί τον αριθμό κυκλοφορίας...γενικώς όμως πολλά παιχνίδια με AutoNumber δεν συνιστούνται.... Κάτι σαν και αυτό INSERT INTO Table1 ( ID, Plate ) SELECT 2 AS ID, "XXX" AS Plate ; Με βάση το σκεπτικό ότι κάποια στιγμή διαγράψαμε την εγγραφή με ID = 2 (AutoNumber) Επεξ/σία 6 Δεκεμβρίου 2018 από masteripper
montoya_vou Δημοσ. 6 Δεκεμβρίου 2018 Μέλος Δημοσ. 6 Δεκεμβρίου 2018 Μόλις τώρα, masteripper είπε ΑΝ είναι AutoNumber μπορείς να βρίσκεις τα "κενά" και να εισάγεις εκεί τον αριθμό κυκλοφορίας...γενικώς όμως πολλά παιχνίδια με AutoNumber δεν συνιστούνται.... Κάτι σαν και αυτό INSERT INTO Table1 ( ID, Plate ) SELECT 2 AS ID, "XXX" AS Plate ; Με βάση το σκεπτικό ότι κάποια στιγμή διαγράψαμε την εγγραφή με ID = 2 (AutoNumber) Μάλλον δεν έθεσα καλά την ερώτηση μου. Έχοντας δώσει αυτόματη αρίθμηση να ξεκινάει π.χ από το 7000 θέλω όταν έρθει η ώρα για το 7015 π.χ το οποίο εγώ το έχω δώσει εκτός βάσης να το προσπεράσει και να πάει στο 7016.
masteripper Δημοσ. 6 Δεκεμβρίου 2018 Δημοσ. 6 Δεκεμβρίου 2018 (επεξεργασμένο) Εξαρτάται πως θα το υλοποιήσεις...κανονικά με το που θα θέσεις κάποια στιγμή το 7015 ότιδήποτε που περνάς θα συνεχίζει απο εκεί ..αγνοόντας τα 7000-7015....μια λύση είναι να αλλάξεις σκεπτικό και να χρησιμοποιήσεις ξεχωριστό πίνακα για τα custom...Και για να μην μπλέξεις θα το κάνεις με αρνητικούς αριθμούς οπότε με 1 union θα τα παίρνεις όλα....βέβαια αφου κάνεις εισαγωγή μέσω ερωτήματος και πιθανόν κώδικα θα μπορούσες να βάλεις 1 error handler και να προσπερνάς τα νούμερα που υπάρχουν...λύσεις υπάρχουν αρκετές...το κακό είναι ότι όπως προείπα ..πολύ tinkering στο AutoNumber οδηγεί εύκολα σε corruption....και το μόνο ασφαλές είναι ξεχωριστός πίνακας...ή ίσως κάποια αλλαγή φιλοσοφίας...π.χ. προσθήκη flag για custom και απλως΄φιλτράρεις κατα το δοκούν Επεξ/σία 6 Δεκεμβρίου 2018 από masteripper 1
Lanike71 Δημοσ. 6 Δεκεμβρίου 2018 Δημοσ. 6 Δεκεμβρίου 2018 Σκέψου αυτά που λέει ο masteripper καλά. Επίσης ξανασκέψου αν υπάρχει πιο άμεση λύση: Γιατί να ξεκινάει από το 7000; Γιατί να κάνει skip το 7015; Μήπως υπάρχει καλύτερη λύση σχεδιαστικά; 1
MastroGiannis Δημοσ. 7 Δεκεμβρίου 2018 Δημοσ. 7 Δεκεμβρίου 2018 Αν και είναι πολύ επισφαλές, το ζητούμενο γίνεται ήδη απ' την αυτόματη αρίθμηση. Όταν εισαχθεί μή αυτόματα ο αριθμός 7015, η αυτόματη αρίθμηση θα συνεχίσει απ' το 7016. Τι ακριβώς γίνεται στο σύστημά σου; Η πρότασή μου όμως είναι να αφαιρέσεις απ' τη στήλη 'Αρ. Κυκλοφορίας' την αυτόματη αρίθμηση και να ελέγχεις με δική σου ρουτίνα την προσαύξηση/επιλογή του αριθμού πριν από κάθε νέα καταχώρηση. Ένας βοηθητικός πίνακας με όλους τους πιθανούς αριθμούς κυκλοφορίας και ένα ερώτημα εξωτερικής συνένωσης με τον κύριο πίνακα και τη συνθήκη Is Null θα σου δώσει τους διαθέσιμους (αχρησιμοποίητους) αριθμούς κυκλοφορίας. Η αυτόματη αρίθμηση ίσως προκαλέσει προβλήματα και διενέξεις μετά από κάποια συμπύκνωση της βάσης.
montoya_vou Δημοσ. 7 Δεκεμβρίου 2018 Μέλος Δημοσ. 7 Δεκεμβρίου 2018 Καλησπέρα και σας ευχαριστώ όλους για τις απαντήσεις σας. Πραγματικά πρέπει να σκεφτώ (και να φρεσκάρω τις γνώσεις μου)λίγο καλύτερα Η λύση με το ερώτημα εξωτερικής συνένωσης και την συνθήκη null (όταν τα φρεσκάρω όλα αυτά) ίσως να πιάσει τόπο. Σίγουρα θα αφαιρέσω την αυτόματη αρίθμηση έπειτα από τις συμβουλές σας.
montoya_vou Δημοσ. 8 Δεκεμβρίου 2018 Μέλος Δημοσ. 8 Δεκεμβρίου 2018 (επεξεργασμένο) Καλημέρα και πάλι. Θα προσπαθήσω να γίνω λίγο πιο κατανοητός όσον αφορά το τι ακριβώς μου ανατέθηκε να κάνω.Υπάρχει ήδη μία βάση για να δίνονται οι αριθμοί κυκλοφορίας αυτόματα από το σημείο που κάθε φορά εμείς θα το θέλουμε ανάλογα με τους αριθμούς που έχουμε διαθέσιμους.Το πρόβλημα είναι κυρίως ότι υπάρχουν στιγμές (σπάνια) που κάποιοι μελλοντικοί αριθμοί δίνονται εκτός συστήματος. ALTER TABLE [Μητρώο Αριθμών κυκλοφορίας] ALTER COLUMN [Άυξων Αριθμός] COUNTER (5000,1) Χρησιμοποιώ αυτού του είδους το ερώτημα για την εκκίνηση.Υπάρχει κάποιος τρόπος να δημιουργώ εξαίρεση για αυτές τις σπάνιες περιπτώσεις που ανέφερα? Δεν είμαι αρνητικός να ακολουθήσω άλλο τρόπο σχεδίασης αρκεί αν σας είναι εύκολο να μου δώσετε κάποιες κατευθυντήριες. Σας ευχαριστώ εκ των προτέρων.. Επεξ/σία 8 Δεκεμβρίου 2018 από montoya_vou
MastroGiannis Δημοσ. 8 Δεκεμβρίου 2018 Δημοσ. 8 Δεκεμβρίου 2018 Επισυνάπτω λοιπόν ένα παράδειγμα προς κατανόηση της πρότασής μου. Η μοναδική φόρμα της εφαρμογής περιέχει ένα πεδίο εισαγωγής του αριθμού εκκίνησης, ένα combo box με τους διαθέσιμους αριθμούς προς καταχώρηση και ένα κουμπί για την καταχώρηση του επιλεγμένου αριθμού. Εξέτασε τον κώδικα της φόρμας και το ερώτημα προέλευσης του combo box. AutoPlates.zip
montoya_vou Δημοσ. 11 Δεκεμβρίου 2018 Μέλος Δημοσ. 11 Δεκεμβρίου 2018 Καλησπέρα και πάλι, Μελέτησα την πρόταση σου και το μοναδικό αλλά και το πιο βασικό πρόβλημα που θα αντιμετωπίσω σε αυτή την περίπτωση είναι ότι καταχώρηση στην βάση κάνουν και άλλοι δύο υπολογιστές οι οποίοι δεν πρέπει να έχουν αυτήν την επιλογή...Θα πρέπει να καταχωρείτε αυτόματα ο αριθμός κυκλοφορίας σε όλους τους άλλους.
MastroGiannis Δημοσ. 11 Δεκεμβρίου 2018 Δημοσ. 11 Δεκεμβρίου 2018 Εντούτοις, κανείς δεν σ’ εμποδίζει να αφαιρέσεις τη δυνατότητα επιλογής αριθμού προς καταχώρηση από τις φόρμες των χρηστών που δεν θα έχουν αυτό το δικαίωμα. Στο παράδειγμά μου, το κουμπί "Καταχώρηση" δουλεύει ακόμα και με αόρατα τα πεδία επιλογής αριθμού, δίνοντας στο χρήστη την εντύπωση της αυτόματης καταχώρησης διατηρώντας όμως παράλληλα τα οφέλη της ελεγχόμενης. Αν όμως επιμείνεις στη λύση της Autonumber θα πρέπει να αντιμετωπίσεις την πιθανότητα καταχώρησης διπλότυπης τιμής (Run time error #3022) με έναν Εrror Ηandler, όπως έγραψε και παραπάνω ο masteripper, και μάλιστα μέσα σε έναν βρόχο Do…Loop While, κάτι το οποίο καθιστά την εφαρμογή όχι και τόσο στιβαρή, δίχως να προσφέρει κάποιο πλεονέκτημα, εφόσον το ζητούμενο είναι η παραγωγή αριθμών σε συγκεκριμένο φάσμα. Πάντως, από κατευθύνσεις και επισημάνσεις πήρες αρκετές. Η επιλογή παραμένει δική σου.
montoya_vou Δημοσ. 12 Δεκεμβρίου 2018 Μέλος Δημοσ. 12 Δεκεμβρίου 2018 13 ώρες πριν, MastroGiannis είπε Εντούτοις, κανείς δεν σ’ εμποδίζει να αφαιρέσεις τη δυνατότητα επιλογής αριθμού προς καταχώρηση από τις φόρμες των χρηστών που δεν θα έχουν αυτό το δικαίωμα. Στο παράδειγμά μου, το κουμπί "Καταχώρηση" δουλεύει ακόμα και με αόρατα τα πεδία επιλογής αριθμού, δίνοντας στο χρήστη την εντύπωση της αυτόματης καταχώρησης διατηρώντας όμως παράλληλα τα οφέλη της ελεγχόμενης. Αν όμως επιμείνεις στη λύση της Autonumber θα πρέπει να αντιμετωπίσεις την πιθανότητα καταχώρησης διπλότυπης τιμής (Run time error #3022) με έναν Εrror Ηandler, όπως έγραψε και παραπάνω ο masteripper, και μάλιστα μέσα σε έναν βρόχο Do…Loop While, κάτι το οποίο καθιστά την εφαρμογή όχι και τόσο στιβαρή, δίχως να προσφέρει κάποιο πλεονέκτημα, εφόσον το ζητούμενο είναι η παραγωγή αριθμών σε συγκεκριμένο φάσμα. Πάντως, από κατευθύνσεις και επισημάνσεις πήρες αρκετές. Η επιλογή παραμένει δική σου. Σε ευχαριστώ πολύ Mastrogianis για τις συμβουλές σου αλλά και τις κατευθύνσεις που μου έδωσες. Θα μιλήσω και με τον άμεσα ενδιαφερόμενο του συστήματος και ανάλογα θα πράξω. Και πάλι ευχαριστώ όλη την κοινότητα για την άμεση απάντηση τους.
montoya_vou Δημοσ. 25 Ιανουαρίου 2019 Μέλος Δημοσ. 25 Ιανουαρίου 2019 Στις 9/12/2018 στις 1:17 ΠΜ, MastroGiannis είπε Καλημέρα και πάλι και καλη χρονία! Τελίκά ενώ οι πληροφορίες που μου ΄έδωσες ήτανε πολλή σαφής δεν θεωρώ ότι θα μπορέσει ο υπεύθυνος του τμήματος να κάνει όλη αυτή την διαδικασία στο μέλλον καθώς εγώ θα βρίσκομαι εδώ μόνο για λίγους μήνες.. Υπάρχει κάποιος πιο εύκολος τρόπος????
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα