vasilllis Δημοσ. 7 Απριλίου 2020 Δημοσ. 7 Απριλίου 2020 Kαλησπέρα Καιρό τώρα παλεύω να φτίαξω ένα προγραμματάκι με βάσεις δεδομένων χρησιμοποιώντας visual studio και πίνακες της access. Me το άθλημα είμαι τελειως ερασιτέχνης οπότε κολλάω σε πολλα θεματάκια.Αυτό που θέλω να κάνω ειναι πίνακες οι οποίοι έχουν: στοιχεία των πελατών στοιχεία των μηχανημάτων τους. στοιχεία απο επισκέψεις στα μηχανήματα αυτα στοιχεια απο προσφορές στα μηχανήματα αυτα Εχω κανει τις απαραίτητες σχέσεις.Αυτο που με εχει δυσκολεψει ,είναι το εξής.Στους πίνακες που σχετίζονται μεταξυ τους αποθηκευω τα id''s.Δηλαδη: στον πινακα μηχανηματων εχω id;s του πίνακα πελατών και id's απο ένα αλλο πίνακα (Οπου περιγράφει το είδος του μηχανήματος 2= συναγερμός ,2= γεννητρια κλπ) και στον δυσκολότερο πίνακα των επισκέψεων έχω id's τα ονοματα πελατών απο πινακα πελατες,τα id's των μηχανημάτων,για να ξερω για ποιο αποκλειστικα πρόκειται,και τα id's του είδος των μηχανημάτων.-δηλαδή 3 πίνακες σχετίζονται με αυτον. Κατάφερα μεσω comboboxes να 'βλέπω" τα στοιχεία (αντι για νουμερα πελατων,βλεπω Κωστας-Νικος-Μιχαλης κλπ_)Αυτο που δεν εχω καταφέρει ειναι να κάνω αναζήτηση τον Κωστα ή τον Μιχαλη ή τις γεννήτριες αφού στις απαραίτητες στήλες αντι για ονόματα ειναι αποθηκευμένοι αριθμοί.Την αναζήτηση την κανω με bindingsource.filter Με πινακα ερωτημα που εκανα στην access Μπορω πλεον να βλε΄πω και τις στήλες απο τους αλλους πινακες αλλα δεν μου επιτρέπει να κάνω εγγραφη.
MastroGiannis Δημοσ. 8 Απριλίου 2020 Δημοσ. 8 Απριλίου 2020 Καταρχάς, ο τίτλος του θέματος είναι πολύ γενικός και άσχετος με το ερώτημά σου. Θα έπρεπε να αναφέρεται σε σχέσεις πινάκων ή σχεδιασμό βάσης δεδομένων. Με βάση την περιγραφή σου -η οποία δεν είναι και τόσο σαφής-, υποψιάζομαι πως οι πίνακες έχουν βασικά σχεδιαστικά λάθη. Ένα πράγμα που θα σε βοηθήσει στο στήσιμο της βάσης σου είναι η αντιμετώπιση των εγγραφών κάθε πίνακα ως ανεξάρτητες οντότητες, είτε αντικείμενα είτε συμβάντα, με ιδιαίτερα χαρακτηριστικά, μερικά εκ των οποίων μοναδικά. Για παράδειγμα, ένας πελάτης, είναι ένα πρόσωπο με ένα όνομα, ένα επώνυμο, ένα ΑΦΜ αλλά, πιθανώς, με πολλά τηλέφωνα επικοινωνίας και, ελπίζω ,πολλές παραγγελίες. Για να αποθηκευτούν κανονικά τα στοιχεία των παραπάνω οντοτήτων, θα χρειαστούν τρεις πίνακες: Πελάτες, Τηλέφωνα και Παραγγελίες. Στους πίνακες Τηλέφωνα και Παραγγελίες, εκτός των αυστηρά σχετικών με την κάθε οντότητα στοιχείων, θα εμφανίζεται και το ID του πελάτη στον οποίο θα ανήκουν τα τηλέφωνα και οι παραγγελίες. Όμως, στον πίνακα Παραγγελίες, δεν χρειάζεται το προεπιλεγμένο τηλέφωνο του πελάτη αφού αυτό μπορεί να βρεθεί με ερώτημα στον πίνακα Τηλέφωνα με βάση το ID του πελάτη από τον πίνακα Παραγγελίες. Για να γίνει όμως μια παραγγελία, θα χρειαστούν άλλοι δυο πίνακες: ο πίνακας Προϊόντα και ο πίνακας ΠροϊόνταΠαραγγελίας, στον οποίο θα διατηρούνται, το ID της παραγγελίας από τον πίνακα Παραγγελίες, το ID του προϊόντος από τον πίνακα Προϊόντα, η τιμή του, το ποσοστό έκπτωσής του και η ποσότητα. Έτσι λοιπόν, μέσω του πίνακα ΠροϊόνταΠαραγγελίας, ακλουθώντας τις συσχετίσεις των πινάκων με ερωτήματα, μπορείς να βρεις ποιος πελάτης παράγγειλε τι, πόσο και πότε, αντλώντας την απαραίτητη πληροφορία από τον αντίστοιχο πίνακα. Στο πίνακα επισκέψεων, λες πως διατηρείς ως IDs πελατών τα ονόματά τους, τα IDs των μηχανημάτων και το είδος των μηχανημάτων. Κατά την άποψή μου, στον πίνακα επισκέψεων, εκτός των στοιχείων της κάθε επίσκεψης, θα πρέπει να διατηρείς μόνο το ID του ΜηχανήματοςΠελάτη από τον πίνακα ΜηχανήματαΠελατών, στον οποίο θα διατηρείς το ID (όχι το όνομά του) από τον πίνακα Πελάτες και το ID από τον πίνακα Μηχανήματα ο οποίος θα διαθέτει το ID από τον πίνακα ΕίδηΜηχανημάτων. Αν θέλεις, ανέβασε μια εικόνα με το μέχρι τώρα σχήμα της βάσης σου ώστε να μιλάμε πιο συγκεκριμένα. Καλή συνέχεια! Υ.Γ. Γιατί VS και όχι Access;
vasilllis Δημοσ. 8 Απριλίου 2020 Μέλος Δημοσ. 8 Απριλίου 2020 Σε ευχαριστω για την απάντηση. Eπέλεξα visual,γιατι είχα ασχοληθεί καποτε και μου φάνηκε καλη ίδεα να ξεκινήσω.Παραλληλα δουλεύω και την access,διοτι μου φαίνεται πιο "οικείος" ο προγραμματισμός της.Μπορώ ποιο ανετα να συσχετίσω tables και στοιχεια απο αυτους. Στον πίνακα επίσκεψης αυτο που συσχετίζω ειναι το id του πελάτη και το id του μηχανήματος.Στην στήλη μηχανημα που αναφέρω (που γραφει 6) συσχετιζω με ενα αλλο πινακα ,ωστε να αντιστοιχιζει το ειδος του μηχανήματος.Το ονομα που αναφερα το θελω για τον εξης λογο.Θελω για κανω μια εγγραφη να μπορω να αναζητησω τον πελατη πχ.Κωστα να μου φιλτραρει τα δεδομενα του ΚΩΣΤΑ μονο -πχ 4 καταγραφες στον πινακα μηχανηματων- και να επιλεξω το μηχανημα που επισκέφτηκα.Αυτο το ελυσα δημιουργωντας τον πινακα machinetblερωτημα οπου αν δεις κατω δειχνει id και πελατη απο τον πινακα πελατων.Ομως σε αυτον τον πινακα δεν μου επιτρεπει να κανω εγγραφες.Κανω κατι λαθος εδω?
masteripper Δημοσ. 9 Απριλίου 2020 Δημοσ. 9 Απριλίου 2020 Βέβαια θα μπορούσες να δουλέψεις κατευθείαν με Access και να γλυτώσεις όλη την βαβούρα του VS.
vasilllis Δημοσ. 9 Απριλίου 2020 Μέλος Δημοσ. 9 Απριλίου 2020 10 ώρες πριν, masteripper είπε Βέβαια θα μπορούσες να δουλέψεις κατευθείαν με Access και να γλυτώσεις όλη την βαβούρα του VS. Aσ΄το τοτε.Χρονος υπαρχει ,θα ασχοληθω λιγο παραπανω με access να δω που θα καταληξει.Δυστηχως απαιτει πολυ καλες γνωσεις το project μου. Ευχαριστω για τον χρονο .
masteripper Δημοσ. 9 Απριλίου 2020 Δημοσ. 9 Απριλίου 2020 Το ότι θα το κάνεις σε VS δεν σημαίνει ότι αυτομάτως η εφαρμογή θα αναβαθμιστεί σε κάτι πιο σπεσιαλ. Επειδή έχω δουλέψει σε πολύ βαριες εφαρμογές Access να ξέρεις ότι πολλά ERP ωχριούσαν...
vasilllis Δημοσ. 11 Απριλίου 2020 Μέλος Δημοσ. 11 Απριλίου 2020 Στις 9/4/2020 στις 10:28 ΜΜ, masteripper είπε Το ότι θα το κάνεις σε VS δεν σημαίνει ότι αυτομάτως η εφαρμογή θα αναβαθμιστεί σε κάτι πιο σπεσιαλ. Επειδή έχω δουλέψει σε πολύ βαριες εφαρμογές Access να ξέρεις ότι πολλά ERP ωχριούσαν... Μεχρι να φτασω να κανω ERP θα περασουν αιωνες.Πιο πολυ το θελω σαν μια βαση καταχωρησης δεδομενων και ημερολογιο υπενθυμισης για επισκεψεις/συντηρησεις κλπ.Μακαρι να κατααφερω να το προχωρησω τοσο μακρια. ΤΟ δουλευω λιγο με access και οντως ειναι πολυ πιο απλη η δομηση των φορμων.Ευχαριστω και παλι.
masteripper Δημοσ. 11 Απριλίου 2020 Δημοσ. 11 Απριλίου 2020 όταν κάνεις μια εφαρμογή πολύ σπάνια η γλώσσα/πλατφόρμα αποτελεί εμπόδιο στην ποιότητα της εφαρμογής..προχώρα σιγά - σιγά και θα δεις..
MastroGiannis Δημοσ. 11 Απριλίου 2020 Δημοσ. 11 Απριλίου 2020 Βασίλη, Παρατηρώ πως προσπαθείς να επαναλάβεις στοιχεία από τους πρωτεύοντες πίνακες στους εξαρτημένους. Το να αποθηκεύεις ένα στοιχείο σε πολλές θέσεις είναι αυτό που προκαλεί σύγχυση και βάζει σε κίνδυνο την ακεραιότητα των δεδομένων. Μην αντιμετωπίζεις τους πίνακες σαν ερωτήματα. Οι πίνακες είναι δομές στις οποίες αποθηκεύονται στο δίσκο τα απολύτως απαραίτητα δεδομένα σε "καθαρή" μορφή, ενώ, τα ερωτήματα είναι προσωρινοί πίνακες στους οποίους αντλούνται και συνδυάζονται τα δεδομένα από πολλούς πίνακες και παρουσιάζονται ως πληροφορίες σε χρήσιμη μορφή και κατανοητή στους ανθρώπους, δίχως αυτές οι πληροφορίες να αποθηκεύονται [συνήθως] κάπου. Κυρίως, οι φόρμες σου θα πρέπει να βασίζονται σε ερωτήματα και όχι απευθείας σε πίνακες. Θα σου προτείνω κι εγώ να παραμείνεις στο "οικείο" περιβάλλον της Access, ειδικά αν πρόκειται για εφαρμογή για προσωπική σου χρήση, και επισυνάπτω ένα μικρό δείγμα βασισμένο στις ανάγκες σου, ώστε να έχεις μια αφετηρία. Παρέχει ήδη αρκετά χαρακτηριστικά που πιστεύω θα σε εμπνεύσουν και προχωρώντας στα κόλπα της Access θα μπορέσεις να το αναπτύξεις περαιτέρω, είτε το ίδιο είτε ένα νέο. Ως επίδειξη των δυνατοτήτων των ερωτημάτων, η διεύθυνση φωτογραφίας του πελάτη παράγεται αυτόματα στο υποκείμενο ερώτημα της φόρμας και ως όνομα αρχείου υποθέτει τον κωδικό πελάτη που παράγεται επίσης αυτόματα με κατάληξη ".jpg". Για παράδειγμα, αν το ID του πελάτη είναι ο αριθμός 1, τότε ο κωδικός πελάτη που παράγεται είναι ο "cust001" και το αρχείο εικόνας το οποίο αναζητείται στο φάκελο photos στη θέση της εφαρμογής είναι το "cust001.jpg". Συνεπώς, αν αποθηκεύεις τις φωτογραφίες των πελατών στο φάκελο photos με όνομα αρχείου τον κωδικό πελάτη, τότε δεν χρειάζεται να κάνεις κάτι άλλο στην εφαρμογή για να εμφανιστεί η φωτογραφία του στη φόρμα των στοιχείων του, ούτε και να αποθηκεύσεις κάτι σχετικό με το αρχείο φωτογραφίας. Στη φόρμα "Επισκέψεις", σε μια νέα επίσκεψη, για να δεις τα μηχανήματα του πελάτη, πρέπει να εισάγεις κάποιο στοιχείο επίσκεψης (πχ ημερομηνία) και να πατήσεις στο κουμπί "Αποθήκευση". Τα υπόλοιπα είναι προφανή. Καλή συνέχεια! Visits.zip 1
vasilllis Δημοσ. 13 Απριλίου 2020 Μέλος Δημοσ. 13 Απριλίου 2020 Στις 11/4/2020 στις 8:40 ΜΜ, MastroGiannis είπε Βασίλη, Παρατηρώ πως προσπαθείς να επαναλάβεις στοιχεία από τους πρωτεύοντες πίνακες στους εξαρτημένους. Το να αποθηκεύεις ένα στοιχείο σε πολλές θέσεις είναι αυτό που προκαλεί σύγχυση και βάζει σε κίνδυνο την ακεραιότητα των δεδομένων. Μην αντιμετωπίζεις τους πίνακες σαν ερωτήματα. Οι πίνακες είναι δομές στις οποίες αποθηκεύονται στο δίσκο τα απολύτως απαραίτητα δεδομένα σε "καθαρή" μορφή, ενώ, τα ερωτήματα είναι προσωρινοί πίνακες στους οποίους αντλούνται και συνδυάζονται τα δεδομένα από πολλούς πίνακες και παρουσιάζονται ως πληροφορίες σε χρήσιμη μορφή και κατανοητή στους ανθρώπους, δίχως αυτές οι πληροφορίες να αποθηκεύονται [συνήθως] κάπου. Κυρίως, οι φόρμες σου θα πρέπει να βασίζονται σε ερωτήματα και όχι απευθείας σε πίνακες. Θα σου προτείνω κι εγώ να παραμείνεις στο "οικείο" περιβάλλον της Access, ειδικά αν πρόκειται για εφαρμογή για προσωπική σου χρήση, και επισυνάπτω ένα μικρό δείγμα βασισμένο στις ανάγκες σου, ώστε να έχεις μια αφετηρία. Παρέχει ήδη αρκετά χαρακτηριστικά που πιστεύω θα σε εμπνεύσουν και προχωρώντας στα κόλπα της Access θα μπορέσεις να το αναπτύξεις περαιτέρω, είτε το ίδιο είτε ένα νέο. Ως επίδειξη των δυνατοτήτων των ερωτημάτων, η διεύθυνση φωτογραφίας του πελάτη παράγεται αυτόματα στο υποκείμενο ερώτημα της φόρμας και ως όνομα αρχείου υποθέτει τον κωδικό πελάτη που παράγεται επίσης αυτόματα με κατάληξη ".jpg". Για παράδειγμα, αν το ID του πελάτη είναι ο αριθμός 1, τότε ο κωδικός πελάτη που παράγεται είναι ο "cust001" και το αρχείο εικόνας το οποίο αναζητείται στο φάκελο photos στη θέση της εφαρμογής είναι το "cust001.jpg". Συνεπώς, αν αποθηκεύεις τις φωτογραφίες των πελατών στο φάκελο photos με όνομα αρχείου τον κωδικό πελάτη, τότε δεν χρειάζεται να κάνεις κάτι άλλο στην εφαρμογή για να εμφανιστεί η φωτογραφία του στη φόρμα των στοιχείων του, ούτε και να αποθηκεύσεις κάτι σχετικό με το αρχείο φωτογραφίας. Στη φόρμα "Επισκέψεις", σε μια νέα επίσκεψη, για να δεις τα μηχανήματα του πελάτη, πρέπει να εισάγεις κάποιο στοιχείο επίσκεψης (πχ ημερομηνία) και να πατήσεις στο κουμπί "Αποθήκευση". Τα υπόλοιπα είναι προφανή. Καλή συνέχεια! Visits.zip 129 kB · 2 downloads Δεν εχω λογια να σε ευχαριστησω.Δυστυχως καποιο προβλημα υγειας ,δεν μου επετρεπε να μπω καθολου να το δω .Φαινεται επαγγελματικη η δουλεια.Νομιζω οτι καταλαβα τι θες να πεις.Θα το ψαξω και αν εχω καποια απορια θα ξαναρωτησω.
MastroGiannis Δημοσ. 14 Απριλίου 2020 Δημοσ. 14 Απριλίου 2020 Να 'σαι καλά! Σου εύχομαι περαστικά, και για τις απορίες σου -εδώ είμαστε. 1
vasilllis Δημοσ. 17 Απριλίου 2020 Μέλος Δημοσ. 17 Απριλίου 2020 Στις 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κλπ.
MastroGiannis Δημοσ. 17 Απριλίου 2020 Δημοσ. 17 Απριλίου 2020 Καλώς τον! Πρέπει να έχεις επιλεγμένο το περίγραμμα του fraMenuLeft για να τεθεί στα μέλη του το νέο toggle button. Στη συνέχεια, θέτεις την τιμή του (Option value) στην καρτέλα Δεδομένα (Data) στο Φύλλο Ιδιοτήτων (Property Sheet). Στη Select Case, εισάγεις τόσες Case (πριν από την Case Else) όσες και οι διαθέσιμες επιλογές του μενού και περνάς στη strRet το όνομα της αντίστοιχης φόρμας που θέλεις να εμφανίζεται. Καλή συνέχεια! 1
vasilllis Δημοσ. 1 Μαΐου 2020 Μέλος Δημοσ. 1 Μαΐου 2020 (επεξεργασμένο) Καταιγισμός ερωτήσεων: 1.Οταν ξεκινήσω μια εγγραφη σε ενα πινακα(εχω δημιουργησει καποια υποχρεωτικα πεδία) δεν μου δινει δυνατοτητα να την ακυρωσω και βγαζει συνεχως σφαλμα οτι εχω αφησει κενα πεδια. 2.Εχω δημιουργησει ενα ερωτημα στον πινακα visits,το οποιο ελεγχει με ερωτημα το πεδιο των" επομενων επισκεψεων" ωστε οταν γινει <7 ημερών απο σημερα να φανεί σε αυτον το ερωτημα.Σαν ημερολογιο δηλαδη ωστε να με ειδοποιει οτι ηρθε για το συγκεκριμενο μηχανημα η ημερομηνια για επανελεγχο.Εχω προσπαθησει να μεσω κωδικα στο main form load να ελεγχει με rowcount>0 να ανοιγει μια μικρη φορμα με τα συγκεκριμενα ραντεβου. 3.Υπαρχει τροπος να ελεγχω ενα πινακα (των machines) ολοκληρο?χωρις την αναγκαστικη προσθηκη ονοματος.Πχ θελω να κανω αναζητηση ποια μηχανη φοραει ττα ταδε φιλτρα . 4.Υπαρχει τροπος να μηδενιζει το id σε καποιους πινακες?(εχω δει tutorials) που θελει νεους πινακες κλπ,αν υπαρχει καποια ευκολη διαδικασια..) 5.Καταχωρούμε με κεφαλαία ή μικρά?Υπαρχει καποια διαφορα σε αυτο?Πχ σε αναζητηση αυριο-μεθαυριο ή στον τονισμο κλπ? Ευχαριστω. Επεξ/σία 1 Μαΐου 2020 από vasilllis
MastroGiannis Δημοσ. 3 Μαΐου 2020 Δημοσ. 3 Μαΐου 2020 (επεξεργασμένο) Γενικά, ακυρώνουμε μια επεξεργασία ή μια νέα εγγραφή πατώντας [δυο τρεις φορές] Esc. Θα πρέπει όμως να είσαι πιο συγκεκριμένος. Πού έχεις κάνει υποχρεωτικά τα πεδία; πού προσπαθείς να εισάγεις νέα εγγραφή; στη φόρμα ή στον πίνακα; Να θυμάσαι πως ο χειρισμός των δεδομένων θα πρέπει να γίνεται μέσω φόρμας η οποία θα επικοινωνεί με τους πίνακες μέσω ερωτήματος. Σε επίπεδο φόρμας θα πρέπει να γίνεται ο έλεγχος και η επικύρωση των δεδομένων. Αν η φόρμα ονομάζεται frmThisWeekVisists και βασίζεται στο ερώτημα qryThisWeekVisits, τότε ο παρακάτω κώδικας θα ανοίξει τη φόρμα αν το ερώτημα επιστρέφει εγγραφές: With CurrentDb.QueryDefs("qryThisWeekVisits").OpenRecordset If .RecordCount > 0 Then DoCmd.OpenForm "frmThisWeekVisists" End If .Close End With Φυσικά και μπορείς! Κάνεις ένα ερώτημα στον πίνακα tblMachines με κριτήριο το φίλτρο της μηχανής, αν και τα εξαρτήματα της μηχανής θα πρέπει να είναι σε ξεχωριστό πίνακα (πχ. tblMachineParts). Αν διαγράψεις όλες τις εγγραφές από έναν πίνακα και κάνεις Συμπύκνωση και Επιδιόρθωση (Combact and Repaire), τότε μηδενίζει και το Autonumber πεδίο του πίνακα. Προσωπικά, προτιμώ να καταχωρώ με μικρά και τονισμένα διότι αντιμετωπίζω ευκολότερα καταχωρίσεις με λατινικούς χαρακτήρες στη θέση ελληνικών και αντίστροφα. Στη συνέχεια, παρουσιάζω τα δεδομένα στα ερωτήματα στη μορφή που απαιτείται. Μπορείς εύκολα να μετατρέψεις τα τονισμένα μικρά μιας λέξης σε άτονα κεφαλαία, αλλά το αντίστροφο είναι δύσκολο. Αυτά για την ώρα. Ελπίζω να βοήθησα λιγάκι. Επεξ/σία 3 Μαΐου 2020 από MastroGiannis 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα