Βοήθεια σε Microsoft Access

Φτιάχνω μια βάση δεδομένων και σκάλωσα άγρια. Όποιος ξέρει βοηθάει, όποιος δεν ξέρει αλλά έχει φίλο/-ους που ξέρει/-ουν τους λέει το πρόβλημά μου.

Λοιπόν.

Θέλω να φτιάξω έναν πίνακα, ένα από τα πεδία του οποίου να αντιστοιχεί σε ειδικό τύπο εγγραφής. Να το κάνω πιο λιανά: έστω ασθενής με όνομα τάδε επώνυμο τάδε και λοιπά, και ανάμεσα στα στοιχεία της καταχωρήσεως υπάρχει και ένα ονόματι “θεραπεία”, το οποίο αντιστοιχεί σε ολόκληρο δικό του υποπίνακα με το είδος της θεραπείας, την ημερομηνία της, την έκβασή της, κ.ο.κ. Με λίγα λόγια, ψάχνω τρόπο να φτιάξω πίνακες με custom data types σε ορισμένα πεδία τους. Όλα αυτά σε Access πάντα.

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

23 Απαντήσεις to “Βοήθεια σε Microsoft Access”


  1. 1 Foveros Απριλίου 16, 2008 σε 10:24 μμ

    Mporis na kanis enan ksexoristo pinaka o opios na exei to eidos therapias (ktl), kai ston kentriko sou pinaka (ekei pou exeis tis plirofories tou astheni) na kaneis ena pedio to opio na xrisimopii to Primary Key tou defterou pinaka os input (o tipos tou paidiou tha einai Lookup Field), etsi oi dio pinakes tha einai sindedemenoi.

    To Access 2007 exei upopinakes sta queries pou kanei (crosstab query legete nomizo), to 2003 oxi.

    Auto pou thes na kanis ginete, xoris VBA kai xakkies – ligo diskolo omos na sou eksigiso in-depth apo toso makria :-)

    Euxome na se fotisa me auta ta liga pou egrapsa

  2. 2 Flareman Απριλίου 16, 2008 σε 11:09 μμ

    Θα το ψάξω και θα είμαστε σε επαφή. Αυτή τη στιγμή δε λειτουργώ απόλυτα:)

    Αν δουλέψει πάντως θα είσαι… φοβερός!:D

  3. 3 alkal.gr Απριλίου 17, 2008 σε 1:42 πμ

    Λοιπόν φίλε Σπύρο σου γράφω κάπως αργά, αλλά πιστεύω πως μπορεί να ξενυχτάς για να κάνεις την βάση σου οπότε θα ήθελα και εγώ με την σειρά μου να σε βοηθήσω…

    Η σχέση που αναφέρεις στην γλώσσα των βάσεων δεδομένων λέγεται “ένα προς πολλά”…δηλαδή σε έναν ασθενή μπορεί να αντιστοιχούν πολλές θεραπείες…κατανοητό μέχρι εδώ! Τώρα ποια είναι η λύση η δική μου…

    Κατ’ αρχάς θα διαφωνήσω με τον φίλο Fovero και εξηγούμε γιατί…Ας πούμε ότι έχουμε τους ασθενής 1) Αλέξανδρο 2) Σπύρο
    Με την λύση που σου έδωσε ο Foveros, στον πίνακα ασθενής θα κρατάς πολλές εγγραφές για τον ίδιο ασθενή…δηλαδή

    Αλέξανδρος-θεραπεία 1
    Αλέξανδρος- θεραπεία 5
    Αλέξανδρος- θεραπεία 3
    Σπύρος – θεραπεία 2
    Σπύρος-θεραπεία 4

    Αυτό αποτελεί μια εκλαϊκευση την λύσης του Foverou, φαντάσου στα παραπάνω κάθε φορά να προστίθεται επώνυμο,ημ.γέννησης,πάθηση,τηλέφωνο
    κλπ, κλπ

    Υπενθυμίζω πως η σχέση είναι “ένα προς πολλά”, σε αυτή την περίπτωση λοιπόν το primary key του “ένα” μπαίνει ως foreign key στα “πολλά”. Δηλαδή στον πίνακα ασθενείς κρατάς μια φορά τα στοιχεία του ασθενή σου, δηλαδή:

    1. Αλέξανδρος Παρλαπίπας 15/3/1979 Ουρολοίμοξη 210909090
    2. Σπύρος Ανέστης 25/8/1980 Λοίμοξη Αναπνευστικού 090909011

    Και στον πίνακα Θεραπεία βάζεις:

    ID Ημερομηνία Θεραπεία Ασθενής
    1. 15/4/2008 Αντιβίωση 1
    2. 16/4/2008 Αντιβίωση 1
    3. 17/4/2008 Κορτιζόνη 1
    4. 17/4/2008 Εισπνοές 2

    Με τον τρόπο αυτό υλοποιείται ουσιαστικά με τον πιο σωστό τρόπο η συσχέτιση ένα προς πολλά! Στον πίνακα ΑΣΘΕΝΗΣ κρατάς πληροφορίες μόνο για τον ασθενή σου, στον πίνακα ΘΕΡΑΠΕΙΑ κρατάς πληροφορίες για την θεραπεία και μόνο. Η συσχέτιση των δύο έρχεται μέσα από το foreign key που μπαίνει όμως από την πλευρά των πολλών!

    Περιμένω αποτελέσματα!!!

  4. 4 Papajohn Απριλίου 17, 2008 σε 10:48 πμ

    Και εσυ alkal έχεις “πρόβλημα” γιατί αναγκάζεσαι να αποθηκεύσεις πολλαπλά το “αντιβίωση”! :-p Το απόλυτα “καλύτερο”, καθως η σχέση είναι πολλά προς πολλά (αν πάντα μια θεραπεία μπορεί να έχει γίνει απο πολλούς ασθενείς σε διάφορες ημερομηνίες), είναι να έχεις έναν πίνακα “ασθενείς”, ένα πίνακα “πιθανές θεραπείες” και ένα τρίτο πίνακα “εκανε θεραπεία” που θα συνδυάζεις τους δύο προηγούμενους.

    ΥΓ. Μου αρέσει που κάνουμε την συζήτηση αυτή σε blog τελειόφοιτου ιατρού! Ρε Flareman, Θα αφήσεις καμμια δουλειά και για μας?? :D

  5. 5 Papajohn Απριλίου 17, 2008 σε 12:19 μμ

    A, εχμ, και μια quick and dirty λυση σε περιπτωση που δε μπορείς να τα βγάλεις πέρα με queries σε πολλαπλούς πίνακες.
    Δοκίμασε να φτιάξεις ένα μεγάλο πίνακα όπου αντι για ένα πεδίο με “θεραπεία” το οποίο φαντάζεσαι ως πεδίο συνθετου τύπου, βάλε κάθε στοιχείο του σύνθετου τύπου χύμα ως πεδίο του πίνακα των ασθενών. Κάτι σαν:
    Ονομα-Επωνυμο-Ημερομηνια Θεραπειας-Ειδος Θεραπείας-Κλινικη Θεραπειας-Διευθυνση Ασθενους
    και δεν ξέρω τι άλλο. Όλα χύμα δηλαδή στον ίδιο πίνακα!
    Όπως και εσυ καταλαβαίνεις η παραπάνω λύση έχει αναρίθμητα μειονεκτήματα αλλα νομίζω ότι δε θα έχεις κανένα πρόβλημα να την φτιάξεις.

    ΥΓ. Εντάξει, μη με δείρετε οι υπόλοιποι! :)

  6. 6 Carrot Απριλίου 17, 2008 σε 1:22 μμ

    Μπορεί να γίνει με πολλούς τρόπους ανάλογα πως θες να εμφανίζονται οι πληροφορίες σου σ αυτό το πεδίο “θεραπεία”.

    *Μπορείς να ορίζεις κουμπί να ανοίγει άλλη φόρμα με τα στοιχεία του συγκεκριμένο ασθενή.
    *Μπορείς να το κάνεις σαν “form-subform” και όταν συμπληρώνεις το όνομα του ασθενή, δίπλα να σου εμφανίζονται όλες οι εγγραφές του συγκεκριμένο ασθενή από τον άλλο πίνακα “Θεραπεία”.

    Θέλει πολύ προσεκτικό σχεδιασμό των tables και τις αντίστοιχες relatonships!!

    Θα σε βοηθήσω και με κώδικα εάν χρειαστείς :)

  7. 7 alkal.gr Απριλίου 17, 2008 σε 1:23 μμ

    @papajohn: Έχεις δίκιο και λύση “πολλά προς πολλά”, αλλά και στην dirty!!!

  8. 8 Flareman Απριλίου 17, 2008 σε 1:48 μμ

    Πανικός!!

    Καλημέρα all, ευχαριστώ για τις συμβουλές:) Το θέμα μου ποιο είναι: θέλω να αντιστοιχίσω σε κάθε ασθενή διαφορετικές νοσηλείες, σε κάθε νοσηλεία να αντιστοιχίζω τυχόν διαγνωσμένες νόσους (κατά την εκάστοτε νοσηλεία), οι οποίες ταυτόχρονα να αντιστοιχίζονται και στο ID του ιδίου του ασθενούς, και σε κάθε νόσο να αντιστοιχίζω επιπλέον και επιμέρους θεραπείες… μπλέξαμε τα μπούτια μας δηλαδή:P

    Σημειωτέον, όταν λέω θεραπεία δεν εννοώ κάτι το τυποποιημένο, π.χ. “αντιβίωση” ή “χειρουργείο”. Θέλω μια ξεχωριστη καταχώριση όπου να μπορώ να επιλέξω το είδος της θεραπείας και να συμπληρώνω λεπτομέρειες γι’ αυτήν. Φέξε μου και γλύστρησα δηλαδή, κανονικά πρέπει να γίνει customιά όλο αυτό, αλλά Access είναι το εργαλείο που πρέπει να χρησιμοποιήσω, οπότε κάνω τουμπεκί και τρέχω:/

  9. 9 Papajohn Απριλίου 17, 2008 σε 4:16 μμ

    Χεχε, άκου πως θα πας:
    1.Πίνακας Ι: Σταθερές πληροφορίες ασθενή
    Ονομα_επιθετο_οτι αλλο θες

    2.Πίνακας ΙΙ: Σταθερές Πληροφορίες Νοσηλείας
    Ημερομηνία Ενρξης-Λήξης-ΑΙτία Εισαγωγής-ΑΙτία Εξαγωγής

    3.Πίνακας ΙΙΙ: Διανγωσμένες Νόσοι
    Ονομα-Περιγραφή-Συμπτώματα

    Αυτοί είναι οι σταθεροί σου πίνακες. Απο εδω και πέρα θες άλλους πίνακες οι οποίοι συνδυάζουν τους απο πάνω και είναι οι εξής:

    4. Νοσηλεύτηκε
    Id-ασθενη, id-νοσηλείας.
    Ο πίνακας αυτός μπορεί να ενσωματωθεί στον 2 καθώς κάθε νοσηλεία αφορά έναν ασθενή οπότε σου αρκεί σε κάθε νοσηλεία να βάλεις ένα επιπλέον πεδίο για τον αναφερόμενο ασθενή.

    5. Διενγώσθη
    Id-νοσηλείας και id-διαγνωσμένης νόσου καθως και ένα πεδίο κειμένου στο οποίο μπορείς να γράφεις τις θεραπείες έχεις χρησιμοποιήσει στη συγκεκριμένη νοσηλεία για την συγκεκριμένη ασθένεια. Το συγκεκριμένο μπορεί να επεκταθεί κι άλλο αλλα νομίζω σου αρκεί έτσι.

    Αυτό είναι γενικά το σχήμα που μπορεί να σου δώσει με μηδενική επαναληπτικότητα ικανότητα να αποθηκεύεις ότι θες. Τώρα πως θα το κάνεις σε access δεν έχω ιδέα! :-)

    ΥΓ. Δώσε χαιρετίσματα στον Γιάννη τον Παπ…ου ;-)

  10. 10 Carrot Απριλίου 17, 2008 σε 4:17 μμ

    Γράψε εδώ

    table 1 -1,2,3
    table 2 -1,2,3
    table 3 -1,2,3

    Σημείωσε και το τύπο των 1,2,3 (data,memo,number, lookup values…)ή τουλάχιστον τι θες να έχει εκεί σαν δεδομένα… .
    Και θα σου στείλω την βάση έτοιμη.

  11. 11 Flareman Απριλίου 17, 2008 σε 4:58 μμ

    @PJ: Θα του δώκω:)

    Thx all, νομίζω βρήκα άκρη – τροποποίησα λίγο τη δομή της βάσεως στα χαρτιά και είναι όλα εντάξει, αρχίζει και παίρνει μορφή. Αισθάνομαι λίγο περιορισμένος από την Access ακόμη αλλά…:/ Δε βαριέσαι;)

  12. 12 stefy Απριλίου 18, 2008 σε 11:17 πμ

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

  13. 13 ditikos Απριλίου 18, 2008 σε 3:48 μμ

    Βασικά πρέπει να χρησιμοποιήσει πολλούς πίνακες και το relations διάγραμμα που έχει η access. Αν βρείς προβλήματα πές μου να σου σχεδιάσω την βάση :) Απο φόρμες κτλ, δεν γνωρίζω πολλά (σε access περιβάλλον), το γυρίζω σε web based εφαρμογή (να παίζει και στο iphone ρε αδερφέ).

  14. 14 Flareman Απριλίου 18, 2008 σε 9:36 μμ

    @Στεφ: Βρήκα λύση – αναγκάστηκα να απλοποιήσω λίγο τη δομή στα χαρτιά (και θα χρειαστεί τρελό ζογκλεριλίκι στον κώδικα πίσω από τις φόρμες) αλλά εντάξει… μου τη δίνει που δε μπορώ να φτιάξω αυτό που έχω στο μυαλό μου με όλες τις δυνατότητες που φανταζόμουν, αλλά τα βασικά θα τα κάνει.

    @Δυτ: Αν σου πω ρε Μαγκρούντερ ότι ψηνόμανε να το κάνω σε MySQL/webapp γιατί σπάστηκα και ήθελα να βάλω μέσα όλα τα σέα και τα μέα και τα κομφόρ;:) Αλλά πρέπει σε μια βδομάδα να είναι σετ και δεν έχω πλήρεις μέρες και ώρες διαθέσιμες… οπότε άφκε το – το έχω, είμαι κουλ:D

  15. 15 MICHAEL Ιουλίου 18, 2008 σε 9:19 πμ

    EPIDI MOLIS TORA MPAINO STO OLO THEMA TIS ACCESS THELO NA FTIAXO ENAN PINAKA O OPOIOS THELO NA MOU EMFANIZEI :όνομα, επίθετο, τμήμα , είδος άδειας, πόσες ημέρες πήρε άδεια O KATHE YPALLILOS , την ημερ έναρξης της άδειας και την ημερ επιστροφής του υπάλληλου(γενικά ποιοι πήραν άδεια)
    2) εμφανίσει :όνομα, επίθετο, σύνολο αδειών(κάθε υπάλληλου) και το υπόλοιπο της άδειας
    3)πληκτρολογώντας το επίθετο και το όνομα να μας εμφανίζει ποιοι υπάλληλοι πήραν άδεια.
    KAI KATHE FORA POU PIRE KATHE YPALLHLOS ADEIA NA TO AFAIREI AUTOMATA ANALOGA ME TIN ADEIA POU PHRE
    OPOIOS THA MPOROUSE NA ME BOITHISEI THA TO EKTIMOUSA

  16. 16 Flareman Ιουλίου 18, 2008 σε 12:45 μμ

    @M: Εδώ χρειάζεσαι (όπως το έχω στο μυαλό μου) τρεις πίνακες: έναν με τα ονόματα και τα τμήματα των υπαλλήλων και τις ημέρες αδείας που δικαιούται ο καθένας, έναν δεύτερο με τα τμήματα μόνο (για να τα αντλεί στο κατάλληλο πεδίο του πρώτου και να μπορείς να προσθαφαιρέσεις τμήματα κατά βούλησιν) και έναν τρίτο με τις άδειες. Ο τρίτος ουσιαστικά σε ενδιαφέρει: για κάθε εγγραφή αδείας χρειάζεσαι τον κωδικό του υπαλλήλου που την πήρε και την ημερομηνία ενάρξεως και λήξεως, ώστε να υπολογίζει αυτόματα τη διαφορά μεταξύ τους – δηλαδή τη διάρκεια της αδείας.

    Αφού όλοι οι πίνακες είναι στημένοι σωστά, κατά την κατασκευή της φόρμας που θα συνοψίζει τους εργαζομένους απλώς θα βάλεις ένα πεδίο του οποίου η τιμή θα υπολογίζεται κατά την εκτέλεση, θα προσθέτει όλες τις άδειες για τον προκείμενο εργαζόμενο (με κάποιο κατάλληλο query ίσως) και θα τις αφαιρεί στον κώδικα από το σύνολο των ημερών που δικαιούται.

    Θέλει και λίγο χέρι στον κώδικα αφού χρειάζεσαι αυτόματο υπολογισμό υπολοίπου των αδειών, δεν το γλυτώνεις:/ Τώρα, για την αναζήτηση υπαλλήλου, αυτό γίνεται και ήδη με τις ετοιματζήδικες αναζητήσεις της Access – αν έχεις την όρεξη να το φτιάξεις σε VBA και σε δική σου φόρμα, ακόμα καλύτερα.

  17. 17 MICHAEL Ιουλίου 21, 2008 σε 9:02 πμ

    AYTO GIA TON TRITO PINAKA POU EIPES AN KATALABA KALA,PREPEI NA BALO TON KODIKO TOU UPALLHLOU KAI STON PROTO PINAKA KAI STON TRITO ETSI OSTE NA EINAI PROTEUON KLEIDI TOU PROTOU KAI XENO KLEIDI TOU DEUTEROU???.STON DEUTERO PINAKA TORA POIO XENO KLEIDI PREPEI NA XRHSIMOPOIOISO GIA NA MPOREI NA SUNDETHI ME TON PROTO KAI POIO THA EINAI TO PROTEUON KLEIDI??AUTO ME TON KODIKA POS GINETE NA TON KANO SE SQL DHL TON TROPO THELO SYMFONA ME THN DIKI SOU LOGIKI…SORRY POU SOU KANO TOSES EROTHSEIS…..EXO ANXOTHI ME TO OLO THEMA..
    SE EUXARISTO PANTOS RE ADELFE POU MOU APANTHSES….

  18. 18 Flareman Ιουλίου 21, 2008 σε 12:24 μμ

    Στον πρώτο πίνακα έχεις ήδη ένα πεδίο με αυτόματη αρίθμηση που είναι ρυθμισμένο ως πρωτεύον κλειδί, με Indexing για μοναδικές τιμές – ο αύξων αριθμός του υπαλλήλου, να το πω έτσι. Στον τρίτο με τις άδειες, το αντίστοιχο πεδίο είναι το identifier της κάθε αδείας, που πρέπει να είναι μοναδικό. Η κάθε άδεια από σχεσιακή άποψη ανήκει σε έναν υπάλληλό μόνο, και ο κάθε υπάλληλος μπορεί να έχει περισσότερες από μία άδειες – επομένως η κάθε άδεια πρέπει να έχει ένα πεδίο “κωδικός υπαλλήλου” όπου θα συμπληρώνεται ο αύξων αριθμός του υπαλλήλου που πήρε την άδεια, και το οποίο βάσει των όσων είπαμε δεν είναι απαραίτητο να έχει μοναδικές τιμές. Αυτή η σχέση πρέπει να ρυθμιστεί και στο παράθυρο Relationships της Access:)

    Για τον δεύτερο πίνακα με τα τμήματα, δε θέλει καθορισμό σχέσεως: φτιάχνεις έναν απλό πίνακα με τα τμήματα και στον πρώτο δημιουργείς για κάθε υπάλληλο ένα πεδίο “Τμήμα”, τύπου κειμένου (υποθέτω), και από τις επιλογές του πεδίου στην Access διαλέγεις ως πηγή των δεδομένων του πεδίου τον πίνακα με τα τμήματα. Τέλος:D

    Όταν λες για τον κώδικα να γίνει σε SQL, σε ποιον κώδικα ακριβώς αναφέρεσαι;

  19. 19 MICHAEL Ιουλίου 22, 2008 σε 8:41 πμ

    ennoo pos ginetai se kodika sql na afairei automata tis adeies pou pire o kathe ypallhlos apo to sunolo ton adeion pou dikaioute o kathe ypallhlos kai na mou bgazei me liga logia to upoloipo ton adeion tou kathe ypalilou kai kathe fora pou pairnei adeia o kathe ypalhlos na enimeronetai aytomata to upoloipo..na mou bgazei diladi to ypoloipo…

  20. 20 Flareman Ιουλίου 22, 2008 σε 1:40 μμ

    Σε SQL δε γίνεται (γίνεται δηλαδή αλλά δεν είναι αυτό που θες – για τη δουλειά αυτή χρειάζεται κώδικας σε VBA φοβάμαι. Δεν ξέρω αν γίνεται όντως με κάποιο query, ίσως κάποιος πιο διαβασμένος στην SQL να μπορεί να απαντήσει:(

  21. 22 billis Σεπτεμβρίου 3, 2008 σε 10:41 πμ

    exo ftiaxei enan pinaka gia ths adeies ton ypallhlon tou panepistimiou
    kai exo ena pedio pou legetai ypoloipo kai alla 2 paidia pou ta exo onomasei HMER_ADEIAS_POU_PHRE o ypall kai pou briskontai se enan allo pinaka HMER_ΑΔΕΙΑΣPOU_DIKAIOUTE_O_KATHE_YPAL kai prospathisa mesa stin sql na afaireso tis HMER_ADEIAS_POU_PHRE me HMER_ΑΔΕΙΑΣPOU_DIKAIOUTE_O_KATHE_YPAL se sql kai den xero pos na to kano

  22. 23 Flareman Σεπτεμβρίου 3, 2008 σε 2:41 μμ

    @billi: Η αφαίρεση σε SQL γίνεται με πολύ απλό τρόπο, με ένα απλό query. Έστω πίνακας TABLE με δυο στήλες FIRST και SECOND, και θέλουμε να πάρουμε για κάθε σειρά του πίνακα τη διαφορά του πρώτου από τον δεύτερο:

    “SELECT FIRST – SECOND FROM TABLE;”

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


Υποβολή απάντησης




Κατηγορίες

ΠΡΟΣΦΑΤΑ ΣΧΟΛΙΑ

FiR3Dr4g0n στο WiND Plus Non Stop και στο…
Flareman στο MacBook vs. Vaio
Antonis στο MacBook vs. Vaio
FiR3Dr4g0n στο WiND Plus Non Stop και στο…
deadsoul83 στο WiND Plus Non Stop και στο…

ΗΜΕΡΟΛΟΓΙΟ

Απριλίου 2008
Δ Τ Τ Π Π Σ Κ
« Μαρ   Μάι »
 123456
78910111213
14151617181920
21222324252627
282930  

ΠΑΛΑΙΟΤΕΡΕΣ ΣΕΖΟΝ…

del.icio.us

ASK2USE

ΔΙΑΦΟΡΑ

Μας διαβάζουν τακτικά:

Web site ROI

Powerful Blog Authoring Made Simple.