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

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

Δημοσ.

Kαλησπέρα

Καιρό τώρα παλεύω να φτίαξω ένα προγραμματάκι  με βάσεις δεδομένων χρησιμοποιώντας visual studio και πίνακες της access.

Me το άθλημα είμαι τελειως ερασιτέχνης οπότε κολλάω σε πολλα θεματάκια.Αυτό που θέλω να κάνω ειναι πίνακες οι οποίοι έχουν:

στοιχεία των πελατών

στοιχεία των μηχανημάτων τους.

στοιχεία απο επισκέψεις στα μηχανήματα αυτα 

στοιχεια απο προσφορές στα μηχανήματα αυτα

Εχω κανει τις απαραίτητες σχέσεις.Αυτο που με εχει δυσκολεψει ,είναι το εξής.Στους πίνακες που σχετίζονται μεταξυ τους αποθηκευω τα id''s.Δηλαδη: στον πινακα μηχανηματων εχω id;s του πίνακα πελατών και id's απο ένα αλλο πίνακα (Οπου περιγράφει το είδος του μηχανήματος 2= συναγερμός ,2= γεννητρια κλπ) και στον δυσκολότερο πίνακα των επισκέψεων έχω id's τα ονοματα πελατών απο πινακα πελατες,τα id's των μηχανημάτων,για να ξερω για ποιο αποκλειστικα πρόκειται,και τα id's του είδος των μηχανημάτων.-δηλαδή 3 πίνακες σχετίζονται με αυτον.

 

Κατάφερα μεσω comboboxes να 'βλέπω" τα στοιχεία (αντι για νουμερα πελατων,βλεπω Κωστας-Νικος-Μιχαλης κλπ_)Αυτο που δεν εχω καταφέρει ειναι να κάνω αναζήτηση τον Κωστα ή τον Μιχαλη ή τις γεννήτριες αφού στις απαραίτητες στήλες αντι για ονόματα ειναι αποθηκευμένοι αριθμοί.Την αναζήτηση την κανω με bindingsource.filter 

Με πινακα ερωτημα που εκανα στην access Μπορω πλεον να βλε΄πω και τις στήλες απο τους αλλους πινακες αλλα δεν μου επιτρέπει να κάνω εγγραφη.

Δημοσ.

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

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

Ένα πράγμα που θα σε βοηθήσει στο στήσιμο της βάσης σου είναι η αντιμετώπιση των εγγραφών κάθε πίνακα ως ανεξάρτητες  οντότητες, είτε αντικείμενα είτε συμβάντα, με ιδιαίτερα χαρακτηριστικά, μερικά εκ των οποίων μοναδικά.

Για παράδειγμα, ένας πελάτης, είναι ένα πρόσωπο με ένα όνομα, ένα επώνυμο, ένα ΑΦΜ αλλά, πιθανώς, με πολλά τηλέφωνα επικοινωνίας και, ελπίζω ,πολλές παραγγελίες.

Για να αποθηκευτούν κανονικά τα στοιχεία των παραπάνω  οντοτήτων, θα χρειαστούν τρεις πίνακες: Πελάτες, Τηλέφωνα και Παραγγελίες. Στους πίνακες Τηλέφωνα και Παραγγελίες, εκτός των αυστηρά σχετικών με την κάθε οντότητα στοιχείων, θα εμφανίζεται και το ID του πελάτη στον οποίο θα ανήκουν τα τηλέφωνα και οι παραγγελίες. Όμως, στον πίνακα Παραγγελίες, δεν χρειάζεται το προεπιλεγμένο τηλέφωνο του πελάτη αφού αυτό μπορεί να βρεθεί με ερώτημα στον πίνακα Τηλέφωνα με βάση το ID του πελάτη από τον πίνακα Παραγγελίες.

Για να γίνει όμως μια παραγγελία, θα χρειαστούν άλλοι δυο πίνακες: ο πίνακας Προϊόντα και ο πίνακας ΠροϊόνταΠαραγγελίας, στον οποίο θα διατηρούνται, το ID της παραγγελίας από τον πίνακα Παραγγελίες, το ID του προϊόντος από τον πίνακα Προϊόντα, η τιμή του, το ποσοστό έκπτωσής του και η ποσότητα. Έτσι λοιπόν, μέσω του πίνακα ΠροϊόνταΠαραγγελίας, ακλουθώντας τις συσχετίσεις των πινάκων με ερωτήματα, μπορείς να βρεις ποιος πελάτης παράγγειλε τι, πόσο και πότε, αντλώντας την απαραίτητη πληροφορία από τον αντίστοιχο πίνακα.

Στο πίνακα επισκέψεων, λες πως διατηρείς ως IDs πελατών τα ονόματά τους, τα IDs των μηχανημάτων και το είδος των μηχανημάτων. Κατά την άποψή μου, στον πίνακα επισκέψεων, εκτός των στοιχείων της κάθε επίσκεψης, θα πρέπει να διατηρείς μόνο το ID του ΜηχανήματοςΠελάτη από τον πίνακα ΜηχανήματαΠελατών, στον οποίο θα διατηρείς το ID (όχι το όνομά του) από τον πίνακα Πελάτες και το ID από τον πίνακα Μηχανήματα ο οποίος θα διαθέτει το ID από τον πίνακα ΕίδηΜηχανημάτων.

Αν θέλεις, ανέβασε μια εικόνα με το μέχρι τώρα σχήμα της βάσης σου ώστε να μιλάμε πιο συγκεκριμένα.

Καλή συνέχεια!

Υ.Γ. Γιατί VS και όχι Access;

Δημοσ.

Σε ευχαριστω για την απάντηση.

Eπέλεξα visual,γιατι είχα ασχοληθεί καποτε και μου φάνηκε καλη ίδεα να ξεκινήσω.Παραλληλα δουλεύω και την access,διοτι μου φαίνεται πιο "οικείος" ο προγραμματισμός της.Μπορώ ποιο ανετα να συσχετίσω tables και στοιχεια απο αυτους.

Στον πίνακα επίσκεψης αυτο που συσχετίζω ειναι το id του πελάτη και το id του μηχανήματος.Στην στήλη μηχανημα που αναφέρω (που γραφει 6) συσχετιζω με ενα αλλο πινακα ,ωστε να αντιστοιχιζει το ειδος του μηχανήματος.Το ονομα που αναφερα το θελω για τον εξης λογο.Θελω για κανω μια εγγραφη να μπορω να αναζητησω τον πελατη πχ.Κωστα να μου φιλτραρει τα δεδομενα του ΚΩΣΤΑ μονο -πχ 4 καταγραφες στον πινακα μηχανηματων- και να επιλεξω το μηχανημα που επισκέφτηκα.Αυτο το ελυσα δημιουργωντας τον πινακα machinetblερωτημα οπου αν δεις κατω δειχνει id και πελατη απο τον πινακα πελατων.Ομως σε αυτον τον πινακα δεν μου επιτρεπει να κανω εγγραφες.Κανω κατι λαθος εδω?

δομη database.png

visit form.png

access visit.png

Δημοσ.
10 ώρες πριν, masteripper είπε

Βέβαια θα μπορούσες να δουλέψεις κατευθείαν με Access και να γλυτώσεις όλη την βαβούρα του VS.

Aσ΄το τοτε.Χρονος υπαρχει ,θα ασχοληθω λιγο παραπανω με access να δω που θα καταληξει.Δυστηχως απαιτει πολυ καλες γνωσεις το project μου.

Ευχαριστω για τον χρονο .

Δημοσ.

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

Επειδή έχω δουλέψει σε πολύ βαριες εφαρμογές Access να ξέρεις ότι πολλά ERP ωχριούσαν...

Δημοσ.
Στις 9/4/2020 στις 10:28 ΜΜ, masteripper είπε

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

Επειδή έχω δουλέψει σε πολύ βαριες εφαρμογές Access να ξέρεις ότι πολλά ERP ωχριούσαν...

Μεχρι να φτασω να κανω ERP θα περασουν αιωνες.Πιο πολυ το θελω σαν μια βαση καταχωρησης δεδομενων και ημερολογιο υπενθυμισης για επισκεψεις/συντηρησεις κλπ.Μακαρι να κατααφερω να το προχωρησω τοσο μακρια.

ΤΟ δουλευω λιγο με access και οντως ειναι πολυ πιο απλη η δομηση των φορμων.Ευχαριστω και παλι.

Δημοσ.

όταν κάνεις μια εφαρμογή πολύ σπάνια η γλώσσα/πλατφόρμα αποτελεί εμπόδιο στην ποιότητα της εφαρμογής..προχώρα σιγά - σιγά και θα δεις..

Δημοσ.

Βασίλη,

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

Μην αντιμετωπίζεις τους πίνακες σαν ερωτήματα. Οι πίνακες είναι δομές στις οποίες αποθηκεύονται στο δίσκο τα απολύτως απαραίτητα δεδομένα σε "καθαρή" μορφή, ενώ, τα ερωτήματα είναι προσωρινοί πίνακες στους οποίους αντλούνται και συνδυάζονται τα δεδομένα από πολλούς πίνακες και παρουσιάζονται ως πληροφορίες σε χρήσιμη μορφή και κατανοητή στους ανθρώπους, δίχως αυτές οι πληροφορίες να αποθηκεύονται [συνήθως] κάπου. Κυρίως, οι φόρμες σου θα πρέπει να βασίζονται σε ερωτήματα και όχι απευθείας σε πίνακες.

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

Ως επίδειξη των δυνατοτήτων των ερωτημάτων, η διεύθυνση φωτογραφίας του πελάτη παράγεται αυτόματα στο υποκείμενο ερώτημα της φόρμας και ως όνομα αρχείου υποθέτει τον κωδικό πελάτη που παράγεται επίσης αυτόματα με κατάληξη ".jpg". Για παράδειγμα, αν το ID του πελάτη είναι ο αριθμός 1, τότε ο κωδικός πελάτη που παράγεται είναι ο "cust001" και το αρχείο εικόνας το οποίο αναζητείται στο φάκελο photos στη θέση της εφαρμογής είναι το "cust001.jpg". Συνεπώς, αν αποθηκεύεις τις φωτογραφίες των πελατών στο φάκελο photos με όνομα αρχείου τον κωδικό πελάτη, τότε δεν χρειάζεται να κάνεις κάτι άλλο στην εφαρμογή για να εμφανιστεί η φωτογραφία του στη φόρμα των στοιχείων του, ούτε και να αποθηκεύσεις κάτι σχετικό με το αρχείο φωτογραφίας.

Στη φόρμα "Επισκέψεις", σε μια νέα επίσκεψη, για να δεις τα μηχανήματα του πελάτη, πρέπει να εισάγεις κάποιο στοιχείο επίσκεψης (πχ ημερομηνία) και να πατήσεις στο κουμπί "Αποθήκευση". Τα υπόλοιπα είναι προφανή.

Καλή συνέχεια!

Visits.zip

  • Thanks 1
Δημοσ.
Στις 11/4/2020 στις 8:40 ΜΜ, MastroGiannis είπε

Βασίλη,

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

Μην αντιμετωπίζεις τους πίνακες σαν ερωτήματα. Οι πίνακες είναι δομές στις οποίες αποθηκεύονται στο δίσκο τα απολύτως απαραίτητα δεδομένα σε "καθαρή" μορφή, ενώ, τα ερωτήματα είναι προσωρινοί πίνακες στους οποίους αντλούνται και συνδυάζονται τα δεδομένα από πολλούς πίνακες και παρουσιάζονται ως πληροφορίες σε χρήσιμη μορφή και κατανοητή στους ανθρώπους, δίχως αυτές οι πληροφορίες να αποθηκεύονται [συνήθως] κάπου. Κυρίως, οι φόρμες σου θα πρέπει να βασίζονται σε ερωτήματα και όχι απευθείας σε πίνακες.

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

Ως επίδειξη των δυνατοτήτων των ερωτημάτων, η διεύθυνση φωτογραφίας του πελάτη παράγεται αυτόματα στο υποκείμενο ερώτημα της φόρμας και ως όνομα αρχείου υποθέτει τον κωδικό πελάτη που παράγεται επίσης αυτόματα με κατάληξη ".jpg". Για παράδειγμα, αν το ID του πελάτη είναι ο αριθμός 1, τότε ο κωδικός πελάτη που παράγεται είναι ο "cust001" και το αρχείο εικόνας το οποίο αναζητείται στο φάκελο photos στη θέση της εφαρμογής είναι το "cust001.jpg". Συνεπώς, αν αποθηκεύεις τις φωτογραφίες των πελατών στο φάκελο photos με όνομα αρχείου τον κωδικό πελάτη, τότε δεν χρειάζεται να κάνεις κάτι άλλο στην εφαρμογή για να εμφανιστεί η φωτογραφία του στη φόρμα των στοιχείων του, ούτε και να αποθηκεύσεις κάτι σχετικό με το αρχείο φωτογραφίας.

Στη φόρμα "Επισκέψεις", σε μια νέα επίσκεψη, για να δεις τα μηχανήματα του πελάτη, πρέπει να εισάγεις κάποιο στοιχείο επίσκεψης (πχ ημερομηνία) και να πατήσεις στο κουμπί "Αποθήκευση". Τα υπόλοιπα είναι προφανή.

Καλή συνέχεια!

Visits.zip 129 kB · 2 downloads

Δεν εχω λογια να σε ευχαριστησω.Δυστυχως καποιο προβλημα υγειας ,δεν μου επετρεπε να μπω καθολου να το δω .Φαινεται επαγγελματικη η δουλεια.Νομιζω οτι καταλαβα τι θες να πεις.Θα το ψαξω και αν εχω καποια απορια θα ξαναρωτησω.

Δημοσ.
Στις 14/4/2020 στις 2:01 ΠΜ, MastroGiannis είπε

Να 'σαι καλά!

Σου εύχομαι περαστικά, και για τις απορίες σου -εδώ είμαστε.

Δεν αργησα. :)

Προσπαθω να βαλω στο πλαισιο "framenuleft " buttons .Αντιγραφη/επικόλληση ή νεα εισαγωγή δεν παιζει.εφτιαξα τον κωδικα στην visual  

Select Case Me.fraMenuLeft
            
            Case 1
                strRet = "sfrmCustomerDetails"
            Case 2
                strRet = "sfrmCustomerMachines"
            Case 3
                strRet = "sfrmVisits"

.Πως θετω το button σαν case 4 kκλπ.

Δημοσ.

Καλώς τον!  :)

Πρέπει να έχεις επιλεγμένο το περίγραμμα του fraMenuLeft για να τεθεί στα μέλη του το νέο toggle button.

Στη συνέχεια, θέτεις την τιμή του (Option value) στην καρτέλα Δεδομένα (Data) στο Φύλλο Ιδιοτήτων (Property Sheet).

Στη Select Case, εισάγεις τόσες  Case (πριν από την Case Else) όσες και οι διαθέσιμες επιλογές του μενού και περνάς στη strRet το όνομα της αντίστοιχης φόρμας που θέλεις να εμφανίζεται.

Καλή συνέχεια!

  • Thanks 1
  • 2 εβδομάδες αργότερα...
Δημοσ. (επεξεργασμένο)

Καταιγισμός ερωτήσεων:

1.Οταν ξεκινήσω μια εγγραφη σε ενα πινακα(εχω δημιουργησει καποια υποχρεωτικα πεδία) δεν μου δινει δυνατοτητα να την ακυρωσω και βγαζει συνεχως σφαλμα οτι εχω αφησει κενα πεδια.

2.Εχω δημιουργησει ενα ερωτημα στον πινακα visits,το οποιο ελεγχει με ερωτημα το πεδιο των" επομενων επισκεψεων" ωστε οταν γινει <7 ημερών απο σημερα να φανεί σε αυτον το ερωτημα.Σαν ημερολογιο δηλαδη ωστε να με ειδοποιει οτι ηρθε για το συγκεκριμενο μηχανημα η ημερομηνια για επανελεγχο.Εχω προσπαθησει να μεσω κωδικα στο main form load να ελεγχει με rowcount>0 να ανοιγει μια μικρη φορμα με τα συγκεκριμενα ραντεβου.

3.Υπαρχει τροπος να ελεγχω ενα πινακα (των machines) ολοκληρο?χωρις την αναγκαστικη προσθηκη ονοματος.Πχ θελω να κανω αναζητηση ποια μηχανη φοραει ττα ταδε φιλτρα .

4.Υπαρχει τροπος να μηδενιζει το id σε καποιους πινακες?(εχω δει tutorials) που θελει νεους πινακες κλπ,αν υπαρχει καποια ευκολη διαδικασια..)

5.Καταχωρούμε με κεφαλαία ή μικρά?Υπαρχει καποια διαφορα σε αυτο?Πχ σε αναζητηση αυριο-μεθαυριο ή στον τονισμο κλπ?

 

Ευχαριστω.

Επεξ/σία από vasilllis
Δημοσ. (επεξεργασμένο)
  1. Γενικά, ακυρώνουμε μια επεξεργασία ή μια νέα εγγραφή πατώντας [δυο τρεις φορές] Esc. Θα πρέπει όμως να είσαι πιο συγκεκριμένος. Πού έχεις κάνει υποχρεωτικά τα πεδία; πού προσπαθείς να εισάγεις νέα εγγραφή; στη φόρμα ή στον πίνακα;  Να θυμάσαι πως ο χειρισμός των δεδομένων θα πρέπει να γίνεται μέσω φόρμας η οποία θα επικοινωνεί με τους πίνακες μέσω ερωτήματος. Σε επίπεδο φόρμας θα πρέπει να γίνεται ο έλεγχος και η επικύρωση των δεδομένων.
  2. Αν η φόρμα ονομάζεται frmThisWeekVisists και βασίζεται στο ερώτημα qryThisWeekVisits, τότε ο παρακάτω κώδικας θα ανοίξει τη φόρμα αν το ερώτημα επιστρέφει εγγραφές:
    With CurrentDb.QueryDefs("qryThisWeekVisits").OpenRecordset
        If .RecordCount > 0 Then
            DoCmd.OpenForm "frmThisWeekVisists"
        End If
        .Close
    End With
  1. Φυσικά και μπορείς! Κάνεις ένα ερώτημα στον πίνακα tblMachines με κριτήριο το φίλτρο της μηχανής, αν και τα εξαρτήματα της μηχανής θα πρέπει να είναι σε ξεχωριστό πίνακα (πχ. tblMachineParts).
  2. Αν διαγράψεις όλες τις εγγραφές από έναν πίνακα και κάνεις Συμπύκνωση και Επιδιόρθωση (Combact and Repaire), τότε μηδενίζει και το Autonumber πεδίο του πίνακα.
  3. Προσωπικά, προτιμώ να καταχωρώ με μικρά και τονισμένα διότι αντιμετωπίζω  ευκολότερα καταχωρίσεις με λατινικούς χαρακτήρες στη θέση ελληνικών και αντίστροφα. Στη συνέχεια, παρουσιάζω τα δεδομένα στα ερωτήματα στη μορφή που απαιτείται. Μπορείς εύκολα να μετατρέψεις τα τονισμένα μικρά μιας λέξης σε άτονα κεφαλαία, αλλά το αντίστροφο είναι δύσκολο.

Αυτά για την ώρα.

Ελπίζω να βοήθησα λιγάκι.

Επεξ/σία από MastroGiannis
  • Thanks 1

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

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

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

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

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

Σύνδεση

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

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