Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα στην κοινότητα.

Η απορία μου μπορεί να είναι εντελώς απλή για όσους γνωρίζουν καλά την access.

Έχω έναν πίνακα στον οποίο στο ένα πεδίο καταχωρούμε με αυτόματη αρίθμηση τον αριθμό κυκλοφορίας  δίνοντας μέσω ερωτήματος την τιμή που θέλω να ξεκινάει η αρίθμηση.

Το πρόβλημα μου είναι ότι χρειάζεται  ανά τακτά χρονικά διαστήματα να δίνουμε κάποιον αριθμό κυκλοφορίας εκτός αυτόματης αρίθμησης και να αφαιρείται ο αριθμός που διαλέξαμε από την αυτόματη αρίθμηση...

Ελπίζω να έγινε κατανοητή η απορία μου.

Ευχαριστώ εκ των προτέρων.

Δημοσ. (επεξεργασμένο)

ΑΝ είναι AutoNumber μπορείς να βρίσκεις τα "κενά" και να εισάγεις εκεί τον αριθμό κυκλοφορίας...γενικώς όμως πολλά παιχνίδια με AutoNumber δεν συνιστούνται.... 

Κάτι σαν και αυτό

INSERT INTO Table1 ( ID, Plate )
SELECT 2 AS ID, "XXX" AS Plate ;

Με βάση το σκεπτικό ότι κάποια στιγμή διαγράψαμε την εγγραφή με ID = 2 (AutoNumber)

 

Επεξ/σία από masteripper
Δημοσ.
Μόλις τώρα, masteripper είπε

ΑΝ είναι AutoNumber μπορείς να βρίσκεις τα "κενά" και να εισάγεις εκεί τον αριθμό κυκλοφορίας...γενικώς όμως πολλά παιχνίδια με AutoNumber δεν συνιστούνται.... 

Κάτι σαν και αυτό

INSERT INTO Table1 ( ID, Plate )
SELECT 2 AS ID, "XXX" AS Plate ;

Με βάση το σκεπτικό ότι κάποια στιγμή διαγράψαμε την εγγραφή με ID = 2 (AutoNumber)

Μάλλον δεν έθεσα καλά την ερώτηση μου.

Έχοντας δώσει αυτόματη αρίθμηση να ξεκινάει π.χ από το 7000 θέλω όταν έρθει η ώρα για το 7015 π.χ  το οποίο εγώ το έχω δώσει εκτός βάσης να το προσπεράσει και να πάει στο 7016. 

Δημοσ. (επεξεργασμένο)

Εξαρτάται πως θα το υλοποιήσεις...κανονικά με το που θα θέσεις κάποια στιγμή το 7015 ότιδήποτε που περνάς θα συνεχίζει απο εκεί ..αγνοόντας τα 7000-7015....μια λύση είναι να αλλάξεις σκεπτικό και να χρησιμοποιήσεις ξεχωριστό πίνακα για τα custom...Και για να μην μπλέξεις θα το κάνεις με αρνητικούς αριθμούς οπότε με 1 union θα τα παίρνεις όλα....βέβαια αφου κάνεις εισαγωγή μέσω ερωτήματος και πιθανόν κώδικα θα μπορούσες να βάλεις 1 error handler και να προσπερνάς τα νούμερα που υπάρχουν...λύσεις υπάρχουν αρκετές...το κακό είναι ότι όπως προείπα ..πολύ tinkering στο AutoNumber οδηγεί εύκολα σε corruption....και το μόνο ασφαλές είναι ξεχωριστός πίνακας...ή ίσως κάποια αλλαγή φιλοσοφίας...π.χ. προσθήκη flag για custom και απλως΄φιλτράρεις κατα το δοκούν

Επεξ/σία από masteripper
  • Like 1
Δημοσ.

Σκέψου αυτά που λέει ο masteripper καλά. Επίσης ξανασκέψου αν υπάρχει πιο άμεση λύση:

Γιατί να ξεκινάει από το 7000; Γιατί να κάνει skip το 7015; Μήπως υπάρχει καλύτερη λύση σχεδιαστικά;

  • Like 1
Δημοσ.

Αν και είναι πολύ επισφαλές, το ζητούμενο γίνεται ήδη απ' την αυτόματη αρίθμηση.

Όταν εισαχθεί μή αυτόματα ο αριθμός 7015, η αυτόματη αρίθμηση θα συνεχίσει απ' το 7016.

Τι ακριβώς γίνεται στο σύστημά σου;

Η πρότασή μου όμως είναι να αφαιρέσεις απ' τη στήλη 'Αρ. Κυκλοφορίας' την αυτόματη αρίθμηση και να ελέγχεις με δική σου ρουτίνα την προσαύξηση/επιλογή του αριθμού πριν από κάθε νέα καταχώρηση.

Ένας βοηθητικός πίνακας με όλους τους πιθανούς αριθμούς κυκλοφορίας και ένα ερώτημα εξωτερικής συνένωσης με τον κύριο πίνακα και τη συνθήκη Is Null θα σου δώσει τους διαθέσιμους (αχρησιμοποίητους) αριθμούς κυκλοφορίας.

Η αυτόματη αρίθμηση ίσως προκαλέσει προβλήματα και διενέξεις μετά από κάποια συμπύκνωση της βάσης.

Δημοσ.

Καλησπέρα και σας ευχαριστώ όλους για τις απαντήσεις σας.

Πραγματικά πρέπει να σκεφτώ (και να φρεσκάρω τις γνώσεις μου)λίγο καλύτερα 

Η λύση με το ερώτημα εξωτερικής συνένωσης και την συνθήκη null (όταν τα φρεσκάρω όλα αυτά) ίσως να πιάσει τόπο.

Σίγουρα θα αφαιρέσω την αυτόματη αρίθμηση έπειτα από τις συμβουλές σας.

 

Δημοσ. (επεξεργασμένο)

Καλημέρα και πάλι.

Θα προσπαθήσω να γίνω λίγο πιο κατανοητός όσον αφορά το τι ακριβώς μου ανατέθηκε να κάνω.Υπάρχει ήδη μία βάση για να δίνονται οι αριθμοί κυκλοφορίας αυτόματα από το σημείο που κάθε φορά εμείς θα το θέλουμε ανάλογα με τους αριθμούς που έχουμε διαθέσιμους.Το πρόβλημα είναι κυρίως ότι υπάρχουν στιγμές (σπάνια) που κάποιοι μελλοντικοί αριθμοί δίνονται εκτός συστήματος.

ALTER TABLE [Μητρώο Αριθμών κυκλοφορίας]
ALTER COLUMN [Άυξων Αριθμός] COUNTER (5000,1)

Χρησιμοποιώ αυτού του είδους το ερώτημα για την εκκίνηση.Υπάρχει κάποιος τρόπος να δημιουργώ εξαίρεση για αυτές τις σπάνιες περιπτώσεις που ανέφερα?

Δεν είμαι αρνητικός να ακολουθήσω άλλο τρόπο σχεδίασης αρκεί αν σας είναι εύκολο να μου δώσετε κάποιες κατευθυντήριες.

Σας ευχαριστώ εκ των προτέρων..  

Επεξ/σία από montoya_vou
Δημοσ.

Επισυνάπτω λοιπόν ένα παράδειγμα προς κατανόηση της πρότασής μου.

Η μοναδική φόρμα της εφαρμογής περιέχει ένα πεδίο εισαγωγής του αριθμού εκκίνησης, ένα combo box με τους διαθέσιμους αριθμούς προς καταχώρηση και ένα κουμπί για την καταχώρηση του επιλεγμένου αριθμού.

Εξέτασε τον κώδικα της φόρμας και το ερώτημα προέλευσης του combo box.

 

AutoPlates.zip

Δημοσ.

Καλησπέρα και πάλι,

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

Δημοσ.

Εντούτοις, κανείς δεν σ’ εμποδίζει να αφαιρέσεις τη δυνατότητα επιλογής αριθμού προς καταχώρηση από τις φόρμες των χρηστών που δεν θα έχουν αυτό το δικαίωμα.

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

Αν όμως επιμείνεις στη λύση της Autonumber θα πρέπει να αντιμετωπίσεις την πιθανότητα καταχώρησης διπλότυπης τιμής (Run time error #3022) με έναν Εrror Ηandler, όπως έγραψε  και παραπάνω ο masteripper, και μάλιστα μέσα σε έναν βρόχο DoLoop While, κάτι το οποίο καθιστά την εφαρμογή όχι και τόσο στιβαρή, δίχως να προσφέρει κάποιο πλεονέκτημα,  εφόσον το ζητούμενο είναι η παραγωγή αριθμών σε συγκεκριμένο φάσμα.

Πάντως, από κατευθύνσεις και επισημάνσεις πήρες αρκετές. Η επιλογή παραμένει δική σου.

 

Δημοσ.
13 ώρες πριν, MastroGiannis είπε

Εντούτοις, κανείς δεν σ’ εμποδίζει να αφαιρέσεις τη δυνατότητα επιλογής αριθμού προς καταχώρηση από τις φόρμες των χρηστών που δεν θα έχουν αυτό το δικαίωμα.

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

Αν όμως επιμείνεις στη λύση της Autonumber θα πρέπει να αντιμετωπίσεις την πιθανότητα καταχώρησης διπλότυπης τιμής (Run time error #3022) με έναν Εrror Ηandler, όπως έγραψε  και παραπάνω ο masteripper, και μάλιστα μέσα σε έναν βρόχο DoLoop While, κάτι το οποίο καθιστά την εφαρμογή όχι και τόσο στιβαρή, δίχως να προσφέρει κάποιο πλεονέκτημα,  εφόσον το ζητούμενο είναι η παραγωγή αριθμών σε συγκεκριμένο φάσμα.

Πάντως, από κατευθύνσεις και επισημάνσεις πήρες αρκετές. Η επιλογή παραμένει δική σου.

Σε ευχαριστώ πολύ Mastrogianis για τις συμβουλές σου αλλά και τις κατευθύνσεις που μου έδωσες.

Θα μιλήσω και με τον άμεσα ενδιαφερόμενο του συστήματος και ανάλογα θα πράξω.

Και πάλι ευχαριστώ όλη την  κοινότητα για την άμεση απάντηση τους.

  • 1 μήνα μετά...
Δημοσ.
Στις 9/12/2018 στις 1:17 ΠΜ, MastroGiannis είπε

Καλημέρα και πάλι και καλη χρονία!

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

Υπάρχει κάποιος πιο εύκολος τρόπος???? 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...