Professional Documents
Culture Documents
ΣΥΝ∆ΥΑΣΜΟΙ ΠΛΗΚΤΡΩΝ
ΓΕΝΙΚΗΣ ΧΡΗΣΕΩΣ ΤΟ ΚΕΝΤΡΙΚΟ ΠΑΡΑΘΥΡΟ ∆ΙΑΧΕΙΡΙΣΗΣ ΤΗΣ ΒΑΣΗΣ
Άνοιγµα Βάσης ∆εδοµένων Ctrl + O ∆Ε∆ΟΜΕΝΩΝ (DATABASE WINDOW)
Κλείσιµο Βάσης ∆εδοµένων Ctrl + W
Εκτύπωση Τρέχουσας Όψης Ctrl + P
∆ιαγραφή Delete
Αναίρεση Ctrl + Z
Λήψη Βοήθειας F1
Ορθογραφικός Έλεγχος F7
Εισαγωγή Εγγραφής Ctrl + +
∆ιαγραφή Εγγραφής Ctrl + -
Αποθήκευση Εγγραφής Shift + Enter
Αναίρεση Μεταβολών Esc
Εισαγωγή Ηµεροµηνίας Ctrl + ;
Εισαγωγή Ώρας Ctrl + :
Μετακίνηση σε Εφαρµογή Alt + Tab
ΕΠΕΞΕΡΓΑΣΙΑΣ ΚΕΙΜΕΝΟΥ
Αποκοπή Κειµένου Ctrl + X
Αντιγραφή Κειµένου Ctrl + C
Επικόλληση Κειµένου Ctrl + V
Αναζήτηση Κειµένου Ctrl + F
Αντικατάσταση Κειµένου Ctrl + H
Επιλογή Όλου του Κειµένου Ctrl + A
ΠΛΟΗΓΗΣΗΣ ΣΕ ΕΓΓΡΑΦΕΣ
Επόµενο Πεδίο Tab
Προηγούµενο Πεδίο Shift + Tab ΤΥΠΟΙ ΑΝΤΙΚΕΙΜΕΝΩΝ ΤΗΣ ΒΑΣΗΣ ∆Ε∆ΟΜΕΝΩΝ
Επόµενη Οθόνη Page Down
Προηγούµενη Οθόνη Page Up
Πρώτη Εγγραφή Ctrl + ↑ Πίνακες (Tables): χρησιµοποιούνται για την αποθήκευση
Τελευταία Εγγραφή Ctrl + ↓ των δεδοµένων της βάσης.
Ερωτήµατα (Queries): επιτρέπουν την ανάκτηση, µετα-
ΠΡΟΒΟΛΗΣ ΣΧΕ∆ΙΑΣΗΣ
βολή και ταξινόµηση των δεδοµένων της βάσης.
Φύλλο Ιδιοτήτων Alt + Enter
Αποθήκευση Αντικειµένου Ctrl + S Φόρµες (Forms): χρησιµοποιούνται για την αλληλεπί-
Έντονη Γραφή (Bold) Ctrl + B δραση του χρήση µε την εφαρµογή.
Πλάγια Γραφή (Italics) Ctrl + I Αναφορές (Reports): επιτρέπουν την προεπισκόπηση και
Υπογράµµιση (Underline) Ctrl + U την εκτύπωση των δεδοµένων της βάσης.
ΛΕΙΤΟΥΡΓΙΕΣ ΜΕ ΑΝΤΙΚΕΙΜΕΝΑ Σελίδες (Pages): επιτρέπουν την προσπέλαση των δεδοµέ-
Ενεργοποίηση και χρήση του νων δια της χρήσης του παγκοσµίου διαδικτύου.
αντικειµένου της βάσης. Μακροεντολές (Macros): χρησιµοποιούνται για την αυτο-
µατοποίηση ορισµένων διαδικασιών.
Μεταφορά του αντικειµένου
σε προβολή σχεδίασης Λειτουργικές µονάδες (Modules): επιτρέπουν την ανά-
πτυξη εφαρµογών σε γλώσσα VBA.
∆ηµιουργία νέου αντικειµένου
της βάσης δεδοµένων
Συνοπτικός Οδηγός Χρήσης της Microsoft Access 2000 2
Η δηµιουργία ενός ερωτήµατος στη Microsoft Access µπορεί Οι µακροεντολές ορίζονται ως ειδικές οµάδες ενεργειών
να γίνει τόσο σε προβολή σχεδίασης όσο και δια της χρήσης της Microsoft Access οι οποίες εκτελούνται σε ένα και
του οδηγού δηµιουργίας ερωτηµάτων. Το παράδειγµα του µόνο βήµα, σαν µια απλή εντολή. Με τον τρόπο αυτό εί-
ερωτήµατος που παρουσιάζεται στο παραπάνω σχήµα, αφορά ναι δυνατή η εύκολη και γρήγορη υλοποίηση συγκεκριµέ-
την προεπισκόπηση του ερωτήµατος σε προβολή σχεδία- νου τύπου λειτουργιών. Παράδειγµα σχεδίασης µακροε-
σης. Από το σχήµα διαπιστώνουµε πως η κατασκευή ενός ντολής παρουσιάζεται στο επόµενο σχήµα.
ερωτήµατος, περιλαµβάνει τον καθορισµό τόσο των πινάκων
που συµµετέχουν σε αυτό, όσο και των πεδίων αυτών των
πινάκων των οποίων τις τιµές επιθυµούµε να ανακτήσουµε.
Στην περίπτωση κατά την οποία δεν έχουν ορισθεί ακόµη οι
συσχετίσεις που υφίστανται ανάµεσα στους πίνακες, θα πρέπει
να καθορίσουµε και το πλήθος και τη µορφή αυτών των συ-
σχετίσεων. Τέλος για κάποια από τα πεδία που συµµετέχουν
στο νέο ερώτηµα, µπορούµε προαιρετικά να καθορίσουµε και
κάποια κριτήρια, τα οποία θα πρέπει να ικανοποιούνται από Στο παράδειγµα του παραπάνω σχήµατος, η νέα µακροε-
τις εγγραφές που επιστρέφονται από αυτό. Στο παράδειγµα ντολή επιλέγει κάποιο αντικείµενο, εφαρµόζει κατάλληλο
του παραπάνω ερωτήµατος, οι επιστρεφόµενες εγγραφές περι- φίλτρο πάνω στα δεδοµένα που περιλαµβάνονται σε αυτό,
λαµβάνουν τα ονοµατεπώνυµα των προσώπων που έχουν και στη συνέχεια προχωρεί στην εκτύπωση του περιεχο-
δανειστεί βιβλία του συγγραφέα Johnson. µένου του.
Οι λειτουργικές µονάδες ορίζονται ως τµήµατα κώδικα Η τυπική δοµή µιας πρότασης SQL έχει τη µορφή
γραµµένα σε γλώσσα VBA (Visual Basic for Applications)
δια της χρήσης των οποίων µπορούµε να υλοποιήσουµε πολύ- SELECT [FIELD LIST] FROM [TABLE LIST]
πλοκες διαδικασίες που δεν µπορούν να υλοποιηθούν µε άλ- WHERE [CRITERIA]
λους τρόπους. Τυπικό παράδειγµα συνάρτησης που αποτελεί
µέρος λειτουργικής µονάδας, παρουσιάζεται στο ακόλουθο Για παράδειγµα για να ανακτήσουµε τα ονοµατεπώνυµα
σχήµα: όλων των µαθητών της Β Λυκείου που έχουν ηλικία µε-
γαλύτερη των 18 ετών, θα πρέπει να χρησιµοποιήσουµε
την πρόταση SQL
Όπως είναι σε όλους µας γνωστό, ο άνθρωπος κατά τη διάρκεια της ζωής του
βρίσκεται σε µια συνεχή επικοινωνία µε το περιβάλλον του. Η επικοινωνία αυτή
µπορεί να γίνει µε πολλούς τρόπους, όπως είναι η οµιλία, ο γραπτός λόγος και κυρίως
τα αισθητήρια όργανά του. Το κύριο χαρακτηριστικό αυτής της επικοινωνίας, είναι η
ανταλλαγή πληροφοριών που λαµβάνει χώρα ανάµεσα στον κάθε άνθρωπο και το
χώρο µέσα στον οποίο ζει και κινείται. Ο άνθρωπος είναι τόσο ποµπός όσο και
αποδέκτης της πληροφορίας, δηλαδή, µπορεί τόσο να µεταδώσει, όσο και να λάβει
πληροφορίες. Οι πληροφορίες αυτές µπορεί να είναι οποιασδήποτε µορφής, και να
αφορούν σκέψεις, περιγραφές, ή ακόµη και συναισθήµατα. Μπορούν να παραµένουν
οι ίδιες ή να αλλάζουν µε την πάροδο του χρόνου. Σε όλες όµως τις περιπτώσεις
έχουν ένα κοινό χαρακτηριστικό: µεταφέρουν κάποιο περιεχόµενο. Το περιεχόµενο
αυτό, εξαρτάται άµεσα από το φυσικό σύστηµα στο οποίο αναφέρεται: µπορεί να
είναι η αξία κάποιας µετοχής στο χρηµατιστήριο, το αποτέλεσµα µιας ποδοσφαιρικής
αναµέτρησης, η θερµοκρασία ενός καταψύκτη, αλλά και το όνοµα κάποιου φίλου
µας, ο αριθµός της τηλεφωνικής µας σύνδεσης, και η χωρητικότητα του σκληρού
δίσκου που βρίσκεται στον υπολογιστή µας.
Όνοµα ΑΣΘΕΝΗΣ
Επώνυµο Όνοµα
Επώνυµο
Ηλικία Ηλικία
Κωδικός
Κωδικός
ΒΑΣΕΙΣ ∆Ε∆ΟΜΕΝΩΝ
πρώτο και προφανές πρόβληµα, είναι ότι σπαταλούµε άσκοπα αποθηκευτικό χώρο
στο σκληρό δίσκο, αφού την ίδια πληροφορία την αποθηκεύουµε δύο φορές. Το
δεύτερο και σοβαρότερο πρόβληµα, είναι ότι υπάρχει ο κίνδυνος δηµιουργίας
ασυνεπών δεδοµένων (inconsistent data). Πράγµατι, εάν κρατάµε δύο φορές την
ίδια πληροφορία και η πληροφορία αυτή σε κάποια χρονική στιγµή υποστεί κάποιο
είδος επεξεργασίας – για παράδειγµα την τροποποιήσουµε ή τη διαγράψουµε – τότε η
επεξεργασία αυτή θα πρέπει να εφαρµοσθεί και στις δύο καταχωρήσεις που αφορούν
το ίδιο δεδοµένο, διότι διαφορετικά, η βάση θα περιέχει δεδοµένα που δεν είναι
συνεπή. Για το λόγο αυτό, ένας από τους πρώτους ελέγχους που πραγµατοποιούµε
στη βάση αµέσως µετά το σχεδιασµό της, είναι ο έλεγχος παρουσίας
επαναλαµβανόµενων πεδίων, και η αποµάκρυνσή τους, εφ όσον υπάρχουν.
Στο φυσικό επίπεδο, η κύρια µέριµνά µας είναι ο καθορισµός του τρόπου µε
τον οποίο τα δεδοµένα της βάσης θα αποθηκεύονται στο σύστηµα. Στο επίπεδο
αυτό, καθορίζουµε τους τύπους των δεδοµένων της βάσης, τους αλγόριθµους
διαχείρισης των δεδοµένων, και γενικά, ασχολούµαστε µε διαδικασίες οι οποίες
χαρακτηρίζονται από µεγάλο βαθµό πολυπλοκότητας.
Στο λογικό επίπεδο, τα πράγµατα είναι πιο απλά. Εδώ ξεφεύγουµε από τις
λεπτοµέρειες και την πολυπλοκότητα του φυσικού επιπέδου, και το µόνο που
κάνουµε, είναι να καθορίζουµε ποια δεδοµένα θα αποθηκευτούν στη βάση του
συστήµατος, και ποιες είναι οι σχέσεις που υφίστανται ανάµεσά τους. Είναι
λοιπόν εύκολα αντιληπτό, πως η διαφορά ανάµεσα στο φυσικό και στο λογικό
επίπεδο, έχει να κάνει µε τον τύπο διαχείρισης των δεδοµένων: στο φυσικό επίπεδο
καθορίζουµε πως τα δεδοµένα θα αποθηκευτούν στη βάση του συστήµατος, ενώ
στο λογικό επίπεδο, καθορίζουµε ποια είναι αυτά τα δεδοµένα.
Τέλος, στο επίπεδο όψης, καθορίζουµε εκείνο το τµήµα της βάσης που θα
είναι ορατό σε κάθε χρήστη. Αυτό κυρίως βρίσκει εφαρµογή σε µεγάλες βάσεις
δεδοµένων µε πολύπλοκη σχεδάση και µεγάλο αριθµό χρηστών. Ας πάρουµε ξανά για
παράδειγµα τη βάση δεδοµένων του νοσοκοµείου. Τα δεδοµένα που καταχωρούνται
στη βάση αυτή, είναι κάθε είδους, και γενικά µη συσχετιζόµενα µεταξύ τους. Για
παράδειγµα, για κάθε ασθενή, καταχωρούµε τα προσωπικά και οικονοµικά του
στοιχεία, το ιατρικό ιστορικό του, και την εξέλιξη της υγείας του. Τα στοιχεία
αυτά, τα χειρίζονται εν γένει, διαφορετικοί χρήστες: τα οικονοµικά στοιχεία τα
επεξεργάζεται η γραµµατεία του νοσοκοµείου, ενώ τα ιατρικά στοιχεία, οι
θεράποντες ιατροί του ασθενούς. Αυτό σηµαίνει ότι το πρόγραµµα που θα
χρησιµοποιείται στη γραµµατεία του νοσοκοµείου, θα εµφανίζει µόνο τα οικονοµικά
στοιχεία, ενώ τα προγράµµατα που χρησιµοποιούν οι ιατροί, θα εµφανίζουν µόνο τα
ιατρικά στοιχεία. Τα δεδοµένα λοιπόν που θα διαχειρίζονται οι δυο αυτές κατηγορίες
χρηστών, θα είναι εντελώς ξένα µεταξύ τους, και µάλιστα σε τέτοιο σηµείο, ώστε να
δηµιουργείται η ψευδαίσθηση ότι πρόκειται για δυο διαφορετικές βάσεις, ενώ στην
πραγµατικότητα, η βάση είναι µια και µοναδική. Ένας άλλος λόγος για τον οποίο
συµβαίνει αυτός ο διαχωρισµός, είναι ζητήµατα ασφαλείας. Για παράδειγµα, ένας
υπάλληλος της γραµµατείας, δεν θα πρέπει να µπορεί να διαβάζει τον ιατρικό
φάκελλο του ασθενούς, διότι παραβιάζει το ιατρικό απόρρητο. Όπως δε, θα δούµε
στη συνέχεια, είναι κοινή πρακτική, κυρίως στις περιπτώσεις των µεγάλων βάσεων
δεδοµένων, να ορίζονται οµάδες χρηστών στους οποίους να καταχωρούνται
διαφορετικά δικαιώµατα πρόσβασης, και διαφορετικά δεδοµένα προς
διαχείριση.
Λογικό
Επίπεδο
Φυσικό
Επίπεδο
Μια απαραίτητη διευκρίνιση που πρέπει να γίνει στο σηµείο αυτό, αφορά το
είδος των λειτουργιών που εφαρµόζονται στη βάση δεδοµένων. Οι λειτουργίες αυτές
µπορούν να διαχωριστούν σε δύο κατηγορίες: σ’ αυτές που τροποποιούν τη δοµή
της βάσης, και σ’ εκείνες που τροποποιούν το περιεχόµενο της βάσης, δηλαδή τα
δεδοµένα που αποθηκεύονται σε αυτή. Η διαγραφή ενός ασθενούς από το µητρώο
των ασθενών της κλινικής, δεν µεταβάλλει τη δοµή της βάσης, απλώς ελαττώνει τον
αριθµό των εγγεγραµµένων ασθενών κατά ένα. Αντίθετα η προσθήκη κάποιας
καινούριας πληροφορίας στο φάκελο του ασθενή, όπως για παράδειγµα η οµάδα
αίµατός του, µεταβάλλει τη δοµή της βάσης, αφού τα δεδοµένα που καταχωρούνται
σε αυτή, έχουν πλέον αλλάξει. Είναι προφανές, ότι οι απλοί χρήστες που
χρησιµοποιούνται για τη διαχείριση των δεδοµένων του συστήµατος, δεν πρέπει να
µπορούν σε καµιά περίπτωση να αλλάξουν τη δοµή της βάσης, κάτι που µπορεί να
γίνει µόνο από τον διαχειριστή της βάσης δεδοµένων (Database Administrator,
DBA). Αυτό σηµαίνει ότι για τα δύο αυτά επίπεδα διαχείρισης, χρησιµοποιούνται
διαφορετικές γλώσσες προγραµµατισµού: µια γλώσσα που είναι υπεύθυνη για τον
ορισµό και την τροποποίηση της δοµής της βάσης και η οποία ονοµάζεται
γλώσσα ορισµού δεδοµένων (Data Definition Language, DDL), και µια γλώσσα
που είναι υπεύθυνη για τη διαχείριση των δεδοµένων της βάσης, και η οποία
ονοµάζεται γλώσσα διαχείρισης δεδοµένων (Data Manipulation Language,
DML). Περισσότερες λεπτοµέρειες πάνω στον τρόπο χρησιµοποίησης αυτών των
γλωσσών, θα παρουσιαστούν σε επόµενο κεφάλαιο.
Στο στάδιο αυτό, η σχεδίαση και υλοποίηση της βάσης έχει πλέον
ολοκληρωθεί, και η βάση είναι έτοιµη να χρησιµοποιηθεί για την καταχώρηση των
δεδοµένων. Η καταχώρηση αυτή δεν απαιτεί ειδικές γνώσεις πληροφορικής, και
µπορεί να γίνει από οποιοδήποτε χρήστη, µε µικρή σχετικα εκπαίδευση πάνω στη
λειτουργία του προγράµµατος. Για την καταχώρηση των δεδοµένων
χρησιµοποιούνται ειδικές φόρµες που περιλαµβάνουν πλαίδια εισαγωγής δεδοµένων,
συνοδευόµενα από κάποιο τίτλο, που να περιγράφει τη λειτουργία τους. Μια τυπική
φόρµα καταχώρησης, φαίνεται στο επόµενο σχήµα:
Μετά την ανάκτηση των δεδοµένων από τη βάση του συστήµατος, µπορούµε
να εφαρµόσουµε πάνω σε αυτά πολλούς τρόπους διαχείρισης, όπως για παράδειγµα,
να τα εκτυπώσουµε. Οι µηχανογραφικές καταστάσεις µε τις βαθµολογίες των
µαθητών που αναρτώνται στα Γυµνάσια και στα Λύκεια στο τέλος κάθε εξεταστικής
περιόδου, δεν αποτελούν παρά τέτοιου είδους εκτυπώσεις, οι οποίες δηµιουργούνται
από τα προγράµµατα που διαχειρίζονται τα δεδοµένα αυτού του είδους. Ένα άλλο
είδος διαχείρισης είναι η ταξινόµησή τους µε βάση κάποια κριτήρια, όπως για
παράδειγµα, µε αλφαβητική σειρά. Τέλος µπορούµε να παρέµβουµε στα ίδια τα
δεδοµένα και να αλλάξουµε τις τιµές τους, ή ακόµη και να τα διαγράψουµε από τη
βάση.
Ένα τµήµα παρακολουθεί ένα ή περισσότερα έργα (projects) κάθε ένα εκ των
οποίων χαρακτηρίζεται από ένα όνοµα, ένα κωδικό αριθµό, και πραγµατοποιείται σε
κάποια συγκεκριµένη τοποθεσία (location).
Η πληροφορία που καταχωρείται στη βάση για κάθε υπάλληλο, είναι το όνοµά
του, ο κωδικός κοινωνικής ασφάλισης (social security number, SSN), η διεύθυνση,
ο µισθός του, το φύλο του και η ηµεροµηνία γέννησής του. Ένας υπάλληλος τοποθε-
τείται σε κάποιο από τα τµήµατα της εταιρείας (αλλά µόνο σε ένα τµήµα) και µπορεί
να απασχολείται ταυτόχρονα σε πολλά έργα, που δεν παρακολουθούνται υποχρεωτικά
από το ίδιο τµήµα. Για κάθε υπάλληλο µπορούµε να καταχωρήσουµε τον αριθµό των
ωρών ανά εβδοµάδα που απασχολείται στο κάθε έργο καθώς και τον κωδικό του
υπαλλήλου που τον επιβλέπει και τον καθοδηγεί (supervisor).
Address
Εάν ένα από τα πεδία κάποιας οντότητας είναι σύνθετο πεδίο, τότε η τιµή
που αποδίδεται σε αυτό προκύπτει από τη συνένωση (concatenation) των τιµών
των απλών πεδίων που περιέχει.
την ηµεροµηνία γέννησής του από την τρέχουσα ηµεροµηνία. Στην περίπτωση αυ-
τή λέµε πως η ηλικία είναι ένα παραγόµενο πεδίο (derived attribute).
Τέλος, όταν για κάποια οντότητα δεν ορίζεται ή δεν είναι γνωστή η τιµή κάποιου από
τα πεδία που περιέχει, το πεδίο αυτό θα λάβει την επονοµαζόµενη κενή ή άκυρη τι-
µή (NULL value). Αυτό π.χ. συµβαίνει όταν δεν γνωρίζουµε το τηλέφωνο κάποιου
υπαλλήλου ή όταν καταχωρούµε τα στοιχεία κάποιου φοιτητή που δεν έχει ακόµη
αποφοιτήσει – στην τελευταία περίπτωση στο πεδίο «Βαθµός Πτυχίου» θα καταχω-
ρήσουµε την τιµή NULL.
Σχήµα 6 : Σχήµα (employee schema) και στιγµιότυπα οντότητας (e1, e2 και e3)
Μετά την παραπάνω θεωρητική περιγραφή όσον αφορά τις οντότητες και τα
πεδία που περιλαµβάνονται σε αυτές, µπορούµε τώρα να προχωρήσουµε σε µια πρώ-
τη προσπάθεια σχεδίασης της δοµής της βάσης της εταιρείας η οποία θα περιέχει τους
επόµενους τέσσερις τύπους οντοτήτων:
Ο ρόλος της συσχέτισης στη σχεδίαση της δοµής µιας βάσης δεδοµένων, θα
γίνει περισσότερο κατανοητός µέσα από ένα παράδειγµα. Ας θεωρήσουµε για το
σκοπό αυτό τους τύπους οντότητας EMPLOYEE και DEPARTMENT που ορίζουν
τα πεδία που καταχωρούµε για κάθε υπάλληλο και για κάθε τµήµα της εταιρείας. Έ-
στω ότι στην εταιρεία εργάζονται συνολικά 100 υπάλληλοι οι οποίοι είναι κατανεµη-
µένοι σε 5 διαφορετικά τµήµατα. Κάθε υπάλληλος και κάθε τµήµα έχει τα δικά του
ατοµικά χαρακτηριστικά. Από τα όσα αναφέραµε στις προηγούµενες παραγράφους,
είναι προφανές, πως για τον τύπο οντότητας EMPLOYEE υπάρχουν 100 στιγµιότυ-
Από την περιγραφή του µοντέλου της εταιρείας που αναλύσαµε σε προηγού-
µενη ενότητα, προκύπτει πως ο κάθε υπάλληλος θα πρέπει υποχρεωτικά να εργά-
ζεται σε κάποιο τµήµα. Έστω για παράδειγµα πως ο υπάλληλος e1 εργάζεται στο
τµήµα d1 και πως ο υπάλληλος e2 εργάζεται στο τµήµα d2. Αυτό σηµαίνει πως το
στιγµιότυπο e1 του τύπου οντότητας EMPLOYEE, συσχετίζεται µε το στιγµιότυπο
d1 του τύπου οντότητας DEPARTMENT. Ο ίδιος τύπος συσχέτισης υφίσταται και
για τα στιγµιότυπα e2 και d2 των τύπων EMPLOYEE και DEPARTMENT αντί-
στοιχα. Σε µια πιο αυστηρή περιγραφή, µπορούµε να πούµε πως υπάρχει ένα στιγ-
µιότυπο συσχέτισης (relationship instance) r1 ανάµεσα στα στιγµιότυπα e1 και d1,
ένα στιγµιότυπο συσχέτισης r2, ανάµεσα στα στιγµιότυπα e2 και d2, κ.ο.κ. Στο επόµε-
νο σχήµα παρουσιάζεται ένα πλήθος στιγµιότυπων συσχέτισης ri που συσχετίζει
στιγµιότυπα του τύπου οντότητας EMPLOYEE, ei, µε στιγµιότυπα του τύπου οντό-
τητας DEPARTMENT, di.
r1
e1 d1
r2
e2 d2
e3 r3 d3
e4
r4
e5
e6 r5
e7 r6
r7
Από το παραπάνω σχήµα διαπιστώνουµε πως οι υπάλληλοι e1, e3 και e6, εργά-
ζονται στο τµήµα d1, οι υπάλληλοι e2 και e4, εργάζονται στο τµήµα d2, και τέλος οι
υπάλληλοι e5 και e7, εργάζονται στο τµήµα d3. Αυτού του είδους η συσχέτιση ανάµε-
σα στα στιγµιότυπα των τύπων EMPLOYEE και DEPARTMENT αντίστοιχα,
πραγµατοποιείται δια µέσου των στιγµιότυπων συσχέτισης ri. Για παράδειγµα το
στιγµιότυπο συσχέτισης r1 συσχετίζει τα στιγµιότυπα e1 και d1, το στιγµιότυπο συ-
σχέτισης r2 συσχετίζει τα στιγµιότυπα e2 και d2, κ.ο.κ. To σύνολο όλων αυτών των
στιγµιότυπων συσχέτισης ri, ορίζει τον τύπο συσχέτισης WORKS_ON (στο παρά-
δειγµά µας) ο οποίος συσχετίζει τον τύπο οντότητας EMPLOYEE µε τον τύπο οντό-
τητας DEPARTMENT.
Το πλήθος n των τύπων οντότητας που συσχετίζονται δια µέσου µιας συ-
σχέτισης R, ονοµάζεται βαθµός (degree) της συσχέτισης. Στις πιο πολλές περιπτώ-
σεις ο βαθµός της συσχέτισης είναι ίσος µε 2 (binary relationship) αλλά σε ορισµέ-
νες περιπτώσεις µπορούµε µέσω κάποιας συσχέτισης να συσχετίσουµε τρεις τύπους
οντότητας, γεγονός που οδηγεί στη δηµιουργία συσχετίσεων µε βαθµό 3 (ternary
relationships). Αποδεικνύεται πως στη γενική περίπτωση, µια σχέση µε βαθµό 3
ανάµεσα σε τρεις τύπους οντότητας A, B και C, περιέχει περισσότερη πληροφο-
ρία από τις τρεις συσχετίσεις µε βαθµό 2 που ορίζονται ανάµεσα σε αυτούς τους
τρεις τύπους οντότητας.
Κάθε τύπος οντότητας που συµµετέχει σε κάποιο τύπο συσχέτισης, παίζει και
ένα συγκεκριµένο ρόλο σε αυτή τη συσχέτιση. Το όνοµα αυτού του ρόλου (role
name) καθορίζει σε πολύ µεγάλο βαθµό το πώς οι διάφοροι τύποι οντότητας αλλη-
λεπιδρούν µεταξύ τους. Για παράδειγµα στον τύπο συσχέτισης WORKS_FOR ο
τύπος οντότητας EMPLOYEE αναφέρεται στον εργαζόµενο, ενώ ο τύπος οντότητας
DEPARTMENT µπορεί να θεωρηθεί ως ο εργοδότης για τον κάθε υπάλληλο της
εταιρείας. Ας σηµειωθεί πως στη γενική περίπτωση κατά την οποία οι τύποι οντότη-
τας που συµµετέχουν σε ένα τύπο συσχέτισης, είναι διαφορετικοί µεταξύ τους, ο
καθορισµός του ρόλου για τον κάθε τύπο οντότητας δεν είναι µια αναγκαία διαδικα-
σία. Εάν όµως ένας τύπος οντότητας συµµετέχει περισσότερες από µια φορές σε
ένα τύπο συσχέτισης, τότε ο καθορισµός του ρόλου για τον κάθε τύπο οντότητας,
µας επιτρέπει να περιγράψουµε καλύτερα τον τύπο αλληλεπίδρασης που υφίστα-
ται ανάµεσα στα δύο αντίγραφά του. Χαρακτηριστικό παράδειγµα ενός τέτοιου τύ-
που συσχέτισης, είναι ο τύπος συσχέτισης SUPERVISION που συσχετίζει τον κάθε
εργαζόµενο της εταιρείας µε τον επικεφαλής του τµήµατος που τον παρακολουθεί.
Πράγµατι, το κάθε τµήµα διευθύνεται από κάποιο manager, ο οποίος έχει υπό την
εποπτεία του, όλους τους εργαζόµενους που δουλεύουν σε αυτό το τµήµα. Ως
manager όµως τοποθετείται κάποιος από τους εργαζόµενους του τµήµατος, έτσι ώ-
στε τελικά, ο τύπος συσχέτισης SUPERVISION να ορίζεται ανάµεσα σε δύο αντί-
γραφα του τύπου οντότητας EMPLOYEE. Οι συσχετίσεις αυτού του τύπου λέγονται
αναδροµικές συσχετίσεις (recursive relationships) και η πλήρη περιγραφή τους
απαιτεί τον καθορισµό του ρόλου, για κάθε ένα από τα δύο αντίγραφα του τύπου
οντότητας που συσχετίζουν. Έτσι στην περίπτωση του τύπου συσχέτισης
SUPERVISION, το ένα αντίγραφο του τύπου οντότητας EMPLOYEE παίζει το ρό-
λο του επιβλέποντα (supervisor), ενώ το άλλο αντίγραφο του τύπου, παίζει το ρόλο
του ευρισκόµενου κάτω από την επίβλεψη του επόπτη (supervisee).
Ο κάθε τύπος συσχέτισης που ορίζεται ανάµεσα σε δύο τύπους οντότητας κα-
τά τη λογική σχεδίαση µιας βάσης δεδοµένων, χαρακτηρίζεται από δύο ιδιότητες που
καθορίζουν το πλήθος και το είδος της συµµετοχής των δύο οντοτήτων στα στιγµιό-
τυπα αυτού του τύπου συσχέτισης. Αυτές οι δύο ιδιότητες ορίζονται µε τον ακόλουθο
τρόπο:
Είναι τέλος σηµαντικό να αναφερθεί, πως ένας τύπος συσχέτισης, εκτός από
τους τύπους οντότητας µεταξύ των οποίων ορίζεται, µπορεί να χαρακτηρίζεται και
από την ύπαρξη πεδίων (attributes). Εάν για παράδειγµα επιθυµούµε για κάθε υ-
πάλληλο που εργάζεται σε κάποιο project να καταχωρούµε και τον αριθµό των
Εάν δύο ή περισσότεροι αδύναµοι τύποι οντότητας έχουν τον ίδιο κάτοχο
(owner entity) υπάρχει ένας συνδυασµός πεδίων ο οποίος βοηθά να ξεχωρίζουµε τα
στιγµιότυπα αυτού του τύπου οντότητας µεταξύ τους. Αυτός ο συνδυασµός των πεδί-
ων λέγεται µερικό κλειδί (partial key). Χαρακτηριστικό παράδειγµα αδύναµου τύ-
που οντότητας είναι ο τύπος οντότητας DEPENDENT για τον οποίο η οντότητα κά-
τοχος είναι ο EMPLOYEE.
Μετά τον ορισµό και την περιγραφή των ιδιοτήτων που χαρακτηρίζουν τους
τύπους συσχέτισης, µπορούµε τώρα να αναθεωρήσουµε τη δοµή της βάσης δεδοµέ-
νων της εταιρείας που δηµιουργήσαµε σε προηγούµενη παράγραφο, και να προσθέ-
σουµε και τις συσχετίσεις που ορίζονται ανάµεσα στους τύπους οντότητας που έχου-
µε δηµιουργήσει. Στην επόµενη παράγραφο, παρουσιάζονται οι τύποι συσχέτισης που
ορίζονται στην εν λόγω εφαρµογή και οι οποίοι, σε µια αναλυτική περιγραφή, είναι οι
ακόλουθοι :
Εάν συγκρίνουµε την αρχική σχεδίαση της βάσης που περιελάµβανε µόνο τις
οντότητες, µε την αναθεωρηµένη σχεδίαση της βάσης που παρουσιάσαµε στις προη-
Ολοκληρώνοντας την περιγραφή της δοµής της βάσης δια της χρήσης του µο-
ντέλου οντοτήτων συσχετίσεων, µπορούµε να σχεδιάσουµε αυτή τη δοµή, χρησιµο-
ποιώντας το διάγραµµα οντοτήτων – συσχετίσεων (Entity Relationship Diagram,
E-R Diagram) που είναι ειδικά σχεδιασµένο για αυτό το σκοπό. Αυτή η διαγραµµα-
τική τεχνική, επιτρέπει τη σχεδίαση των οντοτήτων µιας βάσης και των συσχετίσεων
που υφίστανται ανάµεσά τους χρησιµοποιώντας ειδικά σύµβολα, τα οποία
παρουσιάζονται στον πίνακα που ακολουθεί :
EMPLOYEE
DEPENDENT
WORKS_ON
DEPENDENTS_OF
Dependents_Of Identifying
IDENTIFYING RELATIONSHIP
Relationship Type
TYPE
Salary
SSN
Locations
MInit
LName
FName
Name
AGE
DepName
E1 E2 E1 E2
E1 E2 E1 E2
1 N 1 N
STUDENT
Name SSN Home Address Office Age GPA
Phone Phone
Bayer 305612435 3731616 2918 Bluebonnet Lane NULL 19 3.21
Ashly 381621245 3754409 125 Kirby Road NULL 18 2.89
David 422112320 NULL 3452 Elgin Road 7491253 25 3.53
Cooper 489221100 3769821 265 Lark Lane 7496492 28 3.93
Benson 533691238 8398461 7384 Fontana Lane NULL 19 3.25
Κάθε πεδίο ή στήλη ενός πίνακα, δέχεται τιµές οι οποίες ανήκουν σε ένα συ-
γκεκριµένο και καθορισµένο εκ των προτέρων σύνολο τιµών (domain). Το είδος των
τιµών αυτού του συνόλου καθορίζεται από τον τύπο δεδοµένων του πεδίου του πί-
νακα, ο οποίος µε τη σειρά του ορίζεται κατά το στάδιο της λογικής σχεδίασης της
εφαρµογής. Έτσι, ένα πεδίο που εκφράζει την ηλικία, θα αναπαρίσταται από µια ακέ-
ραια ποσότητα. Όσον αφορά το σύνολο των επιτρεπτών τιµών για αυτό το πεδίο, αυ-
τό εξαρτάται και πάλι από τη φύση του προβλήµατος. Για παράδειγµα, σε ένα πρό-
γραµµα κοινωνικής ασφάλισης οι ηλικίες των ασφαλισµένων θα κυµαίνονται από 18
έως 65, διότι υποθέτουµε πως οι εργαζόµενοι είναι ενήλικες που εργάζονται µέχρι τα
65 τους χρόνια. Αντίθετα στο πρόγραµµα καταχώρησης στοιχείων ασθενών σε ένα
νοσοκοµείο, η ηλικία του ασθενή µπορεί να είναι οποιαδήποτε.
Στη σύνταξη αυτή, R = «STUDENT» είναι το όνοµα της σχέσης η οποία στην
προκειµένη περίπτωση, έχει επτά πεδία, κάθε ένα εκ των οποίων, παίρνει τιµές µέσα
από κάποιο σύνολο, D.
……, tm}. Κάθε πλειάδα είναι µια διατεταγµένη λίστα (ordered list) από n τιµές
<v1, v2, ….. ,vn>, µε την κάθε τιµή vi (1≤i≤n), να παίρνει τιµές από το πεδίο τιµών
dom(Ai), ενώ εναλλακτικά µπορεί να πάρει και την τιµή NULL. Ένα στιγµιότυπο r
ενός σχήµατος σχέσης R, µπορεί να γραφεί και ως r(R).
Από τον παραπάνω ορισµό είναι προφανές πως η κάθε πλειάδα διαθέτει
τουλάχιστον ένα superkey : το σύνολο των πεδίων που περιέχει. Εάν θεωρήσουµε
τώρα ένα superkey τέτοιο ώστε η αφαίρεση έστω και ενός από τα πεδία του να άρει
την ιδιότητα της µοναδικότητας της τιµής του – δηλαδή η τιµή του να µην είναι πλέον
µοναδική για κάθε πλειάδα – τότε αυτό το superkey ονοµάζεται πεδίο κλειδί (key)
του σχεσιακού σχήµατος. Με άλλα λόγια, το πεδίο κλειδί µιας σχέσης είναι ένα
superkey από το οποίο δεν µπορούµε να αφαιρέσουµε κανένα πεδίο (minimal
superkey).
Από τα όσα αναφέραµε στις προηγούµενες παραγράφους, γίνεται εύκολα α-
ντιληπτό πως η τιµή του πεδίου κλειδιού είναι µοναδική για κάθε πλειάδα, και
εποµένως µπορεί να χρησιµοποιηθεί για να ξεχωρίσουµε τις πλειάδες µιας σχέσης
µεταξύ τους. Ας σηµειωθεί πως στη γενική περίπτωση µπορεί να υπάρχουν περισ-
σότερα από ένα πεδία που να µπορούν να χρησιµοποιηθούν ως πεδία κλειδιά µιας
σχέσης. Τα πεδία αυτά ονοµάζονται υποψήφια κλειδιά (candidate keys) και ένα
από αυτά επιλέγεται για να γίνει το πρωτεύον κλειδί (primary key) του σχήµατος
της σχέσης. Όσον αφορά το πιο από τα πεδία της σχέσης θα επιλεγεί για να γίνει το
πρωτεύον κλειδί, αυτό εξαρτάται από τη µορφή της πληροφορίας που διατηρούµε για
κάθε σχέση. Στη γενική περίπτωση ως πρωτεύον κλειδί επιλέγουµε ένα πεδίο που
να λαµβάνει ξεχωριστή τιµή για κάθε πλειάδα, π.χ. αριθµός ταυτότητας, αριθµός
αυτοκινήτου, κ.λ.π. Στις σελίδες που ακολουθούν και κάθε φορά που αναφερόµαστε
στη δοµή κάποιου πίνακα, το πρωτεύον κλειδί του πίνακα, θα είναι υπογραµµισµένο.
EMPLOYEE
FNAME MINIT LNAME SSN BDATE ADDRESS SEX SALARY SUPERSSN DNO
DEPARTMENT DEPT_LOCATIONS
DEPENDENT
PROJECT WORKS_ON
Ένας απλός και εύκολος τρόπος για να ορίσουµε τις συσχετίσεις ανάµεσα στα
πρωτεύοντα και στα ξένα κλειδιά των πινάκων σύµφωνα µε τον τρίτο κανόνα ακε-
ραιότητας, είναι να τροποποιήσουµε την εικόνα του σχεσιακού σχήµατος της βάσης
προσθέτοντας προσανατολισµένες ευθείες που να ξεκινούν από το ξένο κλειδί κά-
ποιου πίνακα και να καταλήγουν στο αντίστοιχο πρωτεύον κλειδί του πίνακα µε το
οποίο συσχετίζονται. Αυτή η εικόνα για το σχεσιακό σχήµα της βάσης δεδοµένων της
εταιρείας παρουσιάζεται στην επόµενη εικόνα. (Σχήµα 9).
EMPLOYEE
FNAME MINIT LNAME SSN BDATE ADDRESS SEX SALARY SUPERSSN DNO
DEPARTMENT DEPT_LOCATIONS
DNAME DNUMBER MGRSSN MGRSTARTDATE DNUMBER DLOCATION
PROJECT WORKS_ON
PNAME PNUMBER PLOCATION DNUM ESSN PNO HOURS
DEPENDENT
ESSN DEPENDENT-NAME SEX BDATE RELATIONSHIP
Από την παραπάνω ανάλυση είναι προφανές πως κάθε φορά που λαµβάνει
χώρα απόπειρα τροποποίησης του περιεχοµένου της βάσης δεδοµένων, θα πρέπει
να διασφαλίζεται η τήρηση των τριών κανόνων ακεραιότητας που έχουµε ορίσει
στην προηγούµενη ενότητα. Σε όλες περιπτώσεις, η τροποποίηση του περιεχοµένου
µιας βάσης θα περιλαµβάνει διαδικασίες εισαγωγής νέων εγγραφών (insert
operation), διαγραφής υπαρχόντων εγγραφών των πινάκων (delete operation) ή
τροποποίησης του περιεχοµένου αυτών των εγγραφών (update operation). Κάθε
φορά που ο χρήστης προσπαθεί να πραγµατοποιήσει αυτές τις τρεις κατηγορίες ενερ-
γειών, το σύστηµα διαχείρισης βάσεων δεδοµένων, ελέγχει εάν αυτές οι ενέργειες πα-
ραβιάζουν ή όχι τους κανόνες ακεραιότητας του σχήµατος της βάσης, και επιτρέπει
την εκτέλεσή τους, µόνο όταν αυτοί οι κανόνες δεν παραβιάζονται. Στις επόµενες σε-
λίδες παρουσιάζονται παραδείγµατα εισαγωγής, διαγραφής και τροποποίησης εγγρα-
φών των πινάκων για τη βάση δεδοµένων της εταιρείας, και εφαρµογή επί αυτών, των
κανόνων ακεραιότητας, προκειµένου να ελεγχθεί εάν αυτοί παραβιάζονται ή τηρού-
νται από αυτές τις ενέργειες.
Αυτή η διαδικασία δεν είναι αποδεκτή, διότι υπάρχουν εγγραφές στον πίνακα
WORKS_ON που αναφέρονται στην εγγραφή που επιθυµούµε να διαγράψουµε, και
εποµένως η διαγραφή της θα οδηγήσει σε παραβίαση του τρίτου κανόνα ακεραιότη-
τας (referential integrity constraint).
Αυτή η διαδικασία δεν είναι αποδεκτή, διότι υπάρχουν εγγραφές στους πίνα-
κες EMPLOYEE, DEPARTMENT, WORKS_ON και DEPENDENT που αναφέ-
ρονται στην εγγραφή που επιθυµούµε να διαγράψουµε, και εποµένως η διαγραφή της
θα οδηγήσει σε παραβίαση του τρίτου κανόνα ακεραιότητας (referential integrity
constraint).
Κάθε τµήµα περιγράφεται από ένα όνοµα, ένα κωδικό και ένα σύνολο από
τοποθεσίες στις οποίες είναι εγκατεστηµένο. Ένα τµήµα διευθύνεται από ένα και
µοναδικό manager αλλά µπορεί να διαθέτει πολλούς υπαλλήλους που να εργάζονται
για αυτό. Τέλος το κάθε ένα από τα τµήµατα της εταιρείας, µπορεί γενικά να αναλά-
βει πολλά έργα ταυτόχρονα.
Κάθε έργο παρακολουθείται από ένα και µόνο τµήµα αλλά πραγµατοποιεί-
ται από πολλούς υπαλλήλους ταυτόχρονα. Ένα έργο περιγράφεται από το όνοµά
του, τον κωδικό του, και την τοποθεσία στην οποία πραγµατοποιείται.
ΒΗΜΑ 2 : Για κάθε αδύναµο τύπο οντότητας (weak entity type) W του
µοντέλου οντοτήτων συσχετίσεων, εντοπίζουµε την οντότητα κάτοχο (owner
entity) Ε από την οποία εξαρτάται. Στη συνέχεια για τον τύπο οντότητας W, δη-
µιουργούµε ένα πίνακα R, ο οποίος περιλαµβάνει όλα τα απλά πεδία του W. Εάν ο
τύπος W περιέχει σύνθετα πεδία (composite attributes), τότε όπως και στην προη-
γούµενη περίπτωση προσθέτουµε µόνο τα απλά πεδία από τα οποία αυτά αποτελού-
νται. Στη συνέχεια προσθέτουµε στον πίνακα R το πρωτεύον κλειδί του πίνακα που
έχουµε ήδη δηµιουργήσει στο Βήµα 1 για την οντότητα κάτοχο του W. Επειδή αυτό
το πεδίο είναι πρωτεύον κλειδί σε κάποιο άλλο πίνακα, θα συµµετάσχει στον πίνακα
R, ως ξένο κλειδί (foreign key). Το πρωτεύον κλειδί του πίνακα R, θα είναι σύνθε-
το, και θα αποτελείται από το συνδυασµό του ξένου κλειδιού που θα προσθέσουµε
και του µερικού κλειδιού (partial key) που έχουµε ήδη ορίσει κατά το στάδιο
δηµιουργίας του µοντέλου οντοτήτων συσχετίσεων.
Στο παράδειγµά µας έχουµε ένα µόνο αδύναµο τύπο οντότητας, τον
DEPENDENT, για τον οποίο η οντότητα κάτοχος είναι ο EMPLOYEE. ∆ηµιουρ-
γούµε λοιπόν ένα νέο πίνακα µε το όνοµα DEPENDENT και προσθέτουµε σε αυτόν
όλα τα απλά πεδία του αντίστοιχου τύπου οντότητας. Από το διάγραµµα οντοτήτων
συσχετίσεων, διαπιστώνουµε πως τα πεδία αυτά είναι τα {Name, Sex, BirthDate}.
Στη συνέχεια προσθέτουµε το πρωτεύον κλειδί του πίνακα EMPLOYEE που έχου-
µε δηµιουργήσει στο Βήµα 1 για την οντότητα κάτοχο του DEPENDENT που είναι
ο EMPLOYEE. Το πεδίο αυτό είναι το SSN αλλά στον πίνακα DEPENDENT θα
προστεθεί µε το όνοµα ESSN. Επειδή το partial key του DEPENDENT είναι το
DEPENDENT_NAME, έπεται πως το πρωτεύον κλειδί του πίνακα DEPENDENT
θα είναι το σύνθετο κλειδί ESSN + DEPENDENT_NAME. Έτσι η δοµή του πίνα-
κα DEPENDENT θα είναι η ακόλουθη :
ΒΗΜΑ 3 : Για κάθε τύπο συσχέτισης R, η οποία έχει βαθµό 2 (ορίζεται δη-
λαδή ανάµεσα σε δύο οντότητες) και πολλαπλότητα 1:1, εντοπίζουµε τους πίνακες
που έχουµε δηµιουργήσει στο Βήµα 1, για τους δύο τύπους οντότητας που συµµετέ-
χουν σε αυτή τη σχέση. Έστω ότι αυτοί οι πίνακες φέρουν τα ονόµατα R και S. Στη
συνέχεια, διαλέγουµε τον ένα από τους δύο πίνακες (για παράδειγµα τον R) και
προσθέτουµε σε αυτόν, το πρωτεύον κλειδί του πίνακα S. Είναι προφανές πως αυ-
τό το πεδίο θα συµµετέχει στον πίνακα R ως ξένο κλειδί. Επίσης στον πίνακα R, θα
προσθέσουµε εκτός από το ξένο κλειδί και όλα τα πεδία που ενδεχοµένως έχουµε ο-
ρίσει για τον τύπο συσχέτισης R (relationship attributes).
Το ερώτηµα που τίθεται στο σηµείο αυτό αφορά το κριτήριο επιλογής του πί-
νακα στον οποίο θα προσθέσουµε τα επιπλέον πεδία. Στις πιο πολλές περιπτώσεις αυ-
τό το κριτήριο έχει να κάνει µε τον τύπο συµµετοχής του κάθε τύπου οντότητας στον
τύπο συσχέτισης R. Έτσι είναι κοινή πρακτική να επιλέγουµε εκείνο τον πίνακα, για
τον οποίο ο αντίστοιχος τύπος οντότητας χαρακτηρίζεται από ολική συµµετοχή
(total participation) στον θεωρούµενο τύπο συσχέτισης. Εάν και οι δύο τύποι οντό-
τητας παρουσιάζουν ολική συµµετοχή και επιπλέον δεν συµµετέχουν σε άλλο τύπο
συσχέτισης, µπορούµε εναλλακτικά να ενοποιήσουµε τους αντίστοιχους πίνακες
και τα πεδία του τύπου συσχέτισης σε ένα και µοναδικό πίνακα.
Στο παράδειγµά µας έχουµε µόνο ένα τύπο συσχέτισης µε πολλαπλότητα 1:1
που φέρει το όνοµα MANAGES, ορίζεται ανάµεσα στους τύπους οντότητας
EMPLOYEE και DEPARTMENT, και επιπλέον περιέχει και ένα πεδίο, µε το όνο-
µα StartDate. Επειδή ο EMPLOYEE χαρακτηρίζεται από µερική συµµετοχή σε αυ-
τόν τον τύπο συσχέτισης, ενώ αντίθετα το DEPARTMENT χαρακτηρίζεται από ολι-
κή συµµετοχή, προσθέτουµε στον πίνακα DEPARTMENT, τόσο το πρωτεύον κλειδί
του πίνακα EMPLOYEE που είναι το SSN (αλλά µε το όνοµα MGRSSN) όσο και
το πεδίο StartDate του τύπου συσχέτισης MANAGES (αλλά µε το όνοµα
MgrStartDate). Έτσι τελικά ο πίνακας DEPARTMENT θα αποκτήσει τη δοµή
ΒΗΜΑ 4 : Για κάθε τύπο συσχέτισης R η οποία έχει βαθµό 2 και πολλαπλό-
τητα 1:Ν, εντοπίζουµε τον πίνακα που έχουµε δηµιουργήσει (στο Βήµα 1) για τον
τύπο οντότητας που βρίσκεται στην «Ν πλευρά» της συσχέτισης. Σε αυτόν τον πίνα-
κα, προσθέτουµε ως ξένο κλειδί, το πρωτεύον κλειδί του πίνακα που αντιστοιχεί
στον άλλο τύπο οντότητας (αυτόν που βρίσκεται στην «1 πλευρά» της συσχέτισης).
Στο παράδειγµά µας, έχουµε τρεις τύπους συσχέτισης µε πολλαπλότητα 1:Ν. Τον τύ-
πο συσχέτισης WORKS_FOR ανάµεσα στους τύπους οντότητας DEPARTMENT
και EMPLOYEE, τον τύπο συσχέτισης CONTROLS ανάµεσα στους τύπους οντό-
τητας DEPARTMENT και PROJECT και τον τύπο συσχέτισης SUPERVISION
που είναι αναδροµικός και ορίζεται ανάµεσα σε δύο αντίγραφα του τύπου οντότητας
EMPLOYEE. Η εφαρµογή του Βήµατος 4 σε αυτούς τους τύπους συσχέτισης, θα
έχει τα ακόλουθα αποτελέσµατα.
λείται από το συνδυασµό των πρωτευόντων κλειδιών των δύο πινάκων που έχουµε
προσθέσει στον πίνακα R.
EMPLOYEE
f.k f.k
FNAME MINIT LNAME SSN BDATE ADDRESS SEX SALARY SUPERSSN DNO
DEPARTMENT DEPT_LOCATIONS
f.k rel.attr f.k
DEPENDENT
f.k
PROJECT WORKS_ON
f.k f.k f.k rel.attr
Σχήµα 10 : Το σχεσιακό σχήµα για τη βάση δεδοµένων της εταιρείας Στο σχήµα αυτό, τα πε-
δία που φέρουν την ένδειξη f.k είναι ξένα κλειδιά (foreign keys) ενώ τα πεδία µε την ένδειξη rel.attr
είναι πεδία πού έχουν προέλθει από τύπους συσχετίσεων. Τα πεδία αυτών των δύο κατηγοριών έχουν
προστεθεί στους πίνακες της βάσης κατά τη διαδικασία µετατροπής του µοντέλου οντοτήτων συσχετί-
σεων σε σχεσιακό µοντέλο βάσεων δεδοµένων.
Ωστόσο, ένα από τα βασικά ερωτήµατα που προκύπτουν κατά την πραγµατο-
ποίηση αυτής της διαδικασίας, έχει να κάνει µε την επιλογή των πεδίων που θα ο-
µαδοποιηθούν και θα σχηµατίσουν ένα πίνακα. Με ποιο κριτήριο θα γίνει αυτή η
επιλογή? Πως είµαστε σίγουροι πως η οµαδοποίηση των πεδίων στους πίνακες έγινε
µε τον καλύτερο δυνατό τρόπο? Με άλλα λόγια, µήπως υπάρχει κάποιος καλύτερος
συνδυασµός των πεδίων, ο οποίος θα µπορούσε να οδηγήσει σε µια πιο ευέλικτη και
αξιόπιστη βάση δεδοµένων?
Η διαδικασία της σωστής σχεδίασης της δοµής των πινάκων της βάσης, έτσι
ώστε να ικανοποιεί τις προδιαγραφές που έχουν τεθεί και ταυτόχρονα να είναι ευέλι-
κτη και αποδοτική στη χρήση της ονοµάζεται λογικός ή εννοιολογικός σχεδιασµός
(conceptual or logical design). Στις σελίδες που ακολουθούν θα παρουσιάσουµε
τους βασικούς κανόνες που ακολουθούµε κατά τη λογική σχεδίαση της δοµής µιας
βάσης δεδοµένων, και θα περιγράψουµε αναλυτικά την κανονικοποίηση
(normalization) των πινάκων της βάσης που αποτελεί µια από τις πιο σηµαντικές
διαδικασίες αυτού του είδους.
Κεφάλαιο 4 : Λογικός Σχεδιασµός - Κανονικοποίηση 46
Όπως έχει ήδη αναφερθεί, ένα από τα πρώτα βήµατα που κάνουµε κατά τη
φάση της σχεδίασης των πινάκων της βάσης είναι η ταυτοποίηση των πεδίων που
περιέχουν, τα οποία στη συνέχεια οµαδοποιούνται για να σχηµατίσουν αυτούς τους
πίνακες. Αυτή η διαδικασία οµαδοποίησης, θα πρέπει να γίνεται έτσι ώστε τα πεδία
ενός πίνακα, να συσχετίζονται µεταξύ τους και τελικά, ολόκληρη η δοµή του πίνακα
να αναδεικνύει κάποια λογική. Όσο πιο ξεκάθαρη είναι αυτή η λογική, τόσο πιο
εύκολη γίνεται τελικά και η σχεδίαση του σχήµατος ολόκληρης της βάσης δεδο-
µένων.
Τι θα συµβεί όµως εάν δεν ακολουθήσουµε τον παραπάνω κανόνα και τοπο-
θετήσουµε στον ίδιο πίνακα, πεδία που ανήκουν σε διαφορετικούς τύπους οντότητας?
Το πιο σηµαντικό από τα προβλήµατα που θα παρουσιαστούν στην περίπτωση αυτή,
είναι η εµφάνιση περιττών δεδοµένων (redundant data) στους πίνακες της βάσης.
Αυτό σηµαίνει πως καταχωρούµε την ίδια πληροφορία περισσότερες από µια φορές
στον ίδιο πίνακα, κάτι που έχει ως αποτέλεσµα τόσο την άσκοπη σπατάλη αποθη-
κευτικού χώρου, όσο και τον κίνδυνο εµφάνισης ασυνεπών δεδοµένων
(inconsistent data) στην περίπτωση κατά την οποία τροποποιήσουµε τα πεδία που
καταχωρούνται περισσότερες από µια φορές.
EMP_DEP
EMP_PROJ
Από τα στιγµιότυπα των δύο πινάκων που παρουσιάζονται στη συνέχεια, γίνε-
ται εύκολα αντιληπτός ο λόγος για τον οποίο η χρήση αυτής της εσφαλµένης δοµής
οδηγεί σε απώλεια αποθηκευτικού χώρου. Πράγµατι, στον πίνακα EMP_DEP οι τι-
µές των πεδίων DNUMBER, DNAME και DMGRSSN επαναλαµβάνονται σε κάθε
εγγραφή, σε αντίθεση µε το σωστό σχεσιακό µοντέλο (Σχήµα 10) στο οποίο για κάθε
τµήµα, υπάρχει µια και µοναδική εγγραφή στον πίνακα DEPARTMENT ενώ η µο-
ναδική πληροφορία που επαναλαµβάνεται σε κάθε εγγραφή του πίνακα
EMPLOYEE, είναι ο κωδικός του τµήµατος στον οποίο ανήκει ο κάθε υπάλληλος
της εταιρείας. Η κατάσταση είναι ακόµη χειρότερη στον πίνακα EMP_PROJ όπου
επαναλαµβάνονται όχι µόνο οι πληροφορίες που αφορούν το PROJECT αλλά και οι
πληροφορίες που αφορούν τον EMPLOYEE. Αντίθετα, στο σωστό σχεσιακό σχήµα,
τα στοιχεία για κάθε EMPLOYEE και για κάθε PROJECT καταχωρούνται µόνο µια
φορά στους οµώνυµους πίνακες, και η µοναδική πληροφορία που επαναλαµβάνεται
στον πίνακα WORKS_ON είναι ο συνδυασµός των πρωτευόντων κλειδιών των δύο
πινάκων.
ΣΥΝΑΡΤΗΣΙΑΚΕΣ ΕΞΑΡΤΗΣΕΙΣ
κτηρίζονται από µερική εξάρτηση. Ας σηµειωθεί πως σε όλες σχεδόν τις περιπτώ-
σεις η οµάδα πεδίων Υ, περιλαµβάνει συνήθως µόνο ένα πεδίο.
Ένα τελευταίο είδος εξάρτησης που θα µας απασχολήσει στο σηµείο αυτό εί-
ναι η συναρτησιακή εξάρτηση δύο πεδίων A και B εκ των οποίων το ένα πεδίο
είναι πεδίο πολλαπλής τιµής (multivalued dependency). Στην περίπτωση αυτή η
γνώση του Α δεν καθορίζει µονοσήµαντα την τιµή του Β, αλλά ένα σύνολο τιµών για
το Β που είναι γνωστό και καθορισµένο εκ των προτέρων. Μια τέτοια εξάρτηση θα
είχαµε για παράδειγµα εάν στον πίνακα EMP_DEP προσθέταµε ως πεδίο και την το-
ποθεσία του τµήµατος DLOCATION. Επειδή ένα τµήµα µπορεί να έχει γραφεία σε
περισσότερες από µια τοποθεσίες, η γνώση του κωδικού DNUMBER για ένα τµήµα
δεν προσδιορίζει µονοσήµαντα την τοποθεσία του τµήµατος, αλλά συσχετίζεται
µε ένα µια ολόκληρη οµάδα τιµών.
ΚΑΝΟΝΙΚΟΠΟΙΗΣΗ
Πρώτη Κανονική Μορφή (1st Normal Form, 1NF): Για να φέρουµε ένα πί-
νακα σε πρώτη κανονική µορφή, θα πρέπει να αποµακρύνουµε τις
επαναλαµβανόµενες οµάδες πεδίων, έτσι ώστε η τοµή µιας γραµµής και µιας
στήλης του πίνακα, να αντιστοιχεί πάντα σε µια απλή τιµή.
∆εύτερη Κανονική Μορφή (2nd Normal Form, 2NF): Για να φέρουµε ένα
πίνακα σε δεύτερη κανονική µορφή, θα πρέπει πρώτα να τον φέρουµε σε πρώτη κα-
νονική µορφή, και στη συνέχεια να αποµακρύνουµε όλες τις µερικές συναρτησια-
κές εξαρτήσεις (partial dependencies) που υφίστανται ανάµεσα στα πεδία του.
Τρίτη Κανονική Μορφή (3rd Normal Form, 3NF): Για να φέρουµε ένα πί-
νακα σε τρίτη κανονική µορφή, θα πρέπει πρώτα να τον φέρουµε σε δεύτερη κανονι-
κή µορφή, και στη συνέχεια να αποµακρύνουµε όλες τις µεταβατικές συναρτησια-
κές εξαρτήσεις (transitive dependencies) που υφίστανται ανάµεσα στα πεδία του.
Τέταρτη Κανονική Μορφή (4th Normal Form, 4NF): Για να φέρουµε ένα
πίνακα σε τέταρτη κανονική µορφή, θα πρέπει πρώτα να τον φέρουµε σε τρίτη κανο-
νική µορφή και στη συνέχεια να αποµακρύνουµε όλες τις συναρτησιακές εξαρτή-
σεις που περιλαµβάνουν πεδία πολλαπλών τιµών (multivalued dependencies).
Πέµπτη Κανονική Μορφή (5th Normal Form, 5NF) : Για να φέρουµε ένα
πίνακα σε πέµπτη κανονική µορφή θα πρέπει πρώτα να τον φέρουµε σε τέταρτη κα-
νονική µορφή, και στη συνέχεια να αποµακρύνουµε όλες τις υπόλοιπες εξαρτήσεις
που ενδεχοµένως έχουν παραµείνει στη δοµή του, µετά την εφαρµογή των παραπά-
νω διαδικασιών.
Εκτός από τις πέντε κανονικές µορφές που περιγράψαµε παραπάνω, µια επι-
πλέον κανονική µορφή που χρησιµοποιείται σε αρκετές περιπτώσεις, είναι η κανονι-
κή µορφή των Boyce-Codd (Boyce Codd Normal Form, BCNF). Η BCNF, µπορεί
να θεωρηθεί ως µια πιο αυστηρά διατυπωµένη 3NF. Αυτό σηµαίνει πως ένας πίνα-
κας που βρίσκεται σε BCNF βρίσκεται αυτόµατα και σε 3NF – το αντίστροφο όµως
δεν ισχύει. Η BCNF θα µελετηθεί αναλυτικά στις επόµενες σελίδες. Στο σχήµα που
ακολουθεί αναπαρίστανται µε γραφικό τρόπο, τα βήµατα που θα πρέπει να ακολου-
θήσουµε προκειµένου να µετασχηµατίσουµε µια µη κανονικοποιηµένη σχέση από την
πρώτη έως και την πέµπτη κανονική µορφή.
Μη κανονικοποιηµένη
σχέση
Αποµάκρυνση
επαναλαµβανόµενων πεδίων
Κανονικοποιηµένη
σχέση (1NF)
Αποµάκρυνση
µερικών συσχετίσεων
Κανονικοποιηµένη
σχέση (2NF)
Αποµάκρυνση
µεταβατικών συσχετίσεων
Κανονικοποιηµένη
σχέση (3NF)
Αποµάκρυνση των
υπόλοιπων συσχετίσεων
Κανονικοποιηµένη
σχέση (BCNF)
Αποµάκρυνση συσχετίσεων
µε πεδία πολλαπλών τιµών
Κανονικοποιηµένη
σχέση (4NF)
Αποµάκρυνση όλων των
Κανονικοποιηµένη υπόλοιπων ανωµαλιών
σχέση (5NF)
Μετά την παραπάνω συνοπτική περιγραφή των βασικών αρχών της κανονικο-
ποίησης, ας περάσουµε τώρα στην αναλυτική παρουσίαση των πέντε κανονικών µορ-
φών στις οποίες είναι δυνατό να βρεθούν τα σχήµατα των πινάκων µιας σχεσιακής
βάσης δεδοµένων.
DEPARTMENT
DEPARTMENT DEPT_LOCATIONS
Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως τα πεδία πολλαπλών τι-
µών σε ένα πίνακα που επιβάλλουν το µετασχηµατισµό του σε 1NF, µπορεί να είναι
τόσο απλά, όσο και σύνθετα όπως συµβαίνει για παράδειγµα στο ακόλουθο σχεσιακό
σχήµα :
EMP_PROJ PROJECTS
SSN ENAME
PNUMBER HOURS
PROJECTS
SSN ENAME
PNUMBER HOURS
1 32.5
123456789 Smith, John B.
2 7.5
666884444 Narayan, Ramesh K. 3 40.0
1 20.0
453453453 English, Joyce A.
2 20.0
2 10.0
3 10.0
333445555 Wong, Franklin
10 10.0
20 10.0
30 30.0
999887777 Zelaya, Alicia J.
10 10.0
10 35.0
987987987 Jabbar, Ahmad V.
30 5.0
30 20.0
987654321 Wallace, Jennifer S.
10 15.0
888665555 Borg, James E 20 NULL
Η δεύτερη κανονική µορφή προκύπτει από την πρώτη κανονική µορφή, εάν
µετασχηµατίσουµε τη δοµή του πίνακα, µε τέτοιο τρόπο ώστε να αποµακρυνθούν
όλες οι µερικές συναρτησιακές εξαρτήσεις (partial dependencies) που υφίστανται
ανάµεσα στα πεδία του. Με άλλα λόγια ένας πίνακας βρίσκεται σε δεύτερη κανονι-
κή µορφή, όταν όλα τα πεδία που δεν ανήκουν στο πρωτεύον κλειδί του πίνακα,
εξαρτώνται συναρτησιακώς µόνο από τα πεδία του πρωτεύοντος κλειδιού, και
µάλιστα, µέσω πλήρους συναρτησιακής εξάρτησης (full dependency). Επειδή ο
ορισµός της πλήρους και της µερικής συναρτησιακής εξάρτησης µεταξύ δύο πεδίων
X και Υ εφαρµόζεται µόνο όταν το Χ περιλαµβάνει περισσότερα από ένα πεδία, είναι
προφανές πως η αναγωγή ενός πίνακα στη δεύτερη κανονική µορφή, έχει νόηµα
µόνο όταν το πρωτεύον κλειδί του είναι σύνθετο. Αντίθετα, όταν το κλειδί του πί-
νακα είναι ένα απλό πεδίο, η αναγωγή του πίνακα σε 1NF, τον µετασχηµατίζει αυτό-
µατα και σε 2NF.
Ένα παράδειγµα ενός πίνακα που δεν είναι σε δεύτερη κανονική µορφή, είναι
ο πίνακας EMP_PROJ που ορίσαµε στις προηγούµενες σελίδες. Μελετώντας τις τι-
µές που έχουµε καταχωρήσει σε αυτόν τον πίνακα, διαπιστώνουµε πως ο πίνακας
είναι σε 1NF, διότι, το κάθε κελί του περιέχει µια απλή τιµή. Ωστόσο δεν είναι σε
2NF διότι περιέχει µερικές συναρτησιακές εξαρτήσεις (partial dependencies). Για να
κατανοήσουµε καλύτερα αυτό το παράδειγµα, στο ακόλουθο σχήµα παρουσιάζουµε
τη δοµή του πίνακα EMP_PROJ και τις συναρτησιακές εξαρτήσεις που υφίστανται
ανάµεσα στα πεδία του.
Η τρίτη κανονική µορφή προκύπτει από τη δεύτερη κανονική µορφή εάν µε-
τασχηµατίσουµε τον πίνακα µε τέτοιο τρόπο ώστε να αποµακρυνθούν όλες οι µε-
ταβατικές συναρτησιακές εξαρτήσεις (transitive dependencies) που υφίστανται
ανάµεσα στα πεδία του. Επαναλαµβάνουµε από τη βασική θεωρία πως µια συναρ-
τησιακή εξάρτηση Α→Β ονοµάζεται µεταβατική, όταν υπάρχει ένα πεδίο C που
δεν ανήκει στο πρωτεύον κλειδί του πίνακα, τέτοιο ώστε C = C(A) και B = B(C).
Κανονική µορφή των Boyce – Codd (Boyce Codd Normal Form, BCNF)
Η κανονική µορφή των Boyce και Codd, αποτελεί µια πιο αυστηρή διατύ-
πωση της τρίτης κανονικής µορφής, και χρησιµοποιείται για να αποµακρύνει ανω-
µαλίες που ενδέχεται να προκύψουν σε περιπτώσεις κατά τις οποίες ένας πίνακας
έχει περισσότερα από ένα υποψήφια κλειδιά, τα οποία µάλιστα είναι σύνθετα,
αποτελούνται δηλαδή από πολλά πεδία.
Μελετώντας προσεκτικά τη δοµή του πίνακα και τις βασικές υποθέσεις του
µοντέλου, µπορούµε να ταυτοποιήσουµε τις ακόλουθες συναρτησιακές εξαρτήσεις
ανάµεσα στα πεδία του.
τρίτη κανονική µορφή, αφού δεν περιέχει ούτε µερικές αλλά ούτε και µεταβατι-
κές συναρτησιακές εξαρτήσεις. Το συµπέρασµα αυτό είναι σωστό, αλλά παρόλα
αυτά, δε µας διασφαλίζει την απουσία των ανωµαλιών που παρουσιάζονται κατά την
εισαγωγή, διαγραφή και τροποποίηση εγγραφών. Ας υποθέσουµε για παράδειγµα πως
ο µαθητής µε κωδικό 456 επιθυµεί να αλλάξει το µάθηµα που δήλωσε, από Βιολογία
σε Μαθηµατικά. Εάν τροποποιήσουµε το περιεχόµενο της αντίστοιχης γραµµής του
πίνακα, έτσι ώστε να καταγράψουµε την παραπάνω µεταβολή, θα χάσουµε την πλη-
ροφορία πως ο καθηγητής Stewart διδάσκει Βιολογία. Τα πράγµατα είναι ακόµη
χειρότερα, εάν ο εν λόγω µαθητής ακυρώσει εντελώς τη συµµετοχή του στο πρό-
γραµµα διδακτικής στήριξης. Στην περίπτωση αυτή, θα πρέπει να διαγράψουµε την
αντίστοιχη γραµµή από τον πίνακα CLASS, αλλά αυτή η διαγραφή θα οδηγήσει και
σε πλήρη απώλεια όλων των δεδοµένων που αφορούν τον καθηγητή Stewart ό-
σον αφορά τα µαθήµατα που διδάσκει στο πρόγραµµα πρόσθετης διδακτικής
στήριξης.
Η εµφάνιση όλων αυτών των προβληµάτων, οφείλεται στο γεγονός, πως ο πί-
νακας CLASS διαθέτει δύο υποψήφια σύνθετα κλειδιά, τα οποία έχουν ένα κοινό
πεδίο – το StudentId. Αυτή είναι µια κατάσταση, η οποία δεν παρατηρείται αρκετά
συχνά, αλλά εν τούτοις, θα πρέπει να λαµβάνεται υπ όψιν κατά το στάδιο της σχεδία-
σης µιας βάσης δεδοµένων. Οι Boyce και Codd, προκειµένου να άρουν την παραπά-
νω αδυναµία της τρίτης κανονικής µορφής, προχώρησαν στον ορισµό της οµώνυµης
κανονικής µορφής ο οποίος διατυπώνεται ως εξής : «Μια σχέση βρίσκεται στην κα-
νονική µορφή των Boyce – Codd (BCNF), αν και µόνο αν κάθε πεδίο του πίνακα
που ταυτοποιεί µονοσήµαντα κάποιο άλλο πεδίο, είναι υποψήφιο κλειδί του πί-
νακα». Εφαρµόζοντας τον παραπάνω ορισµό στον πίνακα CLASS, διαπιστώνουµε
πως αυτός δεν βρίσκεται στην BCNF – πράγµατι το πεδίο Advisor παρά το γεγονός
πως ταυτοποιεί µονοσήµαντα το πεδίο Lesson (σύµφωνα µε τη συναρτησιακή εξάρ-
τηση Advisor→Lesson), δεν αποτελεί τµήµα του υποψήφιου κλειδιού του πίνακα.
Από τη βασική θεωρία είναι γνωστό πως ένας πίνακας ορίζεται ως ένα µη
διατεταγµένο σύνολο πλειάδων (tuples). Εφ’ όσον λοιπόν ο πίνακας διαθέτει όλες
τις ιδιότητες ενός συνόλου, είναι προφανές πως µπορούµε να εφαρµόσουµε πάνω
στους πίνακες της βάσης δεδοµένων, όλες τις γνωστές πράξεις από τη θεωρία συνό-
λων – οι πράξεις αυτές είναι η ένωση (union), η τοµή (intersection), η διαφορά
(difference) και το καρτεσιανό γινόµενο (Cartesian product). Η άλλη κατηγορία
πράξεων που αποτελούν τµήµα της σχεσιακής άλγεβρας, περιλαµβάνει διαδικασίες οι
οποίες έχουν οριστεί ειδικά για το σχεσιακό µοντέλο βάσεων δεδοµένων, όπως είναι
η επιλογή (select), η προβολή (project), η σύζευξη (join) και η διαίρεση (division).
Η αναλυτική περιγραφή όλων αυτών των πράξεων της σχεσιακής άλγεβρας, αποτελεί
αντικείµενο των σελίδων που ακολουθούν.
σ DNO=4 (EMPLOYEE)
ενώ για να λάβουµε όλους τους εργαζόµενους της εταιρείας µε µισθό µεγαλύτερο από
30000, θα γράψουµε
σ SALARY>30000 (EMPLOYEE)
επιλέγει τις πλειάδες του πίνακα EMPLOYEE που εργάζονται στο τµήµα µε κωδικό
5 και ο µισθός τους είναι µεγαλύτερος από 25000, και στη συνέχεια, καταχωρεί το
αποτέλεσµα στον πίνακα RESULT.
Εκτός από το σύµβολο της ισότητας, στην παραπάνω συνθήκη επιλογής, µπο-
ρούν να χρησιµοποιηθούν όλοι οι γνωστοί τελεστές σύγκρισης {<, ≤, >, ≥, ≠} µε την
προϋπόθεση πως οι τιµές που παίρνουν τα πεδία πάνω στα οποία εφαρµόζονται,
να είναι διατεταγµένες, έτσι ώστε να είναι δυνατή η εφαρµογή αυτών των τελεστών
– αυτό ισχύει πάντα όταν τα πεδία αυτά είναι αριθµοί ή ηµεροµηνίες. Στην περίπτω-
ση κατά την οποία τα πεδία της συνθήκης επιλογής είναι συµβολοσειρές, τότε χρησι-
µοποιείται η αλφαβητική ταξινόµηση για τη σύγκρισή τους, ενώ όταν είναι αλφα-
ριθµητικά, η σύγκρισή τους γίνεται µε βάση τους κώδικες ASCII των χαρακτήρων
τους. Τέλος, όταν αναφερόµαστε σε πεδία τιµών τα οποία δεν είναι δυνατόν να ταξι-
νοµηθούν, µπορούµε να χρησιµοποιήσουµε µόνο τους τελεστές {=, ≠}. Για παρά-
δειγµα εάν κάποιο από τα πεδία αναπαριστά κάποιο χρώµα που παίρνει τιµές από το
σύνολο Color = {red, green, blue, black, yellow, white}, µπορούµε να χρησιµο-
ποιήσουµε µόνο τους δύο προαναφερόµενους τελεστές, διότι δεν έχει νόηµα να πούµε
πως κάποιο χρώµα είναι µεγαλύτερο ή µικρότερο από κάποιο άλλο – αλλά µπορούµε
να γράψουµε color = black ή color ≠ red.
Η πράξη της προβολής χρησιµοποιείται για να επιλέξει όχι γραµµές του πίνα-
κα όπως η SELECT, αλλά στήλες. Με άλλα λόγια ο πίνακας που θα προκύψει ως
αποτέλεσµα εφαρµογής της PROJECT, δεν θα έχει την ίδια δοµή µε τον πίνακα πά-
νω στον οποίο εφαρµόζεται, αλλά θα έχει γενικά λιγότερες στήλες.
Εφ’ όσον η PROJECT χρησιµοποιείται για την επιλογή στηλών από ένα πί-
νακα, θα πρέπει να κληθεί µε τρόπο που να καθορίζει τόσο τον πίνακα πάνω στον ο-
ποίο θα εφαρµοσθεί, όσο και τις στήλες αυτού του πίνακα που θα επιστρέψει. Έτσι, η
εντολή PROJECT καλείται µε τη µορφή
που θα επιστρέψει αυτές τις τέσσερις στήλες του πίνακα EMPLOYEE οδηγώντας
έτσι στο αποτέλεσµα που ακολουθεί στη συνέχεια. Επίσης είναι προφανές πως η
PROJECT - όπως και η SELECT – εφαρµόζεται µόνο σε ένα πίνακα κάθε φορά.
Στην περίπτωση κατά την οποία η λίστα των στηλών που θέλουµε να ανακτή-
σουµε δεν περιλαµβάνει το πρωτεύον κλειδί του πίνακα, υπάρχει η πιθανότητα το τε-
λικό αποτέλεσµα να περιέχει επαναλαµβανόµενες εγγραφές. Στην περίπτωση αυτή η
PROJECT κρατά µόνο ένα αντίγραφο από κάθε εγγραφή, οδηγώντας έτσι σε ένα
έγκυρο αποτέλεσµα. Η διαδικασία αυτή είναι γνωστή και ως εξάλειψη διπλοεγγρα-
φών (duplicate elimination).
Τέλος είναι σηµαντικό να αναφέρουµε πως ο νέος πίνακας που προκύπτει από
την χρήση των παραπάνω εντολών διατηρεί τα ίδια ονόµατα πεδίων µε τους πίνα-
κες από τους οποίους προέρχεται. Εάν ωστόσο επιθυµούµε να αλλάξουµε τα ονόµα-
τα αυτών των πεδίων, µπορούµε να το κάνουµε γράφοντάς τα εντός παρενθέσεων µε-
τά το όνοµα του πίνακα. Έτσι στην προηγούµενη περίπτωση, τα πεδία του πίνακα
RESULT, φέρουν τα ονόµατα LNAME, FNAME και SALARY, ενώ εάν γράψουµε
Απαραίτητη προϋπόθεση για την εφαρµογή των τριών πρώτων πράξεων είναι
οι πίνακες επί των οποίων εφαρµόζονται, να είναι συµβατοί ως προς την ένωση
(union compatible). ∆ύο πίνακες R(A1, A2, ….., An) και S(B1, B2, ….., Bn) θεωρού-
νται συµβατοί ως προς την ένωση, εάν έχουν το ίδιο πλήθος πεδίων, n, και επιπλέον
ισχύει η συνθήκη dom(Ai) = dom(Bi) (1 ≤ i ≤ n), που σηµαίνει πως τα αντίστοιχα
πεδία των δύο πινάκων να έχουν το ίδιο πεδίο τιµών. Στην περίπτωση αυτή οι πρά-
ξεις της ένωσης, της τοµής και της διαφοράς των πινάκων R και S, ορίζονται µε τον
ακόλουθο τρόπο:
Η ένωση δύο πινάκων, R ∪ S, είναι ένας νέος πίνακας που περιλαµβάνει όλες
τις πλειάδες των δύο πινάκων, οι οποίες µπορεί να ανήκουν µόνο στον R, µόνο
στον S ή και στους δύο πίνακες ταυτόχρονα. Εάν µετά την ένωση των δύο πινάκων
υπάρχουν εγγραφές που εµφανίζονται περισσότερες από µία φορά, αυτές αποµακρύ-
νονται από το τελικό αποτέλεσµα, έτσι ώστε να υπάρχει µόνο ένα αντίγραφο από κά-
θε εγγραφή.
Η τοµή δύο πινάκων, R ∩ S, είναι ένας νέος πίνακας, που περιλαµβάνει όλες
τις πλειάδες οι οποίες είναι κοινές στους δύο πίνακες.
Τέλος η διαφορά των πινάκων, R – S, είναι ένας νέος πίνακας, που περιλαµ-
βάνει όλες τις πλειάδες που ανήκουν στον R, αλλά δεν ανήκουν στον S.
Για τις πράξεις της τοµής και της ένωσης, ισχύει η αντιµεταθετική ιδιότητα,
µπορούµε δηλαδή να γράψουµε R ∩ S = S ∩ R και R ∪ S = S ∪ R, κάτι όµως που
δεν ισχύει για τη διαίρεση, όπου είναι R – S ≠ S – R.
STUDENT INSTRUCTOR
FIRSTNAME LASTNAME FNAME LNAME
Susan Yao John Smith
Ramesh Shah Ricardo Browne
Johnny Kohler Susan Yao
Barbara Jones Francis Johnson
Amy Ford Ramesh Shah
Jimmy Wang
Ernest Gilbert
Η εφαρµογή των πράξεων της ένωσης, της τοµής και της αφαίρεσης πάνω σε
αυτούς τους δύο πίνακες – οι οποίοι είναι συµβατοί ως προς την ένωση έτσι ώστε να
µπορούν να εφαρµοσθούν οι εν λόγω πράξεις – παρουσιάζεται στη συνέχεια
INSTRUCTOR – STUDENT
FIRSTNAME LASTNAME
Susan Yao
Ramesh Shah
STUDENT ∩ INSTRUCTOR
(ε) Τέλος από όλα τα πεδία των πλειάδων που ανακτήσαµε, κρατάµε µόνο το
ονοµατεπώνυµο του υπαλλήλου και τα ονόµατα των προστατευόµενων µελών του:
τρέπει την εκτέλεση όλης αυτής της διαδικασίας σε ένα και µόνο βήµα. Αυτή η πράξη
αποτελεί το αντικείµενο της επόµενης ενότητας.
σ <selection condition> (S X R)
Έτσι, στο προηγούµενο παράδειγµα, οι πράξεις
Το αποτέλεσµα της πράξης της σύζευξης ανάµεσα σε δύο πίνακες R(A1, A2,
….., An) και S(B1, B2, ….., Bm), είναι ένας καινούριος πίνακας Q µε δοµή {A1, A2,
….., An, B1, B2, ….., Bm} που περιλαµβάνει µόνο τις πλειάδες του καρτεσιανού γι-
νοµένου οι οποίες πληρούν τη συνθήκη επιλογής που χρησιµοποιείται. Αυτή άλ-
λωστε είναι και η βασική διαφορά που υφίσταται ανάµεσα στις πράξεις της σύζευξης
και του καρτεσιανού γινοµένου: στο καρτεσιανό γινόµενο περιλαµβάνονται όλοι οι
δυνατοί συνδυασµοί των πλειάδων των δύο πινάκων, ενώ στο αποτέλεσµα της
σύζευξης υπάρχουν µόνο εκείνες οι πλειάδες οι οποίες πληρούν τη συνθήκη επι-
λογής. Αυτή η συνθήκη επιλογής – όπως έχουµε ήδη αναφέρει στην εντολή
SELECT – εφαρµόζεται σε κάθε πλειάδα του καρτεσιανού γινοµένου ξεχωριστά, και
στο τελικό αποτέλεσµα, προστίθενται µόνο εκείνες οι εγγραφές για τις οποίες ισχύει.
Ας σηµειωθεί πως αυτή η συνθήκη επιλογής µπορεί να είναι τόσο απλή όσο και σύν-
θετη, και να περιλαµβάνει τόσο τελεστές σύγκρισης όσο και λογικούς τελεστές.
Στην περίπτωση κατά την οποία η συνθήκη επιλογής πλειάδων από το καρτε-
σιανό γινόµενο των δύο πινάκων, περιλαµβάνει µόνο τον τελεστή της ισότητας (=)
όπως συµβαίνει στο προηγούµενο παράδειγµα, η πράξη της σύζευξης ονοµάζεται
EQUIJOIN. Στην περίπτωση αυτή, στο τελικό αποτέλεσµα, θα υπάρχουν δύο στή-
λες µε διαφορετικά ονόµατα που προέρχονται από τους δύο πίνακες – µία στήλη
από κάθε πίνακα – αλλά έχουν ακριβώς τα ίδια αποτελέσµατα. Για παράδειγµα, εάν
θεωρήσουµε την σύζευξη
Τέλος εάν τα δύο πεδία στη συνθήκη επιλογής έχουν το ίδιο όνοµα, µπορούµε
να τα παραλείψουµε τελείως κατά τη σύνταξη της εντολής. Εάν για παράδειγµα το
πεδίο MGRSSN του πίνακα DEPARTMENT είχε και αυτό το όνοµα SSN θα µπο-
ρούσαµε απλά να γράψουµε
Εκτός από τις πράξεις της σύζευξης και της ένωσης που ορίσαµε στις προη-
γούµενες παραγράφους, υπάρχουν και κάποιες παραλλαγές τους οι οποίες δεν αποτε-
λούν τµήµα της σχεσιακής άλγεβρας, αλλά έχουν υποστηρίζονται από όλα τα µοντέρ-
να σχεσιακά συστήµατα διαχείρισης βάσεων δεδοµένων. Αυτές οι πράξεις είναι η
εξωτερική σύζευξη (outer join) και η εξωτερική ένωση (outer union).
Η διαφορά της εξωτερικής σύζευξης από την απλή σύζευξη, έχει να κάνει µε
το πλήθος του συνδυασµού των πλειάδων των δύο πινάκων που επιστρέφονται. Στην
απλή σύζευξη, όπως είναι γνωστό, επιστρέφονται µόνο οι συνδυασµοί εκείνων των
πλειάδων τα στοιχεία των οποίων ικανοποιούν τη συνθήκη επιλογής που καθορί-
ζουµε στη σύζευξη. Αντίθετα, στην πράξη της εξωτερικής σύζευξης, διατηρούνται
όλες οι πλειάδες, ακόµη και εκείνες που δεν πληρούν τον κανόνα επιλογής. Αυτές
οι πλειάδες, συνδυάζονται µε «κενές» πλειάδες του άλλου πίνακα, δηλαδή µε πλειά-
δες που έχουν σε όλα τα πεδία τους την τιµή NULL. Η πράξη της εξωτερικής σύζευ-
ξης µπορεί να είναι τόσο αριστερή (left outer join) όσο και δεξιά (right outer join)
και ένα από τα σύµβολα που χρησιµοποιούνται για την αναπαράστασή της είναι το
(+).
δουλεύει ο John Smith, θα εφαρµόσουµε την πράξη της διαίρεσης ανάµεσα στους
δύο πίνακες :
SSN_PROJ SMITH_PROJ
ESSN PNO PNO
123456789 1 1
123456789 2 2
666884444 3
453453453 1
453453453 2 SSNS
333445555 2 SSN
333445555 3 123456789
333445555 10 453453453
333445555 20
999887777 30
999887777 10
987987987 10
987987987 30
987654321 30
987654321 20
888665555 20
αυτά τα PROJECTS – και προφανώς κάποιος από αυτούς τους δύο κωδικούς (ο
123456789) θα ανήκει στον John Smith, αφού και αυτός συµπεριλαµβάνεται ανάµε-
σα σε αυτούς τους υπαλλήλους.
Τέλος, για να πάρουµε τα ονόµατα όλων αυτών των υπαλλήλων, δεν έχουµε
παρά να γράψουµε
Στην περίπτωση κατά την οποία δεν καθορίσουµε κάποιο πεδίο ως προς το
οποίο θα λάβει χώρα η οµαδοποίηση των εγγραφών, το αποτέλεσµα της παραπάνω
εντολής είναι ένας πίνακας µε µια µόνο γραµµή, αφού οι συναρτήσεις που θα καθο-
ρίσουµε, θα εφαρµοσθούν σε όλες τις εγγραφές του πίνακα, και όχι σε κάποια οµάδα
εγγραφών. Έτσι, η εντολή
EMP_NO AVG_SAL
8 35125
(γ) Τέλος, από τον πίνακα RES_EMP, κρατάµε µόνο τα ονόµατα και τις διευ-
θύνσεις αυτών των υπαλλήλων.
(γ) Στο επόµενο βήµα βρίσκουµε τους MANAGERS των τµηµάτων που ε-
λέγχουν όλα τα PROJECTS που γίνονται στο Stafford
(δ) Τέλος, από όλες τις πληροφορίες που περιέχει ο πίνακας MAN_DEP_
PROJ, κρατάµε µόνο τον κωδικό του PROJECT, τον κωδικό του τµήµατος που το
ελέγχει, και το επώνυµο, τη διεύθυνση και την ηµεροµηνία γέννησης του
MANAGER για αυτό το τµήµα
(α) Βρίσκουµε από τον πίνακα EMPLOYEE τον κωδικό SSN του Smith
(ε) Από την παραπάνω γραµµή κρατάµε µόνο τον κωδικό του τµήµατος που
διευθύνει ο John Smith
(στ) Στη συνέχεια βρίσκουµε τους κωδικούς των PROJECTS που πραγµατο-
ποιούνται από το τµήµα το οποίο διευθύνεται από τον John Smith
(ζ) Έχοντας ανακτήσει τους κωδικούς των PROJECTS στα οποία ο Smith
εργάζεται σαν EMPLOYEE καθώς και εκείνων στα οποία ο Smith εργάζεται ως
MANAGER, δεν έχουµε παρά να ενώσουµε τους αντίστοιχους πίνακες προκειµένου
να λάβουµε τους κωδικούς των PROJECTS στα οποία ο Smith εργάζεται είτε ως
EMPLOYEE είτε ως MANAGER. Έτσι τελικά θα έχουµε
(β) Στη συνέχεια βρίσκουµε τους κωδικούς των υπαλλήλων που έχουν προ-
στατευόµενα µέλη
(γ) Οι κωδικοί των υπαλλήλων που δεν έχουν προστατευόµενα µέλη, είναι αυ-
τοί που αποµένουν εάν αφαιρέσουµε τους κωδικούς των υπαλλήλων που έχουν προ-
στατευόµενα µέλη από το σύνολο των κωδικών των υπαλλήλων
(β) Στη συνέχεια διαβάζουµε τους κωδικούς SSN όλων των EMPLOYEES
που έχουν προστατευόµενα µέλη
ΑΠΑΝΤΗΣΗ: (α) Αρχικά ανακτούµε τους κωδικούς των υπαλλήλων που ερ-
γάζονται στο τµήµα µε κωδικό 5
(δ) Από τον πίνακα WORKS_PRODX κρατάµε µόνο εκείνες τις εγγραφές
που αφορούν τους υπαλλήλους του τµήµατος 5 που εργάζονται στο PROJECT
ProductX περισσότερες από 10 ώρες την εβδοµάδα.
(ε) Τέλος βρίσκουµε το όνοµα και τον επώνυµο για όλους αυτούς τους υπαλ-
λήλους.
(γ) Κατόπιν βρίσκουµε τους υπαλλήλους που έχουν το ίδιο µικρό όνοµα µε
κάποιο από τα προστατευόµενα µέλη του
(β) Βρίσκουµε τους υπαλλήλους που εποπτεύονται απευθείας από τον Franklin
Wong
ΑΣΚΗΣΗ 10: Για κάθε PROJECT να βρεθεί το όνοµα του PROJECT και ο
συνολικός αριθµός των ωρών ανά εβδοµάδα που αναλώνεται σε αυτό το PROJECT
από όλους τους υπαλλήλους
ΑΠΑΝΤΗΣΗ: (α) Στο πρώτο βήµα θα οµαδοποιήσουµε τις εγγραφές του πί-
νακα WORKS_ON ως προς τον κωδικό του project και για κάθε ένα από τα
projects της εταιρείας, θα αθροίσουµε τις ώρες που αφιερώνονται σε αυτό, από όλους
τους υπαλλήλους της εταιρείας.
ΑΠΑΝΤΗΣΗ: (α) Αρχικά ανακτούµε τους κωδικούς όλων των projects που
πραγµατοποιούνται από την εταιρεία.
(β) Στη συνέχεια, από τον πίνακα WORKS_ON ανακτούµε για κάθε υπάλλη-
λο, τον κωδικό του, καθώς και τον κωδικό των projects στα οποία απασχολείται.
(α) Βρίσκουµε τους κωδικούς των υπαλλήλων που εργάζονται στα διάφορα
projects της εταιρείας.
(γ) Για να βρούµε τους κωδικούς των υπαλλήλων που δεν εργάζονται σε κα-
νένα project αφαιρούµε από το σύνολο των κωδικών των υπαλλήλων τους κωδικούς
εκείνων των υπαλλήλων που εργάζονται στα διάφορα projects.
ΑΣΚΗΣΗ 13: Για κάθε τµήµα να ανακτηθεί το όνοµά του και ο µέσος όρος
των µισθών για τους υπαλλήλους που δουλεύουν σε αυτό το τµήµα
ΑΣΚΗΣΗ 14: Να ανακτηθεί ο µέσος όρος των µισθών για όλες τις γυναίκες
υπαλλήλους
(β) Στη συνέχεια επιστρέφουµε τον µέσο όρο των µισθών τους
Όπως έχει ήδη αναφερθεί, µια από τις βασικές λειτουργίες ενός σχεσιακού
συστήµατος διαχείρισης βάσεων δεδοµένων, είναι η διαχείριση του πληροφοριακού
περιεχοµένου που είναι αποθηκευµένο στη βάση, και οργανωµένο σε πίνακες οι
οποίοι συσχετίζονται µεταξύ τους. Οι πιο σηµαντικές µορφές αυτής της διαχείρισης
είναι η εισαγωγή, µεταβολή και διαγραφή των εγγραφών των πινάκων της βάσης
– διεργασίες οι οποίες οδηγούν στη µεταβολή του πληροφοριακού περιεχοµένου –
αλλά και η επιλογή και εµφάνιση των εγγραφών των πινάκων µε βάση κάποια
κριτήρια αναζήτησης. Πριν βέβαια πραγµατοποιηθούν όλες οι παραπάνω ενέργειες,
θα πρέπει να δηµιουργήσουµε τους πίνακες της βάσης και να ορίσουµε τις συσχετί-
σεις που υφίστανται ανάµεσά στα πεδία τους, µε βάση το λογικό σχεδιασµό του συ-
στήµατος που έχουµε περιγράψει σε προηγούµενο κεφάλαιο.
Η διαχείριση των πινάκων από τις εντολές της γλώσσας ορισµού δεδοµένων,
περιλαµβάνει τη δηµιουργία και διαγραφή πινάκων από τη βάση δεδοµένων κα-
θώς και την προσθήκη πεδίων στους πίνακες, µετά τη δηµιουργία τους. Οι εντο-
λές που πραγµατοποιούν αυτές τις διαδικασίες, είναι οι CREATE TABLE, DROP
TABLE και ALTER TABLE.
∆εν είναι δύσκολο να διαπιστώσει κανείς, πως στην παραπάνω σύνταξη της
εντολής CREATE TABLE δεν έχουµε τη δυνατότητα να καθορίσουµε ποιο είναι το
πρωτεύον κλειδί του πίνακα. Αυτό είναι κάτι που ποικίλλει από γλώσσα σε γλώσσα,
καθώς σε άλλες εκδόσεις της SQL, είναι δυνατός ο καθορισµός των κλειδιών των πι-
νάκων, κατά τη φάση της δηµιουργίας τους, µε την CREATE TABLE. Η παράµε-
τρος που καθορίζει το πρωτεύον κλειδί σε αυτές τις περιπτώσεις, είναι η UNIQUE η
οποία χρησιµοποιείται ως κανόνας µαζί µε τον κανόνα NOT NULL. Έτσι για να δεί-
ξουµε πως το πεδίο SSN είναι πρωτεύον κλειδί του πίνακα EMPLOYEE µπορούµε
να το δηλώσουµε στην CREATE TABLE ως
η οποία διαγράφει τον πίνακα DEPENDENTS µαζί µε όλα τα δεδοµένα που περιέχει,
από τη βάση δεδοµένων της εταιρείας.
Τέλος, η εντολή ALTER TABLE επιτρέπει την τροποποίηση της δοµής του
πίνακα µετά τη δηµιουργία του, και πιο συγκεκριµένα, την προσθήκη νέων πεδίων
σε αυτόν – αν και σε ορισµένες περιπτώσεις επιτρέπεται τόσο η διαγραφή όσο και η
µεταβολή του τύπου δεδοµένων για κάποιο από τα πεδία του πίνακα. Για να προσθέ-
σουµε ένα νέο πεδίο σε κάποιο πίνακα, θα πρέπει να καθορίσουµε το όνοµά του και
τον τύπο του. Για παράδειγµα η εντολή
προσθέτει στον πίνακα EMPLOYEE το πεδίο JOB που είναι συµβολοσειρά µε µέ-
γιστο µήκος ίσο µε 12 χαρακτήρες.
Η όψη (view), στην ορολογία της SQL, ορίζεται ως ένας απλός πίνακας, ο
οποίος προκύπτει από το συνδυασµό των πεδίων ενός ή περισσοτέρων πινάκων.
Αυτοί οι πίνακες, µε τη σειρά τους, µπορεί να είναι είτε βασικοί πίνακες τα δεδοµένα
των οποίων αποθηκεύονται στα αρχεία του συστήµατος, ή άλλες όψεις, οι οποίες θε-
ωρούνται εικονικοί πίνακες που τους χρησιµοποιούµε χωρίς να αποθηκεύουµε τα
περιεχόµενά τους.
Τέλος, η διαγραφή µιας όψης γίνεται µε την εντολή DROP VIEW. Παρά-
δειγµα χρήσης της εντολής αυτής, είναι η κλήση της µε τη µορφή
η οποία διαγράφει την όψη WORKS_ON1 από τη βάση δεδοµένων της εταιρείας.
Η ταξινόµηση των τιµών του πεδίου πάνω στο οποίο θα δηµιουργηθεί ο δεί-
κτης, µπορεί να είναι είτε αύξουσα (ascending) είτε φθίνουσα (descending), και κα-
θορίζεται από το χρήστη, αναγράφοντας τις παραµέτρους ASC και DESC αντίστοιχα,
αµέσως µετά το όνοµα του πεδίου. Εάν δεν χρησιµοποιήσουµε αυτή την παράµετρο,
όπως στο παραπάνω παράδειγµα, ο δείκτης χρησιµοποιεί την αύξουσα ταξινόµηση
για τη διάταξη των τιµών του πεδίου. Η δηµιουργία ενός δείκτη για ένα συνδυασµό
πεδίων είναι επίσης δυνατή, και µάλιστα έχουµε τη δυνατότητα να καθορίσουµε δια-
φορετικό είδος ταξινόµησης για κάθε απλό πεδίο. Έτσι η εντολή
δηµιουργεί ένα δείκτη πάνω στα πεδία LNAME, MINIT και FNAME, εκ των οποί-
ων το LNAME ταξινοµείται κατά αύξουσα διάταξη ενώ το FNAME ταξινοµείται
κατά φθίνουσα διάταξη. Τέλος όταν δεν έχουµε τη δυνατότητα να ορίσουµε κατά το
στάδιο δηµιουργίας των πινάκων το πρωτεύον κλειδί του πίνακα, µπορούµε να το κά-
νουµε δηµιουργώντας ένα INDEX για αυτό το πεδίο, και ταυτόχρονα δηλώνοντας
πως οι τιµές που καταχωρούνται σε αυτό, θα πρέπει να είναι µοναδικές:
Η εισαγωγή µιας νέας εγγραφής σε κάποιον από τους πίνακες της βάσης δε-
δοµένων, γίνεται δια της χρήσης της εντολής INSERT, η οποία στη γενική περίπτω-
ση, καλείται µε τη µορφή
όπου <TABLE NAME> είναι το όνοµα του πίνακα στον οποίο θα καταχωρηθεί η
νέα εγγραφή, και <v1>, <v2>, …… , <vn>, είναι οι τιµές των πεδίων της εγγραφής
που θέλουµε να καταχωρήσουµε. Έτσι η εντολή
καταχωρεί στον πίνακα DEPTS_INFO ένα πλήθος εγγραφών, που για κάθε τµήµα
της εταιρείας, περιλαµβάνει το όνοµα του τµήµατος, το πλήθος των υπαλλήλων
που εργάζονται σε αυτό, και το σύνολο των µισθών τους. Είναι προφανές πως για
να εκτελεστεί η παραπάνω εντολή, ο πίνακας DEPTS_INFO θα πρέπει να έχει δη-
µιουργηθεί σε προηγούµενο στάδιο της διαδικασίας, και η δοµή του θα πρέπει να εί-
ναι συµβατή µε τη δοµή του πίνακα που επιστρέφει η SELECT έτσι ώστε να είναι
δυνατή η προσθήκη σε αυτόν των νέων εγγραφών.
Στα δύο πρώτα παραδείγµατα η εντολή DELETE διαγράφει µια εγγραφή κά-
θε φορά – αυτή που αναφέρεται στον Brown, και αυτή που αναφέρεται στον υπάλλη-
λο µε κωδικό SSN = 123456789. Στο τρίτο παράδειγµα οι εγγραφές που πρόκειται να
διαγραφούν, καθορίζονται από µια πρόταση SELECT η οποία επιστρέφει τον κωδικό
του τµήµατος µε όνοµα DEPARTMENT. Εποµένως, η παραπάνω εντολή, διαγράφει
όλους τους υπαλλήλους της εταιρείας, που ανήκουν στο Research Department.
Η εντολή UPDATE, χρησιµοποιείται για την τροποποίηση των τιµών των πε-
δίων επιλεγµένων εγγραφών κάποιου από τους πίνακες της βάσης. Αυτές οι εγγραφές,
καθορίζονται όπως και στην εντολή DELETE, από µια πρόταση WHERE, που κα-
θορίζει τα χαρακτηριστικά των εγγραφών που θέλουµε να τροποποιήσουµε. Τα
πεδία των οποίων οι τιµές θα µεταβληθούν, καθώς επίσης και οι νέες τιµές που θα
καταχωρήσουµε σε αυτά, καθορίζονται, χρησιµοποιώντας την πρόταση SET. Έτσι, η
εντολή
UPDATE PROJECT
SET PLOCATION = ‘Bellaire’, DNUM = 5
WHERE PNUMBER = 10
τροποποιεί τις τιµές των πεδίων της εγγραφής του πίνακα PROJECT για την οποία
το πεδίο PNUMBER έχει την τιµή 10, και αποδίδει στο πεδίο PLOCATION την τι-
µή Bellaire, και στο πεδίο DNUM, την τιµή 5.
UPDATE EMPLOYEE
SET SALARY = SALARY * 1.1
WHERE DNO IN ( SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME = ‘Research’ )
τροποποιεί τους µισθούς όλων των υπαλλήλων που εργάζονται στο Research
Department, προκαλώντας αύξηση της τιµής τους κατά 10%.
Εκτός από την οµάδα διαδικασιών η οποία τροποποιεί το περιεχόµενο των πι-
νάκων της βάσης, υπάρχουν και άλλες διαδικασίες, οι οποίες δε µεταβάλλουν τα δε-
δοµένα των πινάκων, αλλά αναζητούν και εµφανίζουν δεδοµένα, τα οποία πληρούν
κάποια συγκεκριµένα κριτήρια επιλογής. Αυτού του είδους οι διαδικασίες ονοµά-
ζονται ερωτήµατα (queries) και πραγµατοποιούνται δια της χρήσης µιας εκ των ε-
ντολών της γλώσσας χειρισµού δεδοµένων (Data Manipulation Language, DML),
που φέρει το όνοµα SELECT.
όπου ο κατάλογος <attribute list> περιέχει τα ονόµατα των πεδίων που θέλουµε να
ανακτήσουµε, ο κατάλογος <table list> περιέχει τα ονόµατα των πινάκων που θα
χρησιµοποιηθούνε στη δηµιουργία του ερωτήµατος, ενώ <condition>, είναι το
κριτήριο αναζήτησης, που θα πρέπει να ικανοποιείται από τα δεδοµένα των πι-
νάκων, προκειµένου αυτά να εµφανιστούν στο τελικό αποτέλεσµα.
TABLE_NAME.ATTRIBUTE_NAME
περιλαµβάνει δηλαδή, τον καθορισµό, όχι µόνο του ονόµατος του πεδίου, αλλά και το
όνοµα του πίνακα στον οποίο ανήκει το εν λόγω πεδίο. Έτσι η ασάφεια που χαρακτη-
ρίζει το προηγούµενο ερώτηµα, αίρεται, εάν το επαναδιατυπώσουµε στη µορφή
Μια ακόµη ιδιάζουσα περίπτωση που αξίζει να αναφερθεί, αφορά την εµφά-
νιση της ασάφειας µε τον τρόπο που την ορίσαµε παραπάνω, όχι όσον αφορά τα πε-
δία των πινάκων, αλλά όσον αφορά τους ίδιους τους πίνακες. Χαρακτηριστικό παρά-
δειγµα αυτής της περίπτωσης είναι οι αναδροµικές συσχετίσεις (recursive
relationships) που υφίστανται ανάµεσα σε δύο αντίγραφα του ίδιου πίνακα. Αυτό
π.χ. συµβαίνει στην περίπτωση κατά την οποία θέλουµε για κάθε υπάλληλο, να ανα-
κτήσουµε το ονοµατεπώνυµό του, καθώς και το ονοµατεπώνυµο του MANAGER
που τον εποπτεύει. Επειδή όµως και ο MANAGER είναι και ο ίδιος ένας υπάλλη-
λος, και εποµένως τα προσωπικά του στοιχεία βρίσκονται και αυτά αποθηκευµένα
στον πίνακα EMPLOYEE, θα πρέπει στη σύνταξη του ερωτήµατος, να χρησιµο-
ποιήσουµε δύο φορές τον πίνακα EMPLOYEE, µε αποτέλεσµα την εµφάνιση α-
προσδιοριστίας όσον αφορά τον ακριβή ρόλο του κάθε αντιγράφου του πίνακα κατά
την εκτέλεση του παραπάνω ερωτήµατος.
Η άρση της απροσδιοριστίας στην περίπτωση αυτή, λαµβάνει χώρα δια της
χρήσης για κάθε αντίγραφο του πίνακα και ενός διαφορετικού ονόµατος. Αυτό το ό-
νοµα δεν επηρεάζει τις ιδιότητες του πίνακα, αλλά πρόκειται απλά για ένα ψευδώνυ-
µο (alias). Έτσι, το παραπάνω ερώτηµα θα διατυπωθεί µε τη µορφή
στην οποία έχουµε ορίσει για κάθε αντίγραφο του πίνακα EMPLOYEE και ένα δια-
φορετικό ψευδώνυµο. Πιο συγκεκριµένα, το ψευδώνυµο E, αναφέρεται στον πίνακα
EMPLOYEE µε το ρόλο του υπαλλήλου, ενώ το ψευδώνυµο S, αναφέρεται στον
πίνακα EMPLOYEE µε το ρόλο του επόπτη. Στην περίπτωση αυτή αίρεται κάθε
µορφή απροσδιοριστίας όσον αφορά τον τρόπο ερµηνείας του παραπάνω ερωτήµα-
τος, καθώς το κάθε αντίγραφο του πίνακα παίζει πλέον το δικό του ρόλο ο οποίος εί-
ναι διακριτός και πλήρως ορισµένος.
Στην περίπτωση κατά την οποία καλέσουµε την εντολή SELECT χωρίς την
πρόταση WHERE, το αποτέλεσµα που θα λάβουµε θα περιλαµβάνει όλες τις εγγρα-
φές του πίνακα, καθώς δεν καθορίζουµε κάποιο συγκεκριµένο κριτήριο αναζήτησης.
Για παράδειγµα, εάν γράψουµε
θα λάβουµε τα ονοµατεπώνυµα όλων των υπαλλήλων της εταιρείας, ενώ για να λά-
βουµε όλα τα πεδία της κάθε εγγραφής, θα χρησιµοποιήσουµε τον τελεστή «*». Έτσι
η εντολή
SELECT *
FROM EMPLOYEE
WHERE DNO = 5
θα επιστρέψει όλα τα πεδία των υπαλλήλων της εταιρείας, για τους οποίους ο κωδι-
κός του τµήµατος στο οποίο απασχολούνται έχει την τιµή 5.
SELECT SALARY
FROM EMPLOYEE
για να ανακτήσουµε τους µισθούς των υπαλλήλων της εταιρείας, υπάρχει πιθανότητα
στο τελικό αποτέλεσµα να εµφανίζεται η ίδια τιµή περισσότερες από µια φορές –
στην περίπτωση κατά την οποία υπάρχουν πολλοί υπάλληλοι που παίρνουν τον ίδιο
µισθό. Εάν όµως θέλουµε να κρατήσουµε µόνο µια φορά την κάθε τιµή θα καλέσουµε
την εντολή µε τη µορφή
SALARY SALARY
30000 30000
40000 40000
25000 25000
43000 43000
38000 38000
25000 55000
25000
55000
SELECT PNUMBER
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND MGRSSN = SSN AND
LNAME = ‘Smith’
UNION
SELECT PNUMBER
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE PNUMBER = PNO AND ESSN = SSN AND
LNAME = ‘Smith’
Είναι προφανές πως στη γενική περίπτωση είναι πρακτικά δύσκολο να χρησι-
µοποιήσουµε ένα σύνολο τιµών µε τον τρόπο που το κάναµε παραπάνω. Αυτό συµ-
βαίνει διότι αφ’ ενός δεν µπορούµε να γνωρίζουµε τις τιµές που θα περιλαµβάνο-
νται σε αυτό, έτσι ώστε να τις παραθέσουµε τη µία µετά την άλλη, και αφ’ ετέρου,
αυτές οι τιµές ενδέχεται να αλλάξουν στο µέλλον, καθώς η βάση χαρακτηρίζεται
από συνεχή εισαγωγή, διαγραφή και τροποποίηση εγγραφών. Για το λόγο αυτό,
δεν καταχωρούµε απευθείας αυτές τις τιµές, αλλά τις ανακτούµε µε µία πρόταση
SELECT την οποία διαβιβάζουµε ως παράµετρο στον τελεστή σύγκρισης IN. Με τον
τρόπο αυτό καλούµε την εντολή SELECT µέσα από κάποια άλλη SELECT, κάτι
που έχει ως αποτέλεσµα τη δηµιουργία των επονοµαζόµενων φωλιασµένων ερωτη-
µάτων (nested queries). Η εντολή SELECT που χρησιµοποιείται µαζί µε τον τελε-
στή σύγκρισης IN στην πρόταση WHERE, ονοµάζεται εσωτερικό ερώτηµα (inner
query), ενώ η SELECT µέσα από την οποία καλείται το εσωτερικό ερώτηµα, ονοµά-
ζεται εξωτερικό ερώτηµα (outer query). Χρησιµοποιώντας φωλιασµένα ερωτήµα-
τα, το παραπάνω παράδειγµα που ζητούσε τους κωδικούς των PROJECTS στα οποία
ο Smith συµµετέχει τόσο ως εργαζόµενος, όσο και ως MANAGER, µπορεί να επα-
ναδιατυπωθεί ως εξής:
Εκείνο που κάνουµε στην παραπάνω εντολή είναι να βρούµε το σύνολο των
κωδικών των PROJECTS στα οποία ο Smith συµµετέχει τόσο ως εργαζόµενος όσο
και ως MANAGER, και στη συνέχεια χρησιµοποιώντας τον λογικό τελεστή OR να
ενώσουµε στην ουσία αυτά τα σύνολα. Επειδή δεν είναι δυνατόν να γνωρίζουµε σε
κάθε χρονική στιγµή τις τιµές αυτών των συνόλων, τις ανακτούµε µε δύο φωλιασµέ-
νες SELECT, έτσι ώστε σε κάθε περίπτωση τα σύνολα αυτά, να περιέχουν τις σω-
στές τιµές.
το οποίο επιστρέφει το όνοµα και το επώνυµο κάθε υπαλλήλου, που έχει ένα προ-
στατευόµενο µέλος µε το ίδιο όνοµα και το ίδιο φύλλο µε το δικό του. Επειδή ο
πίνακας EMPLOYEE εµφανίζεται τόσο στο εσωτερικό όσο και στο εξωτερικό ε-
ρώτηµα, θα πρέπει αφ ενός µεν, να δηµιουργήσουµε ένα ψευδώνυµό του, Ε, έτσι ώ-
στε να καταστήσουµε διακριτό το ρόλο των δύο αντιγράφων του, αφ ετέρου δε, να
χρησιµοποιήσουµε τον πλήρη τρόπο σύνταξης κάθε φορά που χρησιµοποιούµε κά-
ποιο πεδίο, έτσι ώστε να ξέρουµε σε ποιο πίνακα αναφέρεται.
σεων οι οποίες επιστρέφουν κάποιες τιµές. Στη γλώσσα SQL οι συναρτήσεις αυτές
είναι η COUNT η οποία επιστρέφει το πλήθος των εγγραφών ενός πίνακα ή το
πλήθος κάποιων τιµών ανάλογα µε τον τρόπο µε τον οποίο καλείται, η MIN και η
MAX οι οποίες επιστρέφουν την ελάχιστη και τη µέγιστη τιµή κάποιου συνόλου, η
SUM που επιστρέφει το άθροισµα κάποιων τιµών, και η AVG που επιστρέφει το
µέσο όρο τους. Στις επόµενες παραγράφους παρουσιάζουµε κάποια παραδείγµατα
που θα µας επιτρέψουν να κατανοήσουµε τον τρόπο µε τον οποίο χρησιµοποιούνται
αυτές οι συναρτήσεις µέσα από τη γλώσσα χειρισµού δεδοµένων.
που για κάθε τµήµα της εταιρείας, επιστρέφει τον κωδικό του, το πλήθος των υπαλ-
λήλων που εργάζονται σε αυτό, και το µέσο όρο των µισθών τους.
Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως σε περιπτώσεις κατά τις
οποίες τα δεδοµένα που θέλουµε να ανακτήσουµε ανήκουν σε δύο ή περισσότερους
πίνακες, η παράµετρος GROUP BY θα κληθεί µετά την πράξη της σύζευξης των δύο
πινάκων. Ας θεωρήσουµε για παράδειγµα το ερώτηµα
που για κάθε PROJECT της εταιρείας, επιστρέφει τον κωδικό του, το όνοµά του,
καθώς και το πλήθος των υπαλλήλων που εργάζονται σε αυτό. Επειδή στην περί-
πτωση αυτή θα λάβει χώρα συσχέτιση πληροφορίας από δύο διαφορετικούς πίνακες,
θα πρέπει να χρησιµοποιηθεί η πράξη της σύζευξης (join) που στην προκειµένη πε-
ρίπτωση θα συσχετίσει το πεδίο PNUMBER του πίνακα PROJECT, µε το πεδίο
PNO του πίνακα WORKS_ON. Έτσι, η οµαδοποίηση των εγγραφών µε βάση τον
κωδικό και το όνοµα του PROJECT, θα πρέπει να εφαρµοσθεί πάνω στο αποτέλε-
σµα της σύζευξης των δύο πινάκων, κάτι που σηµαίνει πως η παράµετρος GROUP
BY θα χρησιµοποιηθεί τελευταία.
στις δύο περιπτώσεις, θα λάβει χώρα η σύζευξη ανάµεσα στους πίνακες, καθώς και
η οµαδοποίηση των πλειάδων του ενδιάµεσου πίνακα που θα προκύψει από τη
αυτή τη σύζευξη, µε κριτήριο τον κωδικό και το όνοµα του PROJECT. Η πρότα-
ση SELECT όµως δεν θα επιστρέψει όλες τις εγγραφές αλλά µόνο εκείνες που αντι-
στοιχούν σε πλήθος υπαλλήλων µεγαλύτερο του 2. Εποµένως η παράµετρος
HAVING επιτρέπει την επιλογή συγκεκριµένων οµάδων εγγραφών.
Με άλλα λόγια το σύµβολο «_» αντικαθιστά ένα χαρακτήρα κάθε φορά, ενώ
το σύµβολο «%», αντικαθιστά ένα σύνολο χαρακτήρων, αυθαίρετου µεγέθους.
που για όλους τους υπαλλήλους που εργάζονται στο PROJECT µε όνοµα ProductX,
επιστρέφει το όνοµά τους, το επώνυµό τους, και το µισθό τους αυξηµένο κατά
10%. Με τον ίδιο τρόπο µπορούµε να χρησιµοποιήσουµε και τους αριθµητικούς τε-
λεστές «+», «–» και «/».
ρηµένες στους πίνακες της βάσης, αλλά ταξινοµηµένες, κατά αύξουσα ή κατά φθί-
νουσα ταξινόµηση. Για να το κάνουµε αυτό θα χρησιµοποιήσουµε την παράµετρο
ORDER BY συνοδευόµενη από τα πεδία ως προς τα οποία θέλουµε να λάβει χώρα
αυτή η ταξινόµηση. Εάν δεν καθορίσουµε κάποιο είδος ταξινόµησης, τα αποτελέσµα-
τα του ερωτήµατος θα ταξινοµηθούν κατά αύξουσα σειρά. Έτσι η εντολή
τότε η ταξινόµηση ως προς το όνοµα του τµήµατος θα γίνει κατά φθίνουσα σειρά,
ενώ η ταξινόµηση ως προς το επώνυµο και το όνοµα του υπαλλήλου, θα γίνει κατά
αύξουσα σειρά.
Ιστορικά, η Microsoft Access εµφανίστηκε στην αγορά στις αρχές της δεκαε-
τίας του 1990, όταν πλέον η τεχνολογία των βάσεων δεδοµένων είχε ωριµάσει, και η
κατασκευή ισχυρών επεξεργαστών και υπολογιστικών συστηµάτων, επέτρεπε τη µε-
ταφορά τέτοιων προγραµµάτων σε προσωπικούς υπολογιστές. Αυτό ήταν αδιανόητο
πριν από λίγα χρόνια, όπου, την ευθύνη διαχείρισης µεγάλων βάσεων δεδοµένων την
είχαν αποκλειστικά τα mainframes και τα µεγάλα συστήµατα. Γρήγορα η Access
γνώρισε πολύ µεγάλη επιτυχία, και σήµερα, µετά από δέκα και πλέον χρόνια, έχει
φτάσει στην πέµπτη έκδοσή της µε το όνοµα Microsoft Access 2000 που τρέχει κάτω
από τα λειτουργικά συστήµατα Windows Me και Windows 2000 – ας σηµειωθεί πως
πριν από λίγο καιρό κυκλοφόρησε και η Microsoft Access XP που τρέχει κάτω από
το λειτουργικό σύστηµα των Windows XP. Στις επόµενες σελίδες θα παρουσιάσουµε
τις βασικές συνιστώσες του προγράµµατος, καθώς και τον τρόπο µε τον οποίο είναι
δυνατή η διαχείριση µιας σχεσιακής βάσεως δεδοµένων µέσα από την εν λόγω ε-
φαρµογή.
Κεφάλαιο 7 : Εισαγωγή στη Microsoft Access 112
Από την παραπάνω περιγραφή, είναι προφανές, πως η Microsoft Access απο-
τελείται από ένα σύνολο συνιστωσών, οι οποίες σε γενικές γραµµές είναι οι ακόλου-
θες :
ρία του σχεσιακού µοντέλου βάσεων δεδοµένων, δεν είναι δυνατόν να υπάρξουν δύο
εγγραφές του πίνακα που να έχουν την ίδια τιµή στο πρωτεύον κλειδί τους.
Η πρώτη εικόνα που παρουσιάζεται στην οθόνη µας αµέσως µετά την εκκίνη-
ση της Microsoft Access, είναι το παράθυρο του επόµενου σχήµατος, από το οποίο
µπορούµε να καθορίσουµε τη βάση που θέλουµε να χρησιµοποιήσουµε. Για τον
καθορισµό αυτής της βάσης έχουµε δύο δυνατότητες: είτε να δηµιουργήσουµε µια
καινούρια βάση δεδοµένων, είτε να ανοίξουµε µια υπάρχουσα βάση, και να εργα-
σθούµε µε αυτή. Στην πρώτη περίπτωση, µπορούµε να ζητήσουµε από την Access να
µας ανοίξει µια κενή βάση – οπότε θα πρέπει να καθορίσουµε µόνοι µας το πλήθος
και τη δοµή των πινάκων – η να δηµιουργήσουµε τη βάση µε τη βοήθεια της
Access, η οποία θα µας βοηθήσει να ορίσουµε το σχήµα της µέσα από ένα εύχρηστο
και φιλικό περιβάλλον (Database Wizard). Εφ’ όσον επιλέξουµε να ανοίξουµε µια
υπάρχουσα βάση δεδοµένων που έχουµε χρησιµοποιήσει στο παρελθόν, µπορούµε να
επιλέξουµε τη βάση αυτή από τον κατάλογο βάσεων δεδοµένων που εµφανίζεται στο
κάτω µέρος του διαλόγου.
Στο παραπάνω παράθυρο, το όνοµα της νέας βάσης, καταχωρείται στο πλαί-
σιο «Όνοµα Αρχείου», ενώ ως τύπο αρχείου αφήνουµε το προεπιλεγµένο «Βάσεις
∆εδοµένων Microsoft Access» που βρίσκεται ακριβώς από κάτω. Καταχωρώντας
αυτή την πληροφορία, µπορούµε στη συνέχεια να δηµιουργήσουµε τη βάση δεδοµέ-
νων στον κατάλογο που έχουµε επιλέξει, πατώντας το κουµπί που φέρει την ετικέτα
«∆ηµιουργία». Στην περίπτωση αυτή, η Access δηµιουργεί το αρχείο της βάσης στο
σκληρό δίσκο του υπολογιστή µας, και εµφανίζει στην οθόνη µας το κεντρικό παρά-
θυρο διαχείρισης της βάσης δεδοµένων, που παρουσιάζεται στη συνέχεια.
Σχήµα 15 : Οι τρεις βασικές λειτουργίες που εφαρµόζονται στα αντικείµενα της βάσης
Από τις επιλογές που εµφανίζονται σε αυτό το menu, οι πιο σηµαντικές είναι
η «∆ηµιουργία» που επιτρέπει τη δηµιουργία µιας κενής βάσης δεδοµένων σύµφωνα
µε τα όσα έχουµε αναφέρει στις προηγούµενες σελίδες, οι επιλογές «Άνοιγµα» και
«Κλείσιµο» που επιτρέπουν την έναρξη και τον τερµατισµό της χρήσης υπάρχου-
σας βάσης, η επιλογή «Εκτύπωση» που επιτρέπει την εκτύπωση στοιχείων της βά-
σης σε κάποιον από τους εγκατεστηµένους εκτυπωτές του συστήµατος, η επιλογή «Ι-
διότητες» που εµφανίζει ένα παράθυρο µε τις πιο σηµαντικές από τις ιδιότητες της
βάσης, και η επιλογή «Έξοδος» που τερµατίζει τη λειτουργία της εφαρµογής. Άλλες
επίσης ενδιαφέρουσες επιλογές, είναι η επιλογή «Λήψη εξωτερικών δεδοµένων»
που επιτρέπει την εισαγωγή (import) πινάκων και δεδοµένων από άλλες βάσεις, η
επιλογή «Εξαγωγή» η οποία διαµορφώνει τα αντικείµενα της βάσης, µε τρόπο που
να καθιστά δυνατή τη χρήση τους µέσα από άλλα προγράµµατα, και η επιλογή «Α-
ποστολή προς», η οποία επιτρέπει την αποστολή κάποιου αντικειµένου της βάσης σε
κάποιο παραλήπτη, δια της χρήσης της υπηρεσίας του ηλεκτρονικού ταχυδροµείου.
Το δεύτερο σύνολο επιλογών που περιλαµβάνεται στο κεντρικό menu της Ac-
cess, φέρει το όνοµα «Επεξεργασία». Εδώ θα συναντήσουµε τις συνήθεις µορφές
επεξεργασίας δεδοµένων, που είναι η Αναίρεση (Undo), η αποκοπή (Cut), η αντι-
γραφή (Copy) και η επικόλληση (Paste). Από τις υπόλοιπες επιλογές, οι πιο σηµα-
ντικές είναι η ∆ιαγραφή (Delete) και η Μετονοµασία (Rename). Οι πράξεις αυτές
εφαρµόζονται στο αντικείµενο που έχουµε επιλέξει µε το ποντίκι στο κεντρικό παρά-
θυρο διαχείρισης της βάσης δεδοµένων, και είτε αλλάζουν το όνοµά του, είτε το δια-
γράφουν από τη βάση. Ας σηµειωθεί πως η πράξη της διαγραφής είναι µόνιµη και δεν
µπορεί να αναιρεθεί σε καµία περίπτωση – για το λόγο αυτό θα πρέπει να γίνεται µε
πολύ µεγάλη προσοχή.
Αυτό το παράθυρο, περιέχει όλες τις γραµµές εργαλείων που είναι διαθέσι-
µες στον τελικό χρήστη. Από αυτές τις γραµµές, εκείνες οι οποίες ήδη εµφανίζονται
στο κεντρικό παράθυρο της εφαρµογής, είναι επιλεγµένες. Εάν θέλουµε να εµφανί-
σουµε και κάποια επιπλέον γραµµή, δεν έχουµε παρά να την επιλέξουµε. Για να
αποκρύψουµε κάποια γραµµή, θα πρέπει απλά να αναιρέσουµε την επιλογή της.
Επιπλέον έχουµε τη δυνατότητα να τροποποιήσουµε τα κουµπιά που εµφανίζονται σε
κάθε γραµµή, έτσι ώστε τελικά να διαµορφώσουµε το περιβάλλον εργασίας της Mi-
crosoft Access, έτσι ώστε να καλύψουµε τις ανάγκες µας.
Η πιο σηµαντική από τις γραµµές εργαλείων της Microsoft Access, φέρει το
όνοµα «Βάση ∆εδοµένων», και περιέχει ένα σύνολο από κουµπιά, που πραγµατο-
ποιούν τις πιο σηµαντικές από τις λειτουργίες της βάσης. Αυτή η γραµµή παρουσιά-
ζεται στο επόµενο σχήµα, και τα κουµπιά που ανήκουν σε αυτή πραγµατοποιούν τις
ακόλουθες λειτουργίες :
Ανοίγει µια βάση δεδοµένων ή ένα έργο της Microsoft Access, αλλά
έχει τη δυνατότητα να ανοίξει και ορισµένους άλλους τύπους αρχείων
όπως είναι για παράδειγµα αρχεία κειµένου, αρχεία λογιστικών φύλλων
του Microsoft Excel, καθώς και αρχεία άλλων εφαρµογών βάσεων δε-
δοµένων.
Εισάγει ένα στοιχείο (για παράδειγµα, ένα στοιχείο ελέγχου ή µια εγ-
γραφή) από το Πρόχειρο σε ένα ενεργό αντικείµενο βάσης δεδοµένων.
Ανοίγει την Επεξεργασία της Visual Basic και εµφανίζει τον κώδικα
που υπάρχει πίσω από µια επιλεγµένη φόρµα ή έκθεση στο παράθυρο
«Κώδικας».
Εκκινεί το «Βοηθό του Office» που παρέχει θέµατα βοήθειας και συµ-
βουλές όσον αφορά τη λειτουργία της Microsoft Access.
Σχήµα 22 : Οι πέντε δυνατοί τρόποι δηµιουργίας ενός πίνακα στη Microsoft Access
Η διαδικασία εισαγωγής και διαγραφής στηλών είναι δυνατή και γίνεται πολύ
εύκολα χρησιµοποιώντας το ποντίκι. Πιο συγκεκριµένα, για να εισάγουµε µια και-
νούρια στήλη, επιλέγουµε τη στήλη που βρίσκεται δεξιά από το σηµείο εισαγωγής,
και από το κεντρικό µενού της Access, επιλέγουµε «Εισαγωγή» και στη συνέχεια
«Στήλη». Το ίδιο αποτέλεσµα θα έχουµε εάν µετά την επιλογή της στήλης πατήσου-
µε το δεξί πλήκτρο του ποντικιού και από το µενού που θα εµφανιστεί επιλέξουµε
«Εισαγωγή στήλης». Εάν αντί για εισαγωγή επιλέξουµε «∆ιαγραφή Στήλης» ή
«Μετονοµασία Στήλης» µπορούµε να διαγράψουµε και να µετονοµάσουµε αντί-
στοιχα τη στήλη που έχουµε επιλέξει. Μετά την καταχώρηση δεδοµένων, µπορούµε
να αποθηκεύσουµε τον πίνακα. Στην περίπτωση αυτή, η Access θα µας ρωτήσει εάν
θέλουµε να καθορίσουµε κάποιο πρωτεύον κλειδί, και στη συνέχεια, θα δηµιουργή-
σει τον πίνακα, σύµφωνα µε τον τύπο και το είδος των πεδίων που έχουµε καταχωρή-
σει σε κάθε στήλη του.
ΠΡΟΒΟΛΗ ΣΧΕ∆ΙΑΣΗΣ
δηµιουργήσουµε, και πιο συγκεκριµένα, τον όνοµά τους, τον τύπο τους, καθώς
και ένα πλήθος χαρακτηριστικών ιδιοτήτων τους. Παραδείγµατα τέτοιων ιδιο-
τήτων, είναι το σύνολο των τιµών που µπορούν να λάβουν, το εάν η απόδοση τι-
µών σε αυτά είναι υποχρεωτική ή προαιρετική, καθώς και το εάν συµµετέχουν ή
όχι στο κύριο κλειδί του πίνακα.
Κάθε φορά που προσθέτουµε στον πίνακα ένα νέο πεδίο, η Microsoft Access,
χρησιµοποιεί ως προεπιλεγµένο τύπο δεδοµένων για αυτό το πεδίο, το «Κείµενο»,
που επιτρέπει την καταχώρηση σε αυτό, συµβολοσειρών, συγκεκριµένου µήκους.
Μπορούµε όµως να χρησιµοποιήσουµε όποιο τύπο δεδοµένων επιθυµούµε. Για να το
κάνουµε αυτό επιλέγουµε µε το ποντίκι τον τύπο δεδοµένων που θέλουµε να αλλά-
ξουµε. Στην περίπτωση αυτή εµφανίζεται σε αυτό το κελί, µια λίστα µε όλους τους
διαθέσιµους τύπους δεδοµένων, από την οποία και επιλέγουµε τον επιθυµητό τύπο
δεδοµένων, για το θεωρούµενο πεδίο:
Οι τύποι δεδοµένων που υποστηρίζονται από την τρέχουσα έκδοση της Mi-
crosoft Access, είναι οι ακόλουθοι:
ΤΥΠΟΣ
ΠΕΡΙΓΡΑΦΗ ΜΕΓΕΘΟΣ
∆Ε∆ΟΜΕΝΩΝ
Στο κάτω µέρος του παραθύρου της προβολής σχεδίασης που φέρει το όνοµα
«Ιδιότητες πεδίου», έχουµε τη δυνατότητα, για κάθε ένα από τα πεδία που δηµιουρ-
γούµε να καθορίσουµε και ένα πλήθος χρήσιµων ιδιοτήτων για αυτό το πεδίο. Για
να το κάνουµε αυτό επιλέγουµε τη σελίδα «Γενικές ιδιότητες» η οποία περιλαµβάνει
τις επόµενες επιλογές (αυτές οι επιλογές αφορούν το πεδίο Salary του πίνακα
EMPLOYEE):
Μορφή : επιτρέπει τον καθορισµό της µορφής των τιµών που θα καταχωρού-
µε για το κάθε πεδίο. Στα επόµενα σχήµατα δίδουµε ενδεικτικά παραδείγµατα της
µορφής που µπορούν να λάβουν οι τιµές για τα πεδία BDATE και SALARY. Από τα
πεδία αυτά το πρώτο είναι τύπου Ηµεροµηνία – Ώρα και σύµφωνα µε τις προδια-
γραφές που έχουµε θέσει οι τιµές που θα παίρνει θα έχουν τη µορφή DD/MM/YYYY
(D=Day, M=Month, Y=Year), ενώ στη δεύτερη περίπτωση, ο µισθός του υπαλλή-
Σχήµα 29 : Καθορισµός της µορφής του πεδίου για τις ηµεροµηνίες και τα αριθµητικά πεδία
Σχήµα 30 : Καθορισµός µάσκας εισαγωγής για πεδία του τύπου Ηµεροµηνία - Ώρα
Σχήµα 31 : Η ιδιότητα της λεζάντας καθορίζει τη φράση που θα εµφανίζεται στη φόρµα ει-
σαγωγής δεδοµένων για το συγκεκριµένο πεδίο
Σχήµα 33 : Παράδειγµα δηµιουργίας κανόνα επικύρωσης δια της χρήσης του παραθύρου
«∆όµηση εκφράσεων»
Απαιτείται : εάν υπάρχει κάποιο πεδίο για το οποίο ο χρήστης πρέπει υπο-
χρεωτικά να καταχωρήσει κάποια τιµή, τότε θα πρέπει σε αυτή την παράµετρο να
καταχωρήσουµε την τιµή «Ναι». Αυτό συµβαίνει σε περιπτώσεις πεδίων που
περιέχουν σηµαντικές πληροφορίες, όπως είναι για παράδειγµα το επώνυµο κάποιου
υπαλλήλου της εταιρείας.
Στην περίπτωση κατά την οποία ένα πεδίο εµφανίζεται µε τη µορφή ενός
πλαισίου κειµένου, ο χρήστης θα πρέπει να πληκτρολογήσει την τιµή που καταχω-
ρείται σε αυτό, ενώ όταν η εµφάνιση του πεδίου είναι εκείνη ενός πλαισίου λίστας ή
σύνθετου πλαισίου, ο χρήστης καθορίζει την τιµή, επιλέγοντάς την από ένα σύνολο
τιµών. Αυτό το σύνολο των τιµών, µπορεί να είναι οι τιµές της στήλης κάποιου
πίνακα, η εκείνες οι οποίες επιστρέφονται από κάποιο ερώτηµα. Και στις δύο πε-
ριπτώσεις, η προέλευσή αυτού του συνόλου τιµών, καθορίζεται από το πεδίο «Προέ-
λευση γραµµής», όπως φαίνεται στο παρακάτω παράδειγµα.
Σχήµα 35 : Καθορισµός της προέλευσης του συνόλου τιµών που εµφανίζονται σε ένα πλαί-
σιο λίστας ή σε ένα σύνθετο πλαίσιο
Η δυνατότητα καταχώρησης τιµής σε κάποιο πεδίο δια της επιλογής της από
ένα σύνολο τιµών, είναι πάρα πολύ χρήσιµη, διότι διασφαλίζει την ορθότητα των
δεδοµένων που καταχωρούµε στη βάση. Στο παράδειγµά µας, τα χαρακτηριστικά
εµφάνισης του προηγούµενου σχήµατος, αφορούν το πεδίο PNO του πίνακα
WORKS_ON. Υπενθυµίζουµε από τη θεωρητική εισαγωγή στις βάσεις δεδοµένων,
πως αυτός ο πίνακας, περιέχει τον κώδικα SSN του κάθε υπαλλήλου, και τον κώδικα
του PROJECT στο οποίο αυτός απασχολείται. Είναι προφανές πως οι τιµές που κα-
ταχωρούνται στο πεδίο PNO, θα πρέπει να είναι έγκυροι κωδικοί, διότι στην αντίθετη
περίπτωση παραβιάζεται ο δεύτερος κανόνας ακεραιότητας. Εκείνο λοιπόν που θα
πρέπει να κάνουµε, είναι να κατασκευάσουµε ένα ερώτηµα που να επιστρέφει όλους
τους κωδικούς των PROJECTS που πραγµατοποιούνται από την εταιρεία, τους ο-
ποίους στη συνέχεια θα εµφανίσουµε στο παραπάνω πλαίσιο λίστας. Επιπλέον, θα
πρέπει να αποδώσουµε στο πεδίο «Περιορισµός σε λίστα» του παραπάνω σχήµατος,
την τιµή «Ναι», η οποία θεωρεί έγκυρες µόνο τις τιµές που περιλαµβάνονται στη λί-
στα, και άκυρες όλες τις υπόλοιπες. Εφ όσον λοιπόν ο χρήστης θα επιλέγει ως κω-
δικό µόνο κάποιον από αυτούς που εµφανίζονται στη λίστα, είναι προφανές πως ο
κωδικός που τελικά θα καταχωρηθεί, θα είναι έγκυρος και θα αντιστοιχεί σε κά-
ποιο υπαρκτό PROJECT.
Εάν ο πίνακας ή το ερώτηµα περιέχει περισσότερες από µία στήλες, όπως συ-
νήθως γίνεται στην πράξη, στο πεδίο «Πλήθος στηλών» καθορίζουµε τον αριθµό
των στηλών που επιθυµούµε να χρησιµοποιήσουµε, ενώ στο πεδίο «∆εσµευµένη
στήλη», καθορίζουµε τη στήλη της οποίας η τιµή θα καταχωρηθεί τελικά στο επιλεγ-
µένο στο πεδίο. Τέλος, τα πεδία «Κεφαλίδες στηλών» και «Πλάτη στηλών», καθο-
ρίζουν τα χαρακτηριστικά εµφάνισης των στοιχείων της λίστας, όπως είναι για
παράδειγµα η χρήση ή όχι επικεφαλίδων σε αυτές, καθώς και το πλάτος τους εκ-
πεφρασµένο σε εκατοστά.
Ο∆ΗΓΟΣ ΠΙΝΑΚΩΝ
Η εκκίνηση του οδηγού πινάκων, εµφανίζει στην οθόνη του υπολογιστή µας
το πλαίσιο διαλόγου του επόµενου σχήµατος. Αυτό το παράθυρο περιέχει
υποδειγµατικούς πίνακες που χαρακτηρίζονται από µια τυπική δοµή και
αποτελούνται από ένα σύνολο πεδίων. Ανάλογα µε τη φύση του πίνακα που
θέλουµε να δηµιουργήσουµε, µπορούµε να επιλέξουµε τόσο τον πίνακα που θα
χρησιµοποιήσουµε, όσο και τα πεδία αυτού του πίνακα που θα συµπεριλάβουµε
στον πίνακα που θέλουµε να δηµιουργήσουµε.
Σχήµα 36 : Η δοµή του οδηγού πινάκων που διευκολύνει τη διαδικασία σχεδίασης του νέου πίνακα
Σχήµα 37 : Καθορισµός της δοµής του πίνακα EMPLOYEE δια της χρήσης του οδηγού πινάκων.
ΕΙΣΑΓΩΓΗ ΠΙΝΑΚΑ
Σχήµα 38 : Καθορισµός της βάσης δεδοµένων από την οποία θα εισάγουµε το νέο πίνακα
Σχήµα 39 : Καθορισµός του είδους και του ονόµατος των αντικειµένων προς εισαγωγή
νέα αντικείµενα εµφανίζονται στο κεντρικό παράθυρο της βάσης δεδοµένων, από
όπου είναι δυνατή η διαχείρισή τους σύµφωνα µε τα όσα περιγράφονται στις σελίδες
που ακολουθούν.
ΣΥΝ∆ΕΣΗ ΠΙΝΑΚΑ
Έχοντας ολοκληρώσει τη σχεδίαση της δοµής των πινάκων της βάσης, µπο-
ρούµε τώρα να αρχίσουµε να καταχωρούµε δεδοµένα σε αυτούς. Για να το κάνουµε
αυτό, µεταφερόµαστε στο κεντρικό παράθυρο διαχείρισης της εφαρµογής, επιλέ-
γουµε τον πίνακα στον οποίο θέλουµε να καταχωρήσουµε τα δεδοµένα µας, και
στη συνέχεια πατάµε το κουµπί µε την ετικέτα «Άνοιγµα». Το επόµενο σχήµα, πα-
ρουσιάζει σε προβολή φύλλου δεδοµένων, τον πίνακα DEPENDENT που περιέχει τα
στοιχεία των προστατευόµενων µελών των υπαλλήλων της εταιρείας.
Ύψος γραµµής : Επιτρέπει τον καθορισµό του ύψους των γραµµών του πί-
νακα. Ας σηµειωθεί πως αυτή η µορφοποίηση αφορά όλες τις γραµµές ανεξάρτητα
από την εγγραφή που έχουµε επιλέξει.
Πλάτος στηλών : Επιτρέπει τον καθορισµό του πλάτους των στηλών του
πίνακα. Όπως και στην περίπτωση των εγγραφών, το νέο πλάτος θα εφαρµοσθεί σε
όλες τις στήλες του πίνακα, ανεξάρτητα από το ποια είναι η επιλεγµένη στήλη.
Η µετακίνηση του χρήστη ανάµεσα στις εγγραφές των πινάκων της βάσης
µπορεί να γίνει πάρα πολύ εύκολα χρησιµοποιώντας τα πλήκτρα κίνησης του δρο-
µέα. Ωστόσο υπάρχει η δυνατότητα να µετακινηθούµε ανάµεσα στις εγγραφές του
πίνακα χρησιµοποιώντας µόνο το ποντίκι, και χρησιµοποιώντας τα κουµπιά µετακί-
νησης που βρίσκονται στο κάτω µέρος του πίνακα, όταν αυτός βρίσκεται σε προβολή
φύλλου δεδοµένων.
Εκτός από τα κουµπιά µετακίνησης ανάµεσα στις εγγραφές, στο κάτω µέρος
του πίνακα υπάρχει ένα πλαίσιο κειµένου που εµφανίζει τον αριθµό της τρέχουσας
εγγραφής, ενώ επιπλέον αναγράφεται και το συνολικό πλήθος των εγγραφών του
πίνακα. Στο παράδειγµά µας, ο χρήστης βρίσκεται στην έκτη εγγραφή, ενώ ο πίνα-
κας διαθέτει συνολικά οκτώ εγγραφές που περιέχουν τα προσωπικά δεδοµένα των
υπαλλήλων της εταιρείας.
Το παράθυρο αυτό αρχικά είναι άδειο, διότι ακόµη δεν έχει ορισθεί καµία
σχέση. Για να ορίσουµε δε αυτού του είδους τις συσχετίσεις, θα πρέπει να καθορί-
σουµε δύο ειδών πληροφορίες: (α) τους πίνακες µεταξύ των οποίων θα ορίσουµε
τη συσχέτιση, και (β) τα πεδία αυτών των πινάκων τα οποία και θα συσχετιστούν
µεταξύ τους. Στις σελίδες που ακολουθούν, θα χρησιµοποιήσουµε ως παράδειγµα, τη
βάση δεδοµένων της εταιρείας που αναλύσαµε στο θεωρητικό µέρος των σηµειώσε-
ων.
Η δηµιουργία της συσχέτισης ανάµεσα σε αυτά τα δύο πεδία γίνεται πάρα πο-
λύ εύκολα χρησιµοποιώντας το ποντίκι. Αρχικά επιλέγουµε το πεδίο DNUMBER του
πίνακα DEPARTMENT, χρησιµοποιώντας το αριστερό πλήκτρο του ποντικιού. Στη
συνέχεια, κρατώντας συνεχώς πατηµένο αυτό το πλήκτρο, µετακινούµε το ποντί-
κι, µέχρι ο δείκτης του να έλθει πάνω από το πεδίο του άλλου πίνακα που θέλου-
µε να συµµετάσχει στη συσχέτιση – στην προκειµένη περίπτωση το πεδίο DNO του
πίνακα EMPLOYEE. Μόλις ο δείκτης του ποντικιού έλθει ακριβώς πάνω από αυτό
το πεδίο, απελευθερώνουµε το δεξί πλήκτρο του που όλο αυτό το διάστηµα κρατού-
σαµε πατηµένο. Εάν όλη αυτή η διαδικασία έγινε σωστά, τότε στην οθόνη του υπο-
λογιστή µας θα εµφανιστεί το επόµενο πλαίσιο διαλόγου:
σχετισµού πεδίου αυτόµατης αρίθµησης µε πεδίο αριθµού του οποίου όµως η ιδιό-
τητα «Μέγεθος πεδίου» έχει τεθεί στην τιµή «Ακέραιος µεγάλου µήκους». Η δεύ-
τερη περίπτωση, επιτρέπει το συσχετισµό πεδίου αυτόµατης αρίθµησης µε αριθµη-
τικό πεδίο, εφόσον όµως η ιδιότητα «Μέγεθος πεδίου» και των δύο πεδίων έχει την
τιµή «Αναγνωριστικό αναπαραγωγής». Τέλος όταν τα αντίστοιχα πεδία είναι πεδία
αριθµών, θα πρέπει να έχουν την ίδια ρύθµιση στην ιδιότητα «Μέγεθος πεδίου».
Σε περίπτωση κατά την οποία επιχειρούµε να συσχετίσουµε πεδία που δεν εί-
ναι συµβατά µεταξύ τους σύµφωνα µε τους κανόνες που θέσαµε παραπάνω, η Micro-
soft Access εµφανίζει ένα µήνυµα λάθους και δεν επιτρέπει τη δηµιουργία αυτής της
συσχέτισης. Αυτό για παράδειγµα συµβαίνει εάν επιχειρήσουµε να συσχετίσουµε το
πεδίο FName του πίνακα EMPLOYEE που είναι τύπου «Κείµενο» µε το πεδίο
DNUMBER του πίνακα DEPARTMENT που είναι αριθµητικό πεδίο.
Έχοντας καθορίσει τα πεδία των πινάκων που θα συµµετάσχουν στη νέα συ-
σχέτιση, µπορούµε να δηµιουργήσουµε τη συσχέτιση πατώντας το κουµπί που φέρει
τον τίτλο «∆ηµιουργία» και βρίσκεται στο δεξί µέρος του παραθύρου. Για να ακυ-
ρώσουµε την όλη διαδικασία, χρησιµοποιούµε το κουµπί «Άκυρο». Για την ώρα ό-
µως και πριν κλείσουµε το παράθυρο, ας µελετήσουµε τα υπόλοιπα πλαίσια ελέγχου
που εµφανίζονται σε αυτό. Καταρχήν, στο κάτω µέρος του παραθύρου, και δίπλα από
το πλαίσιο κειµένου που φέρει τον τίτλο «Τύπος Συσχέτισης», εµφανίζεται η φράση
«ένα προς πολλά». Αυτή προφανώς είναι και η πολλαπλότητα της συσχέτισης που
πρόκειται να δηµιουργήσουµε. Όπως µπορούµε εύκολα να παρατηρήσουµε, δεν υ-
πάρχει η δυνατότητα να µεταβάλλουµε τον τύπο της συσχέτισης. Αυτό γίνεται
διότι µε τον τρόπο που περιγράψαµε στις προηγούµενες σελίδες, µπορούµε να κατα-
σκευάσουµε µόνο εκείνες τις συσχετίσεις των οποίων η πολλαπλότητα είναι 1:Ν. Ο
τρόπος µε τον οποίο κατασκευάζουµε συσχετίσεις διαφορετικής πολλαπλότητας, θα
παρουσιαστεί στη συνέχεια.
δικό του τµήµατος στο οποίο εργάζεται ο κάθε υπάλληλος, είναι προφανές, πως η
διαγραφή του τµήµατος από τον πίνακα DEPARTMENT του οποίου ο κωδικός υ-
πάρχει στο πεδίο DNO κάποιας εγγραφής του πίνακα EMPLOYEE, θα οδηγήσει στη
δηµιουργία ασυνεπών δεδοµένων, διότι πλέον η εν λόγω εγγραφή θα παραπέµπει σε
κάποιο ανύπαρκτο τµήµα. Το ίδιο πρόβληµα θα παρουσιαστεί και στην περίπτωση
κατά την οποία λάβει χώρα αλλαγή του κωδικού για αυτό το τµήµα. Εάν στους άλ-
λους πίνακες της βάσης, υπάρχουν εγγραφές που να αναφέρονται στο τµήµα του ο-
ποίου τον κωδικό θέλουµε να µεταβάλλουµε, τότε η αλλαγή αυτού του κωδικού θα
οδηγήσει σε παραβίαση του δεύτερου κανόνα της ακεραιότητας δεδοµένων (ref-
erential integrity constraint).
υλοποιήσει αυτή τη συσχέτιση. Ωστόσο, η διαγραφή κάποιας εγγραφής από τον πίνα-
κα DEPARTMENT δεν θα πρέπει να οδηγήσει στη διαγραφή όλων των υπαλλήλων
της εταιρείας που δουλεύουν σε αυτό το τµήµα, καθόσον αυτοί θα εξακολουθήσουν
να ανήκουν στην εταιρεία και απλά θα τοποθετηθούν σε κάποιο άλλο τµήµα. Σε µια
τέτοια περίπτωση, θα πρέπει να εντοπίσουµε τους υπαλλήλους που συσχετίζονται
µε το τµήµα που πρόκειται να διαγράψουµε, και να τοποθετήσουµε στο πεδίο
DNO την τιµή NULL. Με τον τρόπο αυτό, δηλώνουµε πως αυτοί οι υπάλληλοι δεν
ανήκουν σε κανένα τµήµα.
Σχήµα 51 : Μήνυµα λάθους που εµφανίζεται κατά την προσπάθεια διαγραφής δεδοµένων που
συσχετίζονται µε εγγραφές άλλων πινάκων της βάσης..
Σχήµα 52 : Η διαγραφή της εγγραφής από κάποιο πίνακα θα προκαλέσει και τη διαγραφή των
σχετιζόµενων εγγραφών στους άλλους πίνακες εφ όσον ο χρήστης απαντήσει καταφατικά στο παραπά-
νω ερώτηµα.
Αριστερή εξωτερική σύζευξη (left outer join): Όπως είναι γνωστό από τη
θεωρία της σχεσιακής άλγεβρας, σε αυτόν τον τύπο της σύζευξης, λαµβάνει χώρα
συνδυασµός όλων των εγγραφών του πίνακα που βρίσκεται στο αριστερό µέρος
της πράξης, µε όλες τις εγγραφές του άλλου πίνακα, ακόµη και εάν δεν υπάρχουν
αντίστοιχες τιµές στο συζευγµένο πεδίο του άλλου πίνακα. Αυτό δεν ισχύει για τον
πίνακα που βρίσκεται στο δεξί µέρος της πράξης, του οποίου οι εγγραφές συνδυάζο-
νται µε τις εγγραφές του αριστερού πίνακα µόνο όταν υπάρχουν ίδιες τιµές στα συ-
ζευγµένα πεδία.
πίνακα που βρίσκεται στο δεξί µέρος της πράξης, µε όλες τις εγγραφές του άλλου
πίνακα, ακόµη και εάν δεν υπάρχουν αντίστοιχες τιµές στο συζευγµένο πεδίο του
άλλου πίνακα. Αυτό δεν ισχύει για τον πίνακα που βρίσκεται στο αριστερό µέρος της
πράξης, του οποίου οι εγγραφές συνδυάζονται µε τις εγγραφές του δεξιού πίνακα µό-
νο όταν υπάρχουν ίδιες τιµές στα συζευγµένα πεδία.
Ανάλογα λοιπόν µε την περίπτωση, καθορίζουµε και τον τύπο του συνδέσµου
για τη νέα συσχέτιση επιλέγοντας κάποιον από τους τρεις τύπους συνδέσµων που εί-
ναι διαθέσιµοι.
Σχήµα 57 : Ενηµερωτικό µήνυµα που εµφανίζεται στο χρήστη κατά τη διαδικασία διαγραφής
µιας συσχέτισης.
Εάν ο χρήστης διαγράψει τη συσχέτιση και στη συνέχεια θελήσει να την ξα-
ναχρησιµοποιήσει, θα πρέπει να τη δηµιουργήσει και πάλι από την αρχή.
Όπως έχει ήδη αναφερθεί, ένα από τα πιο σηµαντικά στοιχεία µιας εφαρµο-
γής, είναι η ευκολία που παρέχει στον τελικό χρήστη όσον αφορά την αλληλεπί-
δρασή του µε το πρόγραµµα. Στις περιπτώσεις εφαρµογών βάσεων δεδοµένων όπου
οι βασικές δραστηριότητες του χρήστη περιορίζονται συνήθως σε διαδικασίες κατα-
χώρησης και διαχείρισης δεδοµένων, αυτή η ευκολία συνίσταται στην όσο το δυ-
νατό πιο φιλική αντιµετώπιση του χρήστη έτσι ώστε η απόδοσή του και η ταχύτητα
της επεξεργασίας των πληροφοριών που καταχωρεί, να κυµαίνονται σε όσο το δυνατό
πιο υψηλά επίπεδα.
Υπάρχουν πολλοί τρόποι µε τους οποίους είναι δυνατή η χρήση µιας εφαρµο-
γής. Στην πιο απλή περίπτωση, ο προγραµµατιστής παρέχει στο χρήστη ένα σύνολο
εντολών οι οποίες καλούνται από κάποια γραµµή εντολών – παρόµοια µε εκείνη του
MS – DOS – και επιτελούν συγκεκριµένες λειτουργίες. Αυτός ο τρόπος χρήσης του
προγράµµατος, είναι πάρα πολύ συνηθισµένος σε παλαιότερες εκδόσεις των µεγάλων
συστηµάτων διαχείρισης βάσεων δεδοµένων – µε χαρακτηριστικό παράδειγµα την
Oracle και παλαιότερα τη Sybase – οι οποίες έτρεχαν σε λειτουργικά συστήµατα της
οικογένειας του Unix. Με την πάροδο του χρόνου, αυτού του είδους οι εφαρµογές –
καθώς και πολλές άλλες – µεταφέρθηκαν στους προσωπικούς υπολογιστές που χρη-
σιµοποιούσαν ως λειτουργικό σύστηµα το MS – DOS, και ταυτόχρονα, εµπλουτίστη-
καν µε ένα πλήθος διαλόγων αλληλεπίδρασης µε το χρήστη, οι οποίοι επιτάχυναν
την αλληλεπίδρασή του µε το σύστηµα, και βελτίωναν σηµαντικά την αποδοτικότητά
του. Αυτοί οι διάλογοι ονοµάστηκαν φόρµες, και αρχικά λειτουργούσαν σε κατά-
σταση κειµένου (text mode) και σε ανάλυση 80 x 25 χαρακτήρες. Η κατάσταση
αυτή συνεχίστηκε µέχρι την έλευση των Microsoft Windows – και όλων των άλλων
λειτουργικών συστηµάτων που λειτουργούσαν σε κατάσταση γραφικών – τα οποία
έφεραν µια πραγµατική επανάσταση στο χώρο της χρήσης των ηλεκτρονικών υπολο-
γιστών και απλοποίησαν πάρα πολύ τη χρήση των διαφόρων εφαρµογών. Τα τελευ-
ταία χρόνια δε, αυτό το γραφικό περιβάλλον έχει εξελιχθεί σε πολύ µεγάλο βαθµό,
και περιλαµβάνει τη χρήση βοηθητικών προγραµµάτων (wizards) που καθοδηγούν
το χρήστη σε κάθε του βήµα, την πραγµατοποίηση των βασικών λειτουργιών της
εφαρµογής µέσα από εργονοµικές γραµµές εργαλείων, και γενικά ένα πλήθος λει-
Κεφάλαιο 10 : Φόρµες 162
Όπως έχει ήδη αναφερθεί, ο βασικός λόγος δηµιουργίας µιας φόρµας, είναι η
διευκόλυνση της αλληλεπίδρασης του χρήστη µε τη βάση δεδοµένων της εφαρ-
µογής. Επειδή όµως οι πιο σηµαντικές από τις δραστηριότητες του χρήστη έχουν να
κάνουν µε τη διαχείριση των δεδοµένων της βάσης, είναι προφανές πως οι φόρµες
θα πρέπει να συσχετίζονται άµεσα µε τους πίνακες της βάσης. Πιο συγκεκριµένα, για
κάθε πίνακα της βάσης µπορούµε να κατασκευάσουµε µια φόρµα, µέσω της
οποίας ο χρήστης θα διαχειρίζεται τα δεδοµένα του πίνακα. Με άλλα λόγια η προ-
έλευση των δεδοµένων που εµφανίζονται σε κάποια από τις φόρµες της εφαρµογής,
είναι ένας πίνακας – ή πολλές φορές και κάποιο ερώτηµα.
Αυτού του είδους η συσχέτιση που παρατηρείται ανάµεσα στα πεδία της φόρ-
µας και στα αντίστοιχα πεδία του πίνακα, αποδίδεται µε τον όρο «Προέλευση ∆εδο-
µένων». Έτσι λέµε πως η προέλευση των δεδοµένων του πεδίου µιας φόρµας είναι
ένα από τα πεδία κάποιου πίνακα, όταν στο συγκεκριµένο πεδίο της φόρµας, εµ-
φανίζονται τιµές του αντίστοιχου πεδίου του πίνακα. Στην προκειµένη περίπτωση,
η προέλευση δεδοµένων του πεδίου µε ετικέτα «Όνοµα Υπαλλήλου» της φόρµας
EMPLOYEE, είναι το πεδίο FNAME του οµώνυµου πίνακα, διότι στο συγκεκρι-
µένο πεδίο της φόρµας εµφανίζονται ονόµατα υπαλλήλων της εταιρείας. Γενικεύο-
ντας αυτό τον ορισµό για όλα τα πεδία που περιλαµβάνονται σε µία φόρµα, µπορούµε
να πούµε πως η προέλευση δεδοµένων µιας ολόκληρης φόρµας, είναι ένας ολό-
κληρος πίνακας. Στο παράδειγµά µας, η προέλευση δεδοµένων της φόρµας
EMPLOYEE είναι ο οµώνυµος πίνακας της βάσης δεδοµένων της εταιρείας.
Αυτή η αντιστοιχία ανάµεσα στα πεδία των φορµών και των πινάκων, δεν πε-
ριορίζεται µόνο σε διαδικασίες εµφάνισης των δεδοµένων της βάσης, αλλά επεκτείνε-
ται και σε διαδικασίες τροποποίησής τους. Έτσι, εάν µεταβούµε στο πεδίο «Όνοµα
Υπαλλήλου» της φόρµας, αλλάξουµε το περιεχόµενό του από John σε George και
στη συνέχεια αποθηκεύσουµε τις αλλαγές, αυτή η αλλαγή θα µεταφερθεί και στην
αντίστοιχη εγγραφή του πίνακα EMPLOYEE. Με τον τρόπο αυτό είναι δυνατή η
εύκολη µεταβολή των δεδοµένων της βάσης. Με τον ίδιο τρόπο εάν χρησιµοποιή-
σουµε τη φόρµα για να καταχωρήσουµε µια νέα εγγραφή, και στο πεδίο «Όνοµα
Υπαλλήλου» καταχωρήσουµε τη συµβολοσειρά Alice, αυτή η τιµή θα καταχωρηθεί
στο πεδίο FNAME της νέας εγγραφής που θα δηµιουργηθεί στο τέλος του πίνακα
EMPLOYEE.
Ας σηµειωθεί ωστόσο πως αυτή δεν είναι η µοναδική λειτουργία των φορµών
σε µια εφαρµογή. Μια φόρµα µπορεί να χρησιµοποιηθεί και για την πραγµατοποίηση
άλλων διαδικασιών που δεν έχουν να κάνουν µε διαδικασίες αλληλεπίδρασης µε τα
δεδοµένα της βάσης. Έτσι στο επόµενο σχήµα απεικονίζεται µια φόρµα µέσω της
οποίας είναι δυνατή η χρησιµοποίηση άλλων φορµών της εφαρµογής. Στην περί-
πτωση αυτή η φόρµα λειτουργεί ως ένα µενού επιλογών.
Η κάθε φόρµα που δηµιουργείται µέσα από το περιβάλλον της Microsoft Ac-
cess, χαρακτηρίζεται από µια συγκεκριµένη δοµή, η οποία περιλαµβάνει ένα σύνολο
από ενότητες (sections). Οι πιο σηµαντικές από αυτές τις ενότητες, είναι η κεφαλίδα
(form header) και το υποσέλιδο (form footer) µιας φόρµας, καθώς επίσης και το
κεντρικό µέρος της φόρµας στο οποίο απεικονίζονται τα πεδία που περιλαµβάνονται
σε αυτή.
Σε περιπτώσεις κατά τις οποίες οι εγγραφές ενός πίνακα είναι πάρα πολλές και
η εκτύπωσή τους θα επεκταθεί σε περισσότερες από µια σελίδες, µπορούµε να καθο-
ρίσουµε κατά τη σχεδίαση της φόρµας ποιες πληροφορίες θα περιλαµβάνονται
στην κεφαλίδα και στο υποσέλιδο της κάθε σελίδας. Για παράδειγµα, µια κεφαλίδα
σελίδας, µπορεί να εµφανίζει πληροφορίες όπως τον τίτλο ή τις επικεφαλίδες στη-
λών στην κορυφή της κάθε εκτυπωµένης σελίδας. Με εντελώς ανάλογο τρόπο, το
υποσέλιδο µιας σελίδας, περιέχει στοιχεία όπως η ηµεροµηνία και η ώρα, ή ο αριθ-
µός της κάθε σελίδας. Ας σηµειωθεί πως οι κεφαλίδες και τα υποσέλιδα των σελί-
δων εµφανίζονται µόνο στις εκτυπωµένες φόρµες ή κατά τη διαδικασία της προεπι-
σκόπησης της εκτύπωσης για κάθε φόρµα.
Η δοµή και οι ενότητες µιας φόρµας µε τον τρόπο που έχουν περιγραφεί στις
προηγούµενες παραγράφους, παρουσιάζονται στο σχήµα που ακολουθεί.
Ο πιο εύκολος τρόπος για να δηµιουργήσουµε µια νέα φόρµα για τη βάση δε-
δοµένων που χρησιµοποιούµε, είναι δια της χρήσης του αυτοµατοποιηµένου προ-
γράµµατος της Access (form wizard), που διευκολύνει σηµαντικά την όλη διαδικα-
σία, και ανάγει τη δηµιουργία της φόρµας σε µια σειρά διαδοχικών και εντελώς κα-
θορισµένων βηµάτων. Στο παράδειγµα που ακολουθεί, θα δηµιουργήσουµε µια
φόρµα για τη βάση δεδοµένων της εταιρείας, η οποία επιτρέπει τη διαχείριση των
προσωπικών δεδοµένων των υπαλλήλων που εργάζονται σε αυτή.
Σχήµα 61 : Καθορισµός του πίνακα και των πεδίων που θα συσχετίζονται µε την τρέχουσα φόρµα
Μεταφέρει στο δεξί σύνθετο πλαίσιο, ένα πεδίο κάθε φορά, και πιο
συγκεκριµένα, εκείνο που έχει επιλεγεί µε το ποντίκι στο αριστερό
σύνθετο πλαίσιο
Μεταφέρει στο δεξί σύνθετο πλαίσιο, όλα τα πεδία του πίνακα που
ευρίσκονται στο αριστερό σύνθετο πλαίσιο
Επαναφέρει στο αριστερό σύνθετο πλαίσιο ένα πεδίο κάθε φορά, και
πιο συγκεκριµένα εκείνο που έχει επιλεγεί µε το ποντίκι στο δεξί σύν-
θετο πλαίσιο
Επαναφέρει στο αριστερό σύνθετο πλαίσιο, όλα τα πεδία που ευρί-
σκονται στο δεξί σύνθετο πλαίσιο.
• ∆ιάταξη στήλης: προκαλεί την εµφάνιση των πεδίων της φόρµας σε µία στήλη,
το ένα κάτω από το άλλο.
• ∆ιάταξη πίνακα: προκαλεί την εµφάνιση πολλαπλών σελίδων, κάθε µία από τις
οποίες, αντιστοιχεί και σε µια εγγραφή. Τα πεδία µιας εγγραφής βρίσκονται στοι-
χισµένα οριζόντια κατά µήκος της ίδιας γραµµής.
• Στοιχισµένη φόρµα: προκαλεί την εµφάνιση της φόρµας µε τέτοιο τρόπο ώστε
τα πεδία που περιλαµβάνονται σε αυτή, να είναι στοιχισµένα σε γραµµές και στή-
λες.
Έχοντας καθορίσει τον τρόπο µε τον οποίο θα λάβει χώρα η διάταξη των πε-
δίων της τρέχουσας φόρµας, µπορούµε, χρησιµοποιώντας το κουµπί «Επόµενο» να
εµφανίσουµε το παράθυρο του επόµενου σχήµατος, από όπου µπορούµε να καθορί-
σουµε τα χαρακτηριστικά εµφάνισης των πεδίων της φόρµας.
Σχήµα 64 : Καθορισµός του ονόµατος της τρέχουσας φόρµας και τερµατισµός της διαδικασίας καθο-
ρισµού των χαρακτηριστικών της
Στο παραπάνω παράθυρο εµφανίζονται εκτός από την κεντρική περιοχή της
φόρµας, η κεφαλίδα και το υποσέλιδό της, στα οποία όπως έχουµε ήδη αναφέρει,
µπορούµε να τοποθετήσουµε στοιχεία, τα οποία να είναι κοινά για όλες τις εγγραφές.
Όσον αφορά το κεντρικό τµήµα της φόρµας που φέρει τον τίτλο «Λεπτοµέρεια», εκεί
συνήθως τοποθετούµε διάφορα πλαίσια ελέγχου τα οποία µπορούµε να συσχετί-
σουµε µε πεδία πινάκων της βάσης, έτσι ώστε να προσπελάσουµε τα δεδοµένα που
βρίσκονται αποθηκευµένα σε αυτούς.
Από τις παραπάνω εικόνες δεν είναι δύσκολο να διαπιστώσει κανείς, πως η
εργαλειοθήκη περιέχει ένα πλήθος κουµπιών κάθε ένα εκ των οποίων, επιτρέπει
την εισαγωγή κάποιου στοιχείου ελέγχου στην επιφάνεια της τρέχουσας φόρµας.
Οι αναλυτικές λειτουργίες όλων αυτών των κουµπιών, παρουσιάζονται στον επόµενο
πίνακα.
Όπως έχει ήδη αναφερθεί, η δηµιουργία πλαισίων ελέγχου πάνω στην επιφά-
νεια της τρέχουσας φόρµας, µπορεί να γίνει είτε άµεσα από το χρήστη, είτε έµµεσα,
µέσω της χρήσης του control wizard, µε τη βοήθεια του οποίου είναι δυνατός ο εύ-
κολος καθορισµός των ιδιοτήτων του πλαισίου ελέγχου. Επειδή δε, το κάθε πλαίσιο
ελέγχου έχει τις δικές του ιδιότητες, και το δικό του τρόπο συµπεριφοράς, το περιε-
χόµενο του control wizard, ποικίλλει ανάλογα µε την περίσταση. Στις επόµενες σελί-
δες θα περιγράψουµε αναλυτικά τον τρόπο µε τον οποίο χρησιµοποιούµε τον control
wizard για τον καθορισµό των ιδιοτήτων των πιο χαρακτηριστικών πλαισίων ελέγχου
που µπορούµε να τοποθετήσουµε πάνω στην επιφάνεια της τρέχουσας φόρµας.
Στις περιπτώσεις κατά τις οποίες επιθυµούµε να επιλέξουµε µια τιµή µέσα από
κάποιο σύνολο τιµών οι οποίες είναι γνωστές, καθορισµένες εκ των προτέρων, και
δεν πρόκειται ποτέ να µεταβληθούν, µπορούµε να δηµιουργήσουµε µια οµάδα επι-
λογών σε κάθε στοιχείο της οποίας θα αποδώσουµε και µια από αυτές τις τιµές. Το
βασικό χαρακτηριστικό αυτής της οµάδας είναι πως µόνο ένα από τα στοιχεία της
µπορεί να είναι επιλεγµένο κάθε φορά, και αυτό σηµαίνει, πως αν επιλέξουµε κά-
ποιο από αυτά τα στοιχεία, θα καταργηθεί η επιλογή από το προηγούµενο επιλεγµένο
στοιχείο. Χαρακτηριστικό παράδειγµα µιας τέτοιας οµάδας επιλογών είναι ο καθορι-
σµός του προσανατολισµού της σελίδας στο Microsoft Word, η οποία µπορεί να εί-
ναι είτε οριζόντια, είτε κατακόρυφη – προφανώς όµως δεν µπορεί να είναι και τα δύο
ταυτόχρονα.
Ας δούµε τώρα µε ποιο τρόπο είναι δυνατή η εισαγωγή µιας οµάδας επιλογών
µε τη χρήση του control wizard. Στο παράδειγµά µας θα κατασκευάσουµε µια τέτοια
οµάδα προκειµένου να οµαδοποιήσουµε τους εργαζόµενους της εταιρείας µε κριτήριο
την ηλικία τους. Για να το κάνουµε αυτό, ορίζουµε τέσσερις οµάδες ηλικιών – από 18
έως 25, από 25 έως 45, από 45 έως 55 και από 55 έως 65. Αυτό σηµαίνει πως η
οµάδα επιλογών θα περιέχει τέσσερα πλαίσια ελέγχου των οποίων τις ετικέτες ανα-
γράφουµε στο πλαίσιο του επόµενου διαλόγου, που φέρει τον τίτλο «Ονόµατα Ετι-
Σχήµα 68 : Καθορισµός της ετικέτας για κάθε στοιχείο της οµάδας επιλογών
Στο επόµενο βήµα της διαδικασίας θα πρέπει σε κάθε στοιχείο της οµάδας
επιλογών να αντιστοιχίσουµε και κάποια τιµή. Αυτή η τιµή θα επιστρέφεται στην
εφαρµογή και θα καταχωρείται στον πίνακα των υπαλλήλων της εταιρείας. Έτσι, εάν
στον πίνακα EMPLOYEE προσθέσουµε ακόµη ένα αριθµητικό πεδίο µε όνοµα
«Οµάδα Ηλικίας», και χρησιµοποιήσουµε την οµάδα επιλογών µαζί µε τις τιµές που
παρουσιάζονται στο επόµενο παράθυρο, η επιλογή του στοιχείου µε ετικέτα «Από 25
έως 45», θα έχει ως αποτέλεσµα την καταχώρηση της τιµής 2 στο πεδίο «Οµάδα
Ηλικίας» του πίνακα EMPLOYEE.
Σχήµα 71 : Αποθήκευση της τιµής της οµάδας επιλογών για µελλοντική χρήση
Μετά τον καθορισµό των χαρακτηριστικών της οµάδας επιλογής, όσον αφορά
τα δεδοµένα που διαπραγµατεύεται, µπορούµε να καθορίσουµε και τα χαρακτηρι-
στικά εµφάνισης των στοιχείων αυτής της οµάδας. Στις πιο πολλές περιπτώσεις,
αυτά τα στοιχεία αναπαρίστανται µε radio buttons, τα οποία ο χρήστης επιλέγει συ-
νήθως µε το ποντίκι. Εναλλακτικά στη θέση των radio buttons µπορούν να χρησιµο-
ποιηθούνε check boxes ή κουµπιά εναλλαγής. Εκτός από το είδος των πλαισίων που
θα χρησιµοποιήσουµε µπορούµε να καθορίσουµε ακόµη και τον τρόπο της εµφάνι-
σης της οµάδας επιλογής, εάν δηλαδή θα εµφανίζεται επίπεδη, υπερυψωµένη ή
βυθισµένη, καθώς και εάν θα συνοδεύεται από σκιά ή όχι. Όλα αυτά τα χαρακτηρι-
στικά εµφάνισης µπορούνε να καθοριστούνε από το διάλογο του επόµενου σχήµατος.
Ένα δεύτερο πλαίσιο ελέγχου που επίσης χρησιµοποιείται κατά κόρον στις
φόρµες καταχώρησης δεδοµένων, είναι τα πλαίσια λίστας (list boxes) και τα σύν-
θετα πλαίσια (combo boxes). Και τα δύο αυτά στοιχεία εµφανίζουν µια λίστα από
τιµές, από τις οποίες ο χρήστης θα πρέπει να επιλέξει εκείνη που τον ενδιαφέρει. Η
διαφορά ανάµεσα στα δύο αυτά πλαίσια ελέγχου έχει να κάνει µε τον τρόπο εµφάνι-
σής τους. Πιο συγκεκριµένα, το πλαίσιο λίστας παραµένει πάντοτε ανοικτό και
εµφανίζει συνεχώς τα δεδοµένα που περιέχει, ενώ το σύνθετο πλαίσιο είναι πά-
ντοτε κλειστό, και ανοίγει µόνο όταν ο χρήστης το χρησιµοποιεί για να επιλέξει
κάποια από τις τιµές που περιέχει. Παράδειγµα πλαισίου λίστας καθώς και ανοιχτού
και κλειστού σύνθετου πλαισίου παρουσιάζεται στο επόµενο σχήµα.
Σχήµα 75 : Καθορισµός της προέλευσης των δεδοµένων του πλαισίου λίστας ή του σύνθετου πλαισίου
Σχήµα 76 : Καθορισµός του πίνακα προέλευσης των δεδοµένων του στοιχείου ελέγχου
Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε ποια πεδία του
πίνακα EMPLOYEE θα χρησιµοποιηθούν για να τροφοδοτήσουν το πλαίσιο λί-
στας µε δεδοµένα. Στην προκειµένη περίπτωση αυτό είναι το πεδίο SSN το οποίο και
επιλέγουµε. Εάν θέλουµε το πλαίσιο λίστας που κατασκευάζουµε να έχει περισσότε-
ρες από µία στήλες, επιλέγουµε στο στάδιο αυτό και άλλα πεδία.
Σχήµα 77 : Καθορισµός των πεδίων του πίνακα προέλευσης του στοιχείου ελέγχου
Έχοντας καθορίσει την πηγή των δεδοµένων προέλευσης, στο επόµενο πα-
ράθυρο παρουσιάζεται το πλαίσιο λίστας, έτσι όπως θα εµφανίζεται στην επιφάνεια
της τρέχουσας φόρµας, αµέσως µετά την ολοκλήρωση της κατασκευής του. Στο ση-
µείο αυτό έχουµε τη δυνατότητα – εάν το επιθυµούµε – να µεταβάλλουµε το πλάτος
της στήλης του πλαισίου λίστας, κάτι που το κάνουµε πολύ εύκολα, χρησιµοποιώ-
ντας το ποντίκι. Επίσης µπορούµε να καθορίσουµε εάν εκτός από τη στήλη µε τα
προς εµφάνιση δεδοµένα, θα εµφανιστεί και η στήλη µε τις τιµές του κύριου κλειδιού
για αυτά τα δεδοµένα. Αν και έχουµε τη δυνατότητα να εµφανίσουµε τη στήλη του
κύριου κλειδιού, εν τούτοις αυτό είναι κάτι που δεν συνίσταται.
Σχήµα 79 : Αποθήκευση της επιλεγµένης τιµής του πλαισίου ελέγχου σε πεδίο πίνακα της βάσης
Σχήµα 83 : Λειτουργίες φορµών και αναφορών που πραγµατοποιούνται από τα κουµπιά εντολών
Εφαρµογή ∆ιάφορα
Επειδή η εργασία που έχουµε επιλέξει είναι απλή και εντελώς συγκεκριµένη,
το µόνο πράγµα που θα πρέπει να ορίσουµε εδώ, είναι τα χαρακτηριστικά εµφάνι-
σης του νέου κουµπιού, το οποίο µπορεί να φέρει είτε µια απλή ετικέτα είτε ένα ει-
κονίδιο – στην τελευταία περίπτωση θα πρέπει να διαλέξουµε αυτό το εικονίδιο από
τη λίστα των διαθέσιµων εικόνων. Τέλος θα πρέπει να αποδώσουµε ένα όνοµα σε
αυτό το κουµπί το οποίο και θα χρησιµοποιείται κάθε φορά που θέλουµε να αναφερ-
θούµε σε αυτό το πλαίσιο ελέγχου – αυτή η διαδικασία γίνεται από το πλαίσιο διαλό-
γου που παρουσιάζεται στο επόµενο σχήµα.
Σχήµα 87 : Καθορισµός του αρχείου εικόνας που πρόκειται να εµφανιστεί στην τρέχουσα φόρµα
Ε) ΕΙΣΑΓΩΓΗ ΑΝΤΙΚΕΙΜΕΝΟΥ
Η εισαγωγή αντικειµένου είναι µια πιο γενική περίπτωση από την εισαγωγή
εικόνας, και επιτρέπει στο χρήστη να τοποθετήσει πάνω στην επιφάνεια της τρέχου-
σας φόρµας, οποιοδήποτε τύπο αντικειµένου, και όχι µόνο εικόνες. Στην περίπτωση
αυτή εκτός από το όνοµα του αρχείου που περιέχει το αντικείµενο προς καταχώρηση,
θα πρέπει να καθορίσουµε και τον τύπο αυτού του αντικειµένου, κάτι που γίνεται
χρησιµοποιώντας το πλαίσιο διαλόγου του επόµενου σχήµατος.
Σχήµα 88 : Καθορισµός του τύπου του αντικειµένου που πρόκειται να ενσωµατωθεί στην τρέχουσα
φόρµα
Στο επόµενο βήµα θα πρέπει να καθορίσουµε τον τρόπο µε τον οποίο θα συ-
σχετίσουµε την κύρια µε τη δευτερεύουσα φόρµα. Για να το κάνουµε αυτό θα πρέ-
πει να ταυτοποιήσουµε το κοινό πεδίο ανάµεσα στους αντίστοιχους πίνακες, και
το οποίο υλοποιεί τη συσχέτιση που υφίσταται ανάµεσά τους. Εάν παρατηρήσουµε
προσεκτικά τη δοµή των πινάκων EMPLOYEE και PROJECT θα διαπιστώσουµε
πως το πεδίο αυτό είναι ο κωδικός του τµήµατος στο οποίο ανήκει ο EMPLOYEE
και το οποίο έχει αναλάβει να ολοκληρώσει κάποιο PROJECT. Αυτό το πεδίο
στον πίνακα EMPLOYEE έχει το όνοµα DNO ενώ στον πίνακα PROJECT ονοµά-
ζεται DNUM. Έχοντας τώρα δηµιουργήσει τις δύο φόρµες για τους πίνακες
EMPLOYEE και PROJECT, µπορούµε να τοποθετήσουµε τη φόρµα για το
PROJECT ως υποφόρµα, στη φόρµα για τον EMPLOYEE και στη συνέχεια να τις
συσχετίσουµε µέσω του πεδίου DNO όπως φαίνεται στο επόµενο σχήµα.
Τέλος η διαδικασία ολοκληρώνεται ορίζοντας ένα όνοµα για αυτή την υπο-
φόρµα το οποίο θα χρησιµοποιούµε κάθε φορά που θα θέλουµε να αναφερόµαστε σε
αυτή. Στο παράδειγµά µας αυτό το όνοµα είναι η συµβολοσειρά «Υποφόρµα Έργων
Υπαλλήλου».
Μετά την πραγµατοποίηση αυτής της διαδικασίας, δεν προχωρούµε στην επό-
µενη οθόνη, αλλά επαναλαµβάνουµε την ίδια διαδικασία, αυτή τη φορά για τον πί-
νακα PROJECT. Πιο συγκεκριµένα, εµφανίζουµε τα πεδία αυτού του πίνακα στο
αριστερό µέρος του παραθύρου, και επιλέγουµε τα πεδία Project Name, Project
Number και Project Location, ως εκείνα τα οποία θα εµφανιστούν στη φόρµα που
θα κατασκευάσουµε.
Σχήµα 93 : Οµαδοποίηση των δεδοµένων των πινάκων που συσχετίζονται µε την κύρια και δευτερεύ-
ουσα φόρµα
Σχήµα 94 : Καθορισµός της διάταξης των πεδίων στην επιφάνεια της υποφόρµας
Στο τελευταίο βήµα της διαδικασίας, θα πρέπει να καθορίσουµε ένα όνοµα για
την κύρια και τη δευτερεύουσα φόρµα. Στο παράδειγµά µας η κύρια φόρµα ονοµάζε-
ται EMPLOYEE_MAIN_FORM, ενώ η δευτερεύουσα φόρµα, φέρει το όνοµα
PROJECT_SUBFORM.
Σχήµα 96 : Καθορισµός του ονόµατος για την κύρια και δευτερεύουσα φόρµα
Στο παραπάνω σχήµα εµφανίζεται η πρώτη από τις οκτώ εγγραφές του πίνακα
EMPLOYEE που αντιστοιχεί στον εργαζόµενο John B Smith µε κωδικό SSN
123456789. Αυτά τα στοιχεία εµφανίζονται στην κύρια φόρµα, ενώ στην υποφόρµα
εµφανίζονται τα στοιχεία των PROJECTS στα οποία εργάζεται ο John Smith. Σύµ-
φωνα µε τις εγγραφές της υποφόρµας, ο Smith εργάζεται στο PROJECT ProductX
µε κωδικό 1 που γίνεται στο Bellaire, και στο PROJECT Reorganization µε κωδικό
20 που γίνεται στο Houston.
Σχήµα 98 : Ενδεικτικός κατάλογος αντικειµένων που µπορούν να τοποθετηθούν στην επιφάνεια µιας
φόρµας
Ο καθορισµός των ιδιοτήτων για την φόρµα που σχεδιάζουµε σε κάθε περί-
πτωση, µπορεί να πραγµατοποιηθεί µεταφέροντας τη φόρµα στην προβολή σχεδία-
σης, και χρησιµοποιώντας την επιλογή «Ιδιότητες» από το αναδυόµενο µενού που
εµφανίζεται πατώντας το δεξί πλήκτρο του ποντικιού. Ας σηµειωθεί, ότι ανάλογα
µε τη θέση στην οποία βρίσκεται ο δείκτης του ποντικιού, όταν ενεργοποιούµε την
επιλογή «Ιδιότητες», µπορούµε να καθορίσουµε τα χαρακτηριστικά των διαφορετι-
κών περιοχών της φόρµας, όπως είναι η κεφαλίδα και το υποσέλιδο σελίδας, η κε-
φαλίδα και το υποσέλιδο φόρµας, καθώς και η κεντρική περιοχή της φόρµας που
φέρει τον τίτλο «Λεπτοµέρειες». Εάν θέλουµε να τροποποιήσουµε τις ιδιότητες της
φόρµας στο σύνολό της, θα πρέπει να ενεργοποιήσουµε την επιλογή «Ιδιότητες»,
αφού πρώτα µεταφέρουµε το δείκτη του ποντικιού σε κάποια περιοχή εκτός των προ-
αναφερθέντων πέντε περιοχών – µια τέτοια περιοχή είναι ο κενός χώρος που βρί-
σκεται κάτω από το υποσέλιδο της τρέχουσας φόρµας.
Το σύνολο των ιδιοτήτων που µπορούµε να καθορίσουµε για τις διάφορες πε-
ριοχές µιας φόρµας, µπορεί να οµαδοποιηθεί σε πέντε κατηγορίες, όπως φαίνεται στο
ακόλουθο σχήµα:
Σχήµα 99 : Οι πέντε οµάδες ιδιοτήτων που χαρακτηρίζουν τον τρόπο λειτουργίας µια φόρµας – καθώς
και όλων γενικά των αντικειµένων – της Microsoft Access
Από αυτές τις πέντε κατηγορίες η πρώτη κατηγορία που φέρει το όνοµα
«Μορφή» περιλαµβάνει ιδιότητες που συσχετίζονται µε τα χαρακτηριστικά εµφά-
νισης της θεωρούµενης περιοχής της φόρµας ενώ η δεύτερη που φέρει το όνοµα
«∆εδοµένα» συσχετίζεται µε τα δεδοµένα προέλευσης της φόρµας, που συνήθως
είναι ένας πίνακας ή ερώτηµα. Η οµάδα ιδιοτήτων µε το όνοµα «Συµβάν» επιτρέπει
τον καθορισµό της συµπεριφοράς της φόρµας ως απόκριση στην πραγµατοποί-
ηση κάποιου συµβάντος, ενώ οι ιδιότητες εκείνες που οµαδοποιούνται κάτω από την
ετικέτα «Άλλα» συσχετίζονται µε χαρακτηριστικά της φόρµας που δεν µπορούν να
καταταγούν σε καµία από τις προηγούµενες κατηγορίες. Τέλος η πέµπτη οµάδα ιδιο-
τήτων που φέρει την ετικέτα «Όλα» περιλαµβάνει όλες τις ιδιότητες που ανήκουν
στις τέσσερις προηγούµενες οµάδες, και τις εµφανίζει όλες στην ίδια σελίδα.
Σχήµα 100 : Το φύλλο ιδιοτήτων για την κεφαλίδα, το υποσέλιδο και την κεντρική περιοχή
της φόρµας
• Όνοµα (Name property): επιτρέπει τον καθορισµό του ονόµατος της κεφαλί-
δας της τρέχουσας φόρµας. Η συµβολοσειρά που θα χρησιµοποιηθεί στην περί-
πτωση αυτή θα πρέπει να ακολουθεί τους κανόνες ονοµατολογίας της Microsoft
Access, που θέτουν ως µέγιστο µήκος ονόµατος τους 64 χαρακτήρες για τα
αντικείµενα της Access, και τους 256 χαρακτήρες για τα διάφορα πλαίσια ελέγ-
χου.
2. «Πριν από ενότητα» (Before Section ή 1): στην περίπτωση αυτή η Ac-
cess εκτυπώνει την τρέχουσα ενότητα σε µια νέα γραµµή ή στήλη, ενώ
στη συνέχεια εκτυπώνει την αµέσως επόµενη ενότητα – π.χ. την ενότητα
«λεπτοµέρειες» - στην ίδια γραµµή ή στήλη.
3. «Μετά από ενότητα» (After Section ή 2): στην περίπτωση αυτή η Ac-
cess εκτυπώνει την τρέχουσα ενότητα στην τρέχουσα γραµµή ή στήλη, και
στη συνέχεια εκτυπώνει την επόµενη ενότητα στην επόµενη γραµµή ή
στήλη.
4. «Πριν & Μετά» (Before & After ή 3): στην περίπτωση αυτή η Access
εκτυπώνει την τρέχουσα ενότητα σε µια νέα γραµµή ή στήλη, και την
αµέσως επόµενη ενότητα στην επόµενη γραµµή ή στήλη.
3. «Μόνο στην οθόνη» (Screen Only ή 2): χρησιµοποιώντας αυτή την τιµή,
η θεωρούµενη ενότητα εµφανίζεται για όλο το χρονικό διάστηµα χρήσης
της φόρµας, αλλά δεν εκτυπώνεται µαζί µε τις άλλες ενότητες της φόρµας.
εκείνα που δεν χωράνε στο τρέχον µέγεθός του να µην έχουν τη δυνατότητα
να εµφανιστούν στην οθόνη ή να εκτυπωθούν στην αναφορά που συσχετίζεται
µε την τρέχουσα φόρµα.
Σχήµα 101 : Το πλαίσιο διαλόγου που επιτρέπει τον καθορισµό του χρώµατος ενός αντικειµένου στα
Microsoft Windows
Η τιµή του χρώµατος φόντου για την ενότητα της φόρµας ή της αναφοράς ή για
το τρέχον στοιχείο ελέγχου µπορεί να καθοριστεί και µε πολλούς άλλους τρό-
πους, όπως είναι για παράδειγµα µια µακροεντολή ή ένα υποπρόγραµµα γραµ-
µένο σε γλώσσα Visual Basic.
δεν αναφέρεται σε κάποιο από αυτά τα κουµπιά, αλλά στην οµάδα επιλογών,
στο σύνολό της.
Στις πιο πολλές περιπτώσεις, όταν ο χρήστης πατήσει το πλήκτρο του ποντι-
κιού πάνω σε ένα πλαίσιο ελέγχου, λαµβάνει χώρα εκτέλεση κάποιας µακρο-
εντολής ή κάποιου κώδικα γραµµένου σε Visual Basic. Προκειµένου να καθο-
ρίσουµε τι ακριβώς θα συµβεί µε τη χρήση αυτού του πλήκτρου, θα πρέπει σε
αυτό το συµβάν να καθορίσουµε το όνοµα της µακροεντολής ή του προγράµµα-
τος που θέλουµε να εκτελεστεί. Εναλλακτικά µπορούµε να χρησιµοποιήσουµε τη
λειτουργία δόµησης εκφράσεων, και να κατασκευάσουµε απευθείας την έκφραση
που θα συσχετίσουµε µε αυτό το συµβάν.
Στις πιο πολλές περιπτώσεις κάθε φορά που κάνουµε double click πάνω σε κάποιο
αντικείµενο, εκτελείται κάποιος κώδικας ή τρέχει κάποια µακροεντολή το
όνοµα της οποίας θα πρέπει να καθορίσουµε ως παράµετρο αυτού του συµβάντος.
Όπως και στις προηγούµενες περιπτώσεις, έτσι και τώρα, αυτά τα δύο συµβάντα
εφαρµόζονται µόνο σε φόρµες, ενότητες φορµών και πλαίσια ελέγχου που βρί-
σκονται πάνω στην επιφάνεια µιας φόρµας, όχι όµως και σε αναφορές καθώς
και σε πλαίσια ελέγχου που συσχετίζονται µε αυτές. Προκειµένου δε να καθορί-
σουµε τι πρόκειται να συµβεί κάθε φορά που θα πραγµατοποιηθούνε αυτά τα
συµβάντα, θα πρέπει να περάσουµε ως παράµετρο σε αυτά, το όνοµα της µακροε-
ντολής ή του προγράµµατος που θα εκτελεστεί κατά την εµφάνισή τους.
Εκτός από τις επιµέρους περιοχές της φόρµας, ιδιότητες µπορούµε να καθορί-
σουµε και για τη φόρµα, στο σύνολό της. Αυτές οι ιδιότητες πλέον δεν αφορούν µόνο
τα χαρακτηριστικά εµφάνισης της φόρµας, καθώς και τον τρόπο συµπεριφοράς του
προγράµµατος για διάφορα συµβάντα, όπως αυτά του ποντικιού που περιγράψαµε
στις προηγούµενες σελίδες, αλλά περιλαµβάνουν πιο γενικά χαρακτηριστικά, όπως
είναι η συµπεριφορά της φόρµας κατά τη διαδικασία αλληλεπίδρασης του χρή-
στη µε τα δεδοµένα της βάσης, ο τρόπος εµφάνισης των δεδοµένων στην επιφά-
νεια της τρέχουσας φόρµας, καθώς και πολλά άλλα. Για να εµφανίσουµε το φύλλο
ιδιοτήτων που αφορούν τη φόρµα στο σύνολό της, θα πρέπει να µεταφερθούµε στο
κεντρικό µενού επιλογών της Access, και από εκεί να επιλέξουµε «Προβολή» και
στη συνέχεια «Ιδιότητες». Εναλλακτικά µπορούµε να µεταφερθούµε στο κενό τµήµα
της φόρµας που βρίσκεται κάτω από το υποσέλιδό της, και να εµφανίσουµε το φύλλο
ιδιοτήτων της φόρµας, χρησιµοποιώντας το δεξί πλήκτρο του ποντικιού. Στις επό-
µενες ενότητες, λαµβάνει χώρα αναλυτική περιγραφή των ιδιοτήτων που µπορούµε
να καθορίσουµε για µια φόρµας της Microsoft Access.
1. Και τα δύο (Both ή 0): αποτελεί την προεπιλεγµένη τιµή και επιτρέπει
την εναλλαγή του χρήστη ανάµεσα στη µορφή φόρµας και στη µορφή
φύλλου δεδοµένων.
τρέχουσα φόρµα. Οι τιµές που µπορεί να λάβει αυτή η παράµετρος, είναι οι ακόλου-
θες:
1. Κανένα (Neither ή 0): η τιµή αυτή προκαλεί την απόκρυψη τόσο της οριζό-
ντιας όσο και της κατακόρυφης γραµµής κύλισης από την επιφάνεια της τρέ-
χουσας φόρµας.
2. Μόνο οριζόντια (Horizontal Only ή 1): η τιµή αυτή προκαλεί την εµφάνιση
µόνο της οριζόντιας γραµµής κύλισης στην επιφάνεια της τρέχουσας φόρµας.
3. Μόνο κατακόρυφα (Vertical Only ή 2): η τιµή αυτή προκαλεί την εµφάνιση
µόνο της κατακόρυφης γραµµής κύλισης στην επιφάνεια της τρέχουσας φόρ-
µας
4. Και τα δύο (Both ή 3): η τιµή αυτή προκαλεί την εµφάνιση τόσο της οριζό-
ντιας όσο και της κατακόρυφης γραµµής κύλισης στην επιφάνεια της τρέχου-
σας φόρµας.
1. Κανένα (None ή 0): η τιµή αυτή προκαλεί την εµφάνιση ενός πλαισίου
διαλόγου το οποίο δεν φέρει περίγραµµα και στοιχεία τίτλου επικεφαλί-
δας, και το µέγεθος του οποίου δεν µπορεί να µεταβληθεί.
2. Λεπτό (Thin ή 1): η τιµή αυτή προκαλεί την εµφάνιση ενός πλαισίου
διαλόγου το οποίο χαρακτηρίζεται από λεπτό περίγραµµα, περιλαµβάνει
στοιχεία τίτλου επικεφαλίδας και δεν επιτρέπει την αλλαγή του µεγέθους
του.
4. ∆ιάλογος (Dialog ή 3): η τιµή αυτή προκαλεί την εµφάνιση ενός πλαισίου
διαλόγου, που διαθέτει µόνο τη γραµµή τίτλου, το µενού ελέγχου (control
menu) που βρίσκεται στην πάνω και αριστερή γωνία της φόρµας, και το
κουµπί τερµατισµού της λειτουργίας της φόρµας (close button). Επιπλέον,
η φόρµα δεν επιτρέπει την ελαχιστοποίηση και µεγιστοποίησή της καθώς
επίσης και την αλλαγή του µεγέθους της.
1. Κανένα (None ή 0): αυτή η τιµή προκαλεί την απόκρυψη και των δύο
κουµπιών της φόρµας
4. Και τα δύο ενεργοποιηµένα (Both Enabled ή 3): αυτή η τιµή (που είναι
και η προεπιλεγµένη) προκαλεί την εµφάνιση τόσο του κουµπιού ελαχι-
στοποίησης όσο και του κουµπιού µεγιστοποίησης της φόρµας.
Το κουµπί «Τι είναι» έχει εµφανιστεί στις τελευταίες εκδόσεις των Microsoft
Windows, και επιτρέπει την εµφάνιση βοηθείας για τα διάφορα πλαίσια ελέγ-
χου που βρίσκονται στην επιφάνεια µιας φόρµας. Όταν ο χρήστης πατήσει αυτό
το κουµπί, ο δείκτης του ποντικιού µεταµορφώνεται σε ένα αγγλικό ερωτηµα-
τικό. Στη συνέχεια, εάν ο χρήστης επιλέξει κάποιο πλαίσιο της φόρµας εµφανίζε-
ται η οθόνη βοηθείας που εξηγεί τον τρόπο χρήσης αυτού του πλαισίου. Εάν αυτή
η βοήθεια δεν είναι διαθέσιµη, θα εµφανιστεί η οθόνη βοηθείας που συσχετίζεται
µε τη φόρµα στην οποία περιλαµβάνεται το πλαίσιο. Στην περίπτωση που ούτε
αυτή η βοήθεια είναι διαθέσιµη, το πρόγραµµα θα εµφανίσει τις σελίδες βοηθείας
της Microsoft Access.
2. Αυξοµείωση (Stretch ή 1): η τιµή αυτή προκαλεί την αύξηση του µεγέ-
θους της εικόνας κατά την οριζόντια και κατακόρυφη κατεύθυνση
έτσι ώστε να καλύψει την επιφάνεια της φόρµας ή του στοιχείου ελέγ-
χου, ακόµη και εάν αυτή η διαδικασία µεταβάλλει την αναλογία του
πλάτους και του ύψους της εικόνας.
3. Ζουµ (Zoom ή 3): η τιµή αυτή προκαλεί τη µεγέθυνση της εικόνας έτσι
ώστε να καλύψει την επιφάνεια της φόρµας ή του στοιχείου ελέγχου,
αλλά µε τέτοιο τρόπο, ώστε να διατηρείται η αναλογία που υφίσταται
ανάµεσα στο πλάτος και στο ύψος της εικόνας.
1. Άνω αριστερά (Top Left ή 0): η εικόνα εµφανίζεται στην πάνω αριστερή
γωνία του στοιχείου εικόνας (image control), του παραθύρου της φόρµας,
ή της σελίδας της αναφοράς.
2. Άνω δεξιά (Top Right ή 1): η εικόνα εµφανίζεται στην πάνω δεξιά γωνία
του στοιχείου εικόνας, του παραθύρου της φόρµας, ή της σελίδας της
αναφοράς.
3. Κέντρο (Center ή 2): η τιµή αυτή (που είναι και η προεπιλεγµένη) προκα-
λεί την εµφάνιση της εικόνας στο κέντρο του στοιχείου εικόνας, του πα-
ραθύρου της φόρµας, ή της σελίδας της αναφοράς.
4. Κάτω αριστερά (Bottom Left ή 3): η εικόνα εµφανίζεται στην κάτω αρι-
στερή γωνία του στοιχείου εικόνας, του παραθύρου της φόρµας, ή της σε-
λίδας της αναφοράς.
5. Κάτω δεξιά (Bottom Right ή 4): η εικόνα εµφανίζεται στην κάτω δεξιά
γωνία στοιχείου εικόνας, του παραθύρου της φόρµας, ή της σελίδας της
αναφοράς.
6. Στο κέντρο της φόρµας (Form Center ή 5): η τιµή αυτή χρησιµοποιείται
µόνο για τις φόρµες και προκαλεί την εµφάνιση της εικόνας στο κέντρο
της φόρµας. Η φόρµα κεντράρεται τόσο ως προς την οριζόντια διεύθυνση
(όσον αφορά το πλάτος της φόρµας) όσο και ως προς την κατακόρυφη δι-
εύθυνση (όσον αφορά το συνολικό ύψος της φόρµας).
Ένα δευτερεύον φύλλο δεδοµένων δεν είναι τίποτε άλλο από ένα φύλλο δεδοµέ-
νων που βρίσκεται µέσα σε ένα άλλο φύλλο δεδοµένων και περιέχει δεδοµένα
σχετικά ή ενωµένα µε το πρώτο φύλλο δεδοµένων. Στην περίπτωση µιας φόρµας
η χρήση ενός δευτερεύοντος φύλλου δεδοµένων πραγµατοποιείται δηµιουργώντας
µια υποφόρµα σε προβολή φύλλου δεδοµένων.
1. Χωρίς κλειδώµατα (No Locks ή 0): η τιµή αυτή (που είναι και η προεπιλεγ-
µένη), επιτρέπει την τροποποίηση του περιεχοµένου της εγγραφής, από
δύο χρήστες ταυτόχρονα. Εάν όµως οι χρήστες προσπαθήσουν να αποθη-
κεύσουν τις αλλαγές που έχουν πραγµατοποιήσει πάνω σε κάποια από τις εγ-
γραφές, η Access εµφανίζει ένα µήνυµα στον δεύτερο από αυτούς τους χρή-
στες που τον ενηµερώνει ότι η εγγραφή που προσπαθεί να αποθηκεύσει, χρη-
σιµοποιείται ήδη από κάποιο άλλο. Σε µια τέτοια περίπτωση, ο χρήστης έχει
πολλές δυνατότητες, όπως για παράδειγµα να αναιρέσει τις αλλαγές που έχει
επιφέρει στο περιεχόµενο της εγγραφής, να αντιγράψει την εγγραφή στο
Clipboard για µελλοντική χρήση, ή να αποθηκεύσει την εγγραφή, κατα-
στρέφοντας τις αλλαγές που έκανε ο πρώτος χρήστης.
• Αναδυόµενο (PopUp property): η ιδιότητα αυτή παίρνει µόνο τις τιµές Ναι (Yes
ή (-1)) και Όχι (No ή 0) και καθορίζει εάν η φόρµα θα ανοίξει ως αναδυόµενη
ή όχι. Μια φόρµα που ανοίγει ως αναδυόµενη βρίσκεται πάντοτε πάνω από όλα
τα παράθυρα των Microsoft Windows και προκαλεί την απόκρυψη της γραµ-
µής ιδιοτήτων της Access που επιτρέπει τη σχεδίαση και διαχείριση των φορµών
της εφαρµογής (form design toolbar).
• Αποκλειστική (Modal property): η ιδιότητα αυτή παίρνει µόνο τις τιµές Ναι
(Yes ή (-1)) και Όχι (No ή 0) και καθορίζει εάν η φόρµα µας θα είναι αποκλει-
στικής χρήσης ή όχι. Μια φόρµα χαρακτηρίζεται ως αποκλειστική (modal) σε
περιπτώσεις κατά τις οποίες ο χρήστης µπορεί να αλληλεπιδράσει µόνο µαζί της,
ενώ δεν έχει πρόσβαση σε άλλα αντικείµενα της εφαρµογής. Αυτό σηµαίνει πως ο
χρήστης µπορεί να χρησιµοποιήσει άλλα αντικείµενα της εφαρµογής, µόνο όταν
κλείσει την τρέχουσα φόρµα.
1. Όλες οι εγγραφές (All Records ή 0): αυτή η τιµή που είναι και η προεπι-
λεγµένη, εµφανίζει στη φόρµα την επόµενη εγγραφή, και µεταφέρει την
εστίαση του συστήµατος στο πρώτο στοιχείο ελέγχου της φόρµας.
Σηµείωση: στην περίπτωση µιας φόρµας η οποία περιέχει περισσότερα από ένα
στοιχεία ελέγχου, ο χρήστης έχει τη δυνατότητα να µεταφέρεται από το ένα
στο άλλο, χρησιµοποιώντας το πλήκτρο Tab. Προκειµένου δε να καθορίσουµε
τη σειρά (Tab Order) µε την οποία αυτά τα στοιχεία ελέγχου θα προσπελαύνο-
νται το ένα µετά το άλλο µπορούµε να χρησιµοποιήσουµε το πλαίσιο διαλόγου
που φέρει τον τίτλο «Σειρά Tab» και βρίσκεται στο υπο-µενού «Προβολή» του
κεντρικού µενού επιλογών της Access.
Σχήµα 106: Καθορισµός του Tab Order για τα στοιχεία ελέγχου της τρέχουσας φόρµας
Στο παράδειγµά µας η σειρά Tab που καθορίζουµε µέσα από το παραπάνω πλαίσιο
διαλόγου αφορά τα πεδία του κεντρικού τµήµατος της φόρµας που φέρει τον τίτλο
«Λεπτοµέρειες».
γαλείων της Access, αλλά εάν το επιθυµεί, µπορεί να κατασκευάσει τη δική του
γραµµή εργαλείων (customized toolbar) έτσι ώστε να ικανοποιούνται οι ανά-
γκες του.
1. Όλες οι προβολές (All Views ή (-1)): η τιµή αυτή που είναι και η προεπι-
λεγµένη, επιτρέπει την αλλαγή της σχεδίασης της φόρµας, σε όλες τις
προβολές στις οποίες αυτή µπορεί να βρεθεί.
2. Μόνο προβολή σχεδίασης (Design View Only ή 0): η τιµή αυτή επιτρέ-
πει την αλλαγή της σχεδίασης της τρέχουσας φόρµας, µόνο όταν αυτή
βρίσκεται σε προβολή σχεδίασης.
Από το παραπάνω σχήµα διαπιστώσουµε πως µια φόρµα στη γενική περί-
πτωση αποτελείται από ένα σύνολο πεδίων, τα οποία συσχετίζονται µε τα πεδία
κάποιου από τους πίνακες της βάσης. Το κάθε πεδίο συνοδεύεται από µια ετικέτα,
και αναγράφει στο εσωτερικό του το όνοµα του πεδίου του πίνακα από το οποίο
δέχεται τιµές. Ας πάρουµε για παράδειγµα το πλαίσιο κειµένου LName Αυτό συνο-
δεύεται από µια ετικέτα που φέρει τον τίτλο «Last Name», και αναγράφει στο εσω-
τερικό του τη λέξη LName. Αυτή η λέξη είναι το όνοµα του πεδίου του πίνακα
EMPLOYEE µε το οποίο συσχετίζεται αυτό το πεδίο της φόρµας – µε άλλα λόγια
εάν στο πεδίο αυτό καταχωρήσουµε κάποιο επώνυµο, αυτό θα αποθηκευθεί στο πεδίο
LName της τρέχουσας εγγραφής. Όσον αφορά τον τίτλο της ετικέτας που συνοδεύει
αυτό το πεδίο, αυτός καθορίζεται από την ιδιότητα «Λεζάντα» του πεδίου Lname,
που εµφανίζεται εάν φέρουµε τον πίνακα EMPLOYEE σε προβολή σχεδίασης. Εάν
δεν καθορίσουµε κάποια λεζάντα, αυτή αυτόµατα θα τεθεί στο όνοµα του πεδίου
του πίνακα. Σε κάθε περίπτωση όµως µπορούµε να καθορίσουµε όποιον τίτλο θέ-
λουµε, µεταφέροντας τη φόρµα σε προβολή σχεδίασης
Σχήµα 109 : Μορφές επεξεργασίας που εφαρµόζονται πάνω σε επιλεγµένο πεδίο φόρµας
Από τις επιλογές που περιλαµβάνονται στο παραπάνω µενού επιλογών, η πιο
σηµαντική είναι η επιλογή «Ιδιότητες», που εµφανίζει τις ιδιότητες του συγκεκριµέ-
νου πεδίου της φόρµας. Το σύνολο αυτών των ιδιοτήτων εξαρτάται από τη φύση του
συγκεκριµένου πεδίου, αν και πάρα πολλές από αυτές είναι ακριβώς οι ίδιες µε εκεί-
νες που περιγράψαµε στις προηγούµενες σελίδες και αφορούν ολόκληρη τη φόρµα.
Ένα παράδειγµα φύλλου ιδιοτήτων που στην προκειµένη περίπτωση αφορούν το
πλαίσιο κειµένου Address στο οποίο καταχωρούµε τις διευθύνσεις των υπαλλήλων
της εταιρείας, παρουσιάζεται στο επόµενο σχήµα:
Όπως έχει ήδη αναφερθεί σε προηγούµενο κεφάλαιο, ένας από τους πιο σηµα-
ντικούς λόγους που υπαγορεύουν την οργάνωση των δεδοµένων µιας εφαρµογής, µε
τη βοήθεια ενός συστήµατος διαχείρισης βάσεων δεδοµένων, είναι η εύκολη ανά-
κτηση πληροφοριών από τη βάση, δια του καθορισµού συγκεκριµένων κριτηρίων
επιλογής. Θεωρώντας ως παράδειγµα, τη βάση δεδοµένων µιας Σχολικής Μονάδας,
µπορούµε σχετικά εύκολα, να ανακτήσουµε τα δεδοµένα που αφορούν τους µαθητές
ενός τµήµατος, και στη συνέχεια να εφαρµόσουµε πάνω σε αυτά διάφορες µορφές
επεξεργασίας, όπως για παράδειγµα να τα ταξινοµήσουµε ή να τα χωρίσουµε σε
οµάδες, σύµφωνα µε κάποιες ιδιότητες που τα χαρακτηρίζουν. Αυτές οι διαδικα-
σίες αναζήτησης επιλεγµένων δεδοµένων, είναι γνωστές ως ερωτήµατα (queries),
και η διαχείρισή τους, αποτελεί αναπόσπαστο χαρακτηριστικό όλων των συστηµάτων
διαχείρισης βάσεων δεδοµένων.
Η πρώτη από τις επιλογές αυτού του πλαισίου που φέρει το όνοµα «Προβολή
Σχεδίασης», είναι η πιο γενική από όλες και περιλαµβάνει τον πλήρη καθορισµό
των παραµέτρων του ερωτήµατος, από το χρήστη. Αυτό σηµαίνει πως ο χρήστης
θα πρέπει να καθορίσει, τόσο τους πίνακες και τα πεδία που θα περιλαµβάνονται
στο ερώτηµα, όσο και τα κριτήρια επιλογής µε τη βοήθεια των οποίων θα λάβει
χώρα η αναζήτηση των δεδοµένων. Αντίθετα, η επιλογή «Οδηγός απλών ερωτη-
µάτων», που ακολουθεί στη συνέχεια, πραγµατοποιεί ακριβώς την ίδια διαδικασία,
αλλά επιτρέπει στο χρήστη να καθορίσει τα πεδία των πινάκων που θα συµµετάσχουν
στο ερώτηµα, µε ένα πιο εύκολο τρόπο σε σχέση µε εκείνον που του προσφέρει η
προβολή σχεδίασης. Τέλος, οι υπόλοιπες τρεις επιλογές, επιτρέπουν τη δηµιουργία
συγκεκριµένων τύπων ερωτηµάτων. Ο πρώτος τύπος αφορά τα ερωτήµατα δια-
σταύρωσης, τα οποία είναι ιδανικά για την εξαγωγή συγκεντρωτικών τιµών και
µέσων όρων. Ο δεύτερος τύπος, επιτρέπει την αναζήτηση διπλότυπων εγγραφών
στους πίνακες της βάσης, ενώ ο τελευταίος τύπος ερωτηµάτων, επιτρέπει την αναζή-
τηση αταίριαστων εγγραφών, δηλαδή εγγραφών, για τις οποίες δεν υπάρχουν συ-
σχετιζόµενες εγγραφές στους άλλους πίνακες. Στις σελίδες που ακολουθούν, θα περι-
γράψουµε µε αναλυτικό τρόπο, τη δηµιουργία ερωτηµάτων µέσα από τη Microsoft
Access, δια της χρήσης συγκεκριµένων παραδειγµάτων, τα οποία θα συµβάλλουν
στην ευκολότερη κατανόηση του αντικειµένου.
Σχήµα 113 : Καθορισµός των πινάκων της βάσης που θα χρησιµοποιηθούν για τη δηµιουργία του
ερωτήµατος σε προβολή σχεδίασης.
του φύλλου δεδοµένων που βρίσκεται ακριβώς από κάτω. Ας σηµειωθεί πως η
σειρά µε την οποία τοποθετούµε τα πεδία στις στήλες του φύλλου δεδοµένων,
καθορίζει και τη σειρά µε την οποία θα εµφανιστούν τα αποτελέσµατα του ερω-
τήµατος, κατά τη φάση της εκτέλεσής του. Έτσι εάν στην πρώτη στήλη τοποθετή-
σουµε το πεδίο LNAME και στη δεύτερη το πεδίο FNAME, αυτή η σειρά εµφάνισης
θα τηρηθεί και κατά την παρουσίαση των αποτελεσµάτων στην οθόνη του χρήστη – η
στήλη µε τα επώνυµα των υπαλλήλων θα εµφανιστεί πρώτη. Εάν λοιπόν τοποθετή-
σουµε τα τρία πεδία του πίνακα EMPLOYEE στις στήλες του φύλλου δεδοµένων
του πλαισίου διαλόγου, αυτό θα παρουσιάσει την ακόλουθη εικόνα:
Σχήµα 115 : Καθορισµός των πεδίων του πίνακα που θα χρησιµοποιηθούν στο νέο ερώτηµα
Σχήµα 116 : Εναλλακτική διαδικασία καθορισµού των πεδίων του πίνακα που θα χρησιµοποιηθούν
στο νέο ερώτηµα
Η αµέσως επόµενη γραµµή του φύλλου δεδοµένων του ερωτήµατος που φέρει
το όνοµα «Εµφάνιση», καθορίζει εάν κάποιο από τα πεδία που συµµετέχουν στο
ερώτηµα, θέλουµε να εµφανιστεί στο τελικό αποτέλεσµα, ή όχι. Η επιλογή αυτή
είναι ιδιαίτερα χρήσιµη, καθώς η χρησιµοποίηση κάποιου πεδίου στην κατασκευή
του ερωτήµατος, δεν σηµαίνει πως αυτό το πεδίο θα πρέπει υποχρεωτικά να εµ-
φανίζεται κατά την εκτέλεση του ερωτήµατος στο οποίο συµµετέχει. Χαρακτηρι-
στικό παράδειγµα ενός τέτοιου πεδίου, είναι το πεδίο DNO. Αυτό το πεδίο, δεν θα
εµφανιστεί στο τελικό αποτέλεσµα, διότι οι πληροφορίες που θέλουµε να ανακτή-
σουµε από τη βάση, αφορούν µόνο το όνοµα και το επώνυµο των υπαλλήλων που
περιλαµβάνονται στα πεδία FNAME και LNAME αντίστοιχα. Παρά το γεγονός
όµως αυτό, το πεδίο DNO χρησιµοποιείται στο ερώτηµα, διότι περιέχει το κριτήριο
επιλογής των εγγραφών του πίνακα EMPLOYEE που είναι η συνθήκη DNO=5. Για
το λόγο αυτό, θα αφήσουµε επιλεγµένα τα check boxes των στηλών LNAME και
FNAME που βρίσκονται στη γραµµή µε την ετικέτα «Εµφάνιση», ενώ θα αφαιρέ-
σουµε το check mark, από το check box που αντιστοιχεί στο πεδίο DNO, όπως φαί-
νεται στο επόµενο σχήµα.
Τέλος, στην τελευταία γραµµή του φύλλου δεδοµένων που φέρει το όνοµα
«Κριτήρια», καθώς και σε όσες γραµµές ακολουθούν από εκεί και κάτω, καθορί-
ζουµε µια ή περισσότερες συνθήκες τις οποίες πρέπει να πληρούνε τα δεδοµένα
που επιθυµούµε να ανακτήσουµε. Στο παράδειγµά µας, ζητούµε τα ονόµατα και τα
επώνυµα των υπαλλήλων, που ανήκουν στο τµήµα της εταιρείας µε κωδικό
αριθµό 5. Για το λόγο αυτό, θα πρέπει να µεταφερθούµε στη στήλη του πεδίου DNO,
και στο κελί που αντιστοιχεί στη γραµµή «Κριτήρια», θα πρέπει να βάλουµε την
τιµή 5. Το επόµενο σχήµα, περιέχει όλες τις ρυθµίσεις που θα πρέπει να κάνουµε έτσι
ώστε να ανακτήσουµε τη συγκεκριµένη πληροφορία από τη βάση.
Σχήµα 117 : Καθορισµός των παραµέτρων για τα πεδία του πίνακα που θα χρησιµοποιηθούν στο νέο
ερώτηµα
Σχήµα 118 : Αποθήκευση του νέου ερωτήµατος στη βάση δεδοµένων της εφαρµογής
ταφορά του, σε προβολή φύλλου δεδοµένων. Τέλος, η τρίτη προβολή στην οποία
µπορεί να βρεθεί ένα ερώτηµα, είναι η προβολή SQL (SQL view), η οποία εµφανίζει
τον κώδικα SQL που αντιστοιχεί στο ερώτηµα που χρησιµοποιούµε. Αυτός ο κώδι-
κας δηµιουργείται ανάλογα µε τα χαρακτηριστικά του ερωτήµατος που καθορίζονται
στην προβολή σχεδίασης και είναι αυτός που ουσιαστικά εκτελείται σε κάθε διαδικα-
σία ανάκτησης πληροφοριών από τη βάση δεδοµένων. Στο επόµενο σχήµα παρουσιά-
ζουµε τρεις διαφορετικούς τρόπους µε τους οποίους µπορούµε να εκτελέσουµε ένα
ερώτηµα, δηλαδή να το φέρουµε σε προβολή φύλλου δεδοµένων.
Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως ο κώδικας SQL που
δηµιουργεί η Access για το κάθε ερώτηµα, µπορεί να υποστεί περαιτέρω επεξερ-
γασία, έτσι ώστε να διαµορφωθεί ανάλογα µε τις επιλογές του χρήστη. Αξίζει
επίσης να σηµειωθεί, πως ανάµεσα στις προβολές σχεδίασης και SQL, υφίσταται
µια αµφίδροµη αλληλεπίδραση. Αυτό σηµαίνει, πως αλλαγές στην προβολή σχε-
δίασης, προκαλούν µεταβολές στη δοµή του κώδικα SQL, και αντίστροφα, τρο-
ποποίηση του κώδικα SQL, προκαλεί αλλαγή στη δοµή του ερωτήµατος, έτσι
όπως αυτή παρουσιάζεται στην προβολή σχεδίασης.
Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως εάν κατά τη σχεδίαση
της δοµής της βάσης, έχουµε δηµιουργήσει τις συσχετίσεις που υφίστανται ανά-
µεσα στους πίνακες που περιέχει, αυτές εµφανίζονται αυτόµατα στο κεντρικό
παράθυρο σχεδίασης των ερωτηµάτων, κάθε φορά που προσθέτουµε νέους πίνα-
κες. Στην αντίθετη περίπτωση, θα πρέπει να εµφανίσουµε τους πίνακες και στη συνέ-
χεια να δηµιουργήσουµε τις συσχετίσεις από µόνοι µας. Η δηµιουργία αυτών των
συσχετίσεων, γίνεται µε τον τρόπο που περιγράψαµε στο οµώνυµο κεφάλαιο, δηλαδή
µε µια διαδικασία drag and drop, που ξεκινά από το πρωτεύον κλειδί του ενός πί-
νακα, και καταλήγει στο αντίστοιχο ξένο κλειδί του άλλου πίνακα. Στην προκειµένη
περίπτωση αυτή η διαδικασία θα συσχετίσει το πεδίο DNUMBER του πίνακα DE-
PARTMENT µε το πεδίο DNO του πίνακα EMPLOYEE.
DEPARTMENT.DName="Research";
υπάρχει και η φράση
Σχήµα 124 : Τα αποτελέσµατα που επιστρέφονται από το ερώτηµα µετά την εκτέλεσή του
Τέλος, ο κώδικας SQL που αντιστοιχεί στο εν λόγω ερώτηµα, παρουσιάζεται στη συ-
νέχεια.
SELECT
DEPARTMENT.DNumber, EMPLOYEE.LName, EMPLOYEE.Salary,
EMPLOYEE.BDate, PROJECT.[Project Number],
PROJECT.[Project Location]
FROM
(EMPLOYEE INNER JOIN DEPARTMENT
ON EMPLOYEE.SSN = DEPARTMENT.MGRSSN) INNER JOIN PROJECT
ON DEPARTMENT.DNumber = PROJECT.DNUM
SELECT
DEPARTMENT.DNumber, EMPLOYEE.LName, EMPLOYEE.Salary,
EMPLOYEE.BDate, PROJECT.[Project Number],
PROJECT.[Project Location]
FROM
EMPLOYEE, DEPARTMENT, PROJECT
WHERE
EMPLOYEE.SSN = DEPARTMENT.MGRSSN AND
DEPARTMENT.DNumber = PROJECT.DNUM AND
PROJECT.[Project Location])="Stafford"
και η καταχώρηση των συνθηκών σύζευξης (join conditions), έτσι ώστε να είναι
δυνατός ο συνδυασµός της πληροφορίας, από περισσότερους από έναν πίνακες.
Ας υποθέσουµε για παράδειγµα, πως για κάθε ένα από τα τµήµατα της
εταιρείας, θέλουµε να εµφανίσουµε το όνοµά του καθώς και το ονοµατεπώνυµο
του MANAGER που το διοικεί. Το ερώτηµα αυτό, µπορεί ασφαλώς να σχεδιαστεί
από το χρήστη, σύµφωνα µε τα όσα αναφέραµε στις προηγούµενες σελίδες – στην
περίπτωσή µας όµως, θα το σχεδιάσουµε µε τη βοήθεια του οδηγού ερωτηµάτων. Για
να το κάνουµε αυτό, µεταφερόµαστε στο κεντρικό παράθυρο διαχείρισης της βάσης
δεδοµένων, και από εκεί επιλέγουµε Ερωτήµατα Æ ∆ηµιουργία Æ Οδηγός Απλών
Ερωτηµάτων. Στη συνέχεια, πατάµε το κουµπί OK, κάτι που έχει ως αποτέλεσµα να
εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο διαλόγου:
Σχήµα 126 : Καθορισµός των πεδίων των πινάκων που θα χρησιµοποιηθούν στο νέο ερώτηµα
Στο επόµενο βήµα της διαδικασίας θα πρέπει να καθορίσουµε ένα όνοµα για
το νέο ερώτηµα, και να διαλέξουµε εάν θα το ανοίξουµε σε προβολή φύλλου δεδο-
µένων – για να δούµε τα αποτελέσµατα που θα µας επιστρέψει – ή εάν θα µεταφερ-
θούµε σε προβολή σχεδίασης – για να τροποποιήσουµε τη δοµή του – κάτι που γίνε-
ται όταν το ερώτηµα είναι αρκετά πολύπλοκο και η σχεδίασή του απαιτεί τον καθορι-
σµό και άλλων παραµέτρων που δεν είναι δυνατό να πραγµατοποιηθεί δια της χρήσης
του προγράµµατος καθοδήγησης. Στο παράδειγµά µας το όνοµα που θα αποδώσουµε
στο ερώτηµα θα είναι το DEPT-MANAGERS ενώ η προβολή την οποία θα επιλέ-
ξουµε, θα είναι η προβολή σχεδίασης, όπως φαίνεται από το επόµενο πλαίσιο διαλό-
γου.
Σχήµα 127 : Ολοκλήρωση της σχεδίασης του ερωτήµατος δια της χρήσης του οδηγού ερωτηµάτων
Στο σηµείο αυτό έχουµε καθορίσει όλες τις παραµέτρους που είναι αναγκαίες
για τη δηµιουργία του νέου ερωτήµατος. Εάν τώρα ανοίξουµε το ερώτηµα σε προ-
βολή φύλλου δεδοµένων, θα εµφανιστούν στην οθόνη του υπολογιστή µας τα αποτε-
λέσµατα του ερωτήµατος, δηλαδή το όνοµα του κάθε τµήµατος και το ονοµατεπώ-
νυµο του MANAGER που το διοικεί.
Σχήµα 130 : ∆ηµιουργία ενδιάµεσου ερωτήµατος που θα χρησιµοποιηθεί για την κατασκευή του ερω-
τήµατος διασταύρωσης
Σχήµα 133 : Καθορισµός των πεδίων που θα εµφανιστούν στις γραµµές του ερωτήµατος διασταύρω-
σης
Μετά τον καθορισµό των πεδίων που θα εµφανιστούν στις γραµµές του απο-
τελέσµατος, θα πρέπει να καθορίσουµε και τα πεδία που θα εµφανιστούν στις στήλες,
καθώς το τελικό αποτέλεσµα θα έχει τη µορφή φύλλου δεδοµένων. Σύµφωνα µε τις
προδιαγραφές του ερωτήµατος, οι στήλες του αποτελέσµατος θα περιέχουν τα
επώνυµα των υπαλλήλων, ένα επώνυµο σε κάθε στήλη. Για το λόγο αυτό, µεταφε-
ρόµαστε στο επόµενο παράθυρο, και επιλέγουµε το πεδίο LNAME ως το πεδίο που
επιθυµούµε να εµφανίζεται στην κεφαλίδα της κάθε στήλης.
Σχήµα 134 : Καθορισµός των πεδίων που θα εµφανιστούν στις στήλες του ερωτήµατος διασταύρωσης
Σχήµα 135 : Καθορισµός του πεδίου που θα εµφανιστεί στην τοµή της κάθε γραµµής µε την κάθε
στήλη
κάθε στήλη να περιέχει το πλήθος των ωρών που ο κάθε εργαζόµενος απασχολεί-
ται σε κάθε έργο.
ο οποίος εκτός από τις απλές εντολές της SQL περιέχει και άλλες προτάσεις που είναι
κατανοητές µόνο από τη Microsoft Access, και όχι από άλλα σχεσιακά συστήµατα
διαχείρισης βάσεων δεδοµένων. Επίσης στην προβολή σχεδίασης αυτού του ερωτή-
µατος εµφανίζονται και άλλες ιδιότητες που δεν περιλαµβάνονται στη διαδικασία
σχεδίασης απλών ερωτηµάτων, όπως είναι τα «Συγκεντρωτικά Στοιχεία» και η
«∆ιασταύρωση Πινάκων».
Σχήµα 138 : Χαρακτηριστικές ιδιότητες πεδίων πινάκων που συµµετέχουν σε ερώτηµα διασταύρωσης
κές εγγραφές στον πίνακα DEPENDENT. Αλλά αυτοί ουσιαστικά είναι οι υπάλλη-
λοι της εταιρείας οι οποίοι δεν έχουν προστατευόµενα µέλη. Ας υλοποιήσουµε
λοιπόν το ερώτηµα αυτό, χρησιµοποιώντας το πρόγραµµα καθοδήγησης της Micro-
soft Access, όσον αφορά τη δηµιουργία ερωτηµάτων.
Σχήµα 140 : Καθορισµός του πίνακα µε τον οποίο συσχετίζεται ο πίνακας EMPLOYEE
Σχήµα 141 : Καθορισµός του κοινού πεδίου των συσχετιζόµενων πινάκων δια της χρήσης του οποίου
ορίζεται η πράξη της σύζευξης που υφίσταται ανάµεσά τους
Σχήµα 142 : Καθορισµός των πεδίων του πίνακα EMPLOYEE που θα εµφανιστούν κατά την εκτέ-
λεση του ερωτήµατος που κατασκευάζουµε
Σχήµα 143 : Μεταφορά του ερωτήµατος αταίριαστων εγγραφών που κατασκευάσαµε, σε προβολή
φύλλου δεδοµένων
Σχήµα 145 : Επιλογή του πεδίου του πίνακα που θα χρησιµοποιηθεί κατά τη
διαδικασία δόµησης εκφράσεων
Έχοντας εµφανίσει στο κεντρικό πλαίσιο λίστας το σύνολο των πεδίων κά-
ποιου πίνακα, µπορούµε να επιλέξουµε το πεδίο που µας ενδιαφέρει, κάνοντας dou-
ble click µε το ποντίκι πάνω στο όνοµά του. Στην περίπτωση αυτή το εν λόγω πεδίο
εµφανίζεται στο κεντρικό παράθυρο της δόµησης εκφράσεων, και ο τρόπος εµφά-
νισής του ακολουθεί τη σύνταξη [Table Name]![Field Name]. Εάν για παράδειγµα
επιλέξουµε το πεδίο MGRSSN του πίνακα DEPARTMENT, αυτό θα εµφανιστεί µε
τη µορφή [DEPARTMENT]![MGRSSN].
Σχήµα 146 : Παραδείγµατα τελεστών που µπορούν να χρησιµοποιηθούν κατά τη διαδικασία δόµησης
µιας έκφρασης για κάποιο από τα πεδία των πινάκων της βάσης
Η αναλυτική περιγραφή όλων αυτών των ιδιοτήτων βρίσκεται έξω από τον
σκοπό συγγραφής αυτού του κεφαλαίου. Για κάθε µια ιδιότητα ωστόσο, µπορούµε
να ανακτήσουµε πληροφορίες σχετικά µε το ρόλο της και τον τρόπο χρήσης της,
εάν µεταφερθούµε στην τιµή της µε το αριστερό πλήκτρο του ποντικιού, και στη
συνέχεια πατήσουµε το πλήκτρο F1 προκειµένου να εµφανίσουµε το Online Help
της Access µε πληροφορίες για τη συγκεκριµένη ιδιότητα του ερωτήµατος.
Μια από τις πιο σηµαντικές λειτουργίες που περιλαµβάνονται σε κάθε τυπικό
σύστηµα µηχανογράφησης, είναι η εκτύπωση των δεδοµένων που βρίσκονται απο-
θηκευµένα στους πίνακες της βάσης. Χαρακτηριστικό παράδειγµα µιας τέτοιας
περίπτωσης είναι η εκτύπωση της καρτέλας ενός µαθητή η οποία περιέχει τα προ-
σωπικά του στοιχεία, όπως αυτά έχουν καταχωρηθεί στον οµώνυµο πίνακα. Ας ση-
µειωθεί πως αυτή η διαδικασία µπορεί να πραγµατοποιηθεί πολύ πιο απλά, εκτυπώ-
νοντας κατευθείαν τη φόρµα επεξεργασίας των στοιχείων του µαθητή. Ωστόσο στη
γενική περίπτωση το αποτέλεσµα αυτής της διαδικασίας δεν είναι αποδεκτό καθώς
µαζί µε τα στοιχεία του µαθητή θα εκτυπωθούν και τα πεδία της φόρµας, κάτι που
συνήθως δεν είναι επιθυµητό. Για το λόγο αυτό, θα πρέπει να κατασκευάσουµε µια
αναφορά ή έκθεση (report) η οποία θα συσχετίζεται µε τον πίνακα των στοιχείων
του µαθητή, και θα εµφανίζει τα προσωπικά του δεδοµένα µε τα επιθυµητά σε κάθε
περίπτωση χαρακτηριστικά εµφάνισης.
number)). Τέλος το υποσέλιδο της έκθεσης (report footer), εµφανίζεται µια και
µοναδική φορά στο τέλος της έκθεσης, και χρησιµοποιείται για την εµφάνιση πληρο-
φοριών που αφορούν το σύνολο της έκθεσης, όπως είναι για παράδειγµα συγκεντρω-
τικά στοιχεία. Στην περίπτωση κατά την οποία οι εγγραφές του πίνακα εµφανίζονται
οµαδοποιηµένες σε σύνολα εγγραφών, µπορούµε να ορίσουµε και µία κεφαλίδα
οµάδας (group header), η οποία θα περιλαµβάνει στοιχεία που συσχετίζονται µε την
κάθε οµάδα εγγραφών.
Σχήµα 150 : Παράδειγµα αυτόµατης έκθεσης που εµφανίζει τις εγγραφές του πίνακα EMPLOYEE
Σχήµα 151 : ∆ιαθέσιµοι τύποι γραφηµάτων που µπορούν να χρησιµοποιηθούν κατά τη διαδικασία
δηµιουργίας της νέας αναφοράς
Από το σχήµα αυτό διαπιστώνουµε πως η Microsoft Access υποστηρίζει τους πιο συ-
νηθισµένους τύπους γραφηµάτων όπως είναι τα γραφήµατα στηλών που µπορούν να
απεικονισθούν στους χώρους των δύο και των τριών διαστάσεων, τα γραφήµατα
γραµµών που επιτρέπουν την απεικόνιση της µεταβολής των τιµών ενός µεγέθους σε
σχέση µε κάποιο άλλο, και τα γραφήµατα πίτας (pie charts) που χρησιµοποιούνται
για την εµφάνιση ποσοστιαίων κατανοµών. Για κάθε γράφηµα ο χρήστης έχει τη
δυνατότητα να ορίσει το είδος της επεξεργασίας που θα εφαρµοσθεί πάνω στα δε-
δοµένα που απεικονίζονται σε αυτό, και την αντιστοιχία που υφίσταται ανάµεσα
στις στήλες των δεδοµένων του πίνακα και στους άξονες του διαγράµµατος.
Σχήµα 152 : Καθορισµός των πεδίων του πίνακα ή του ερωτήµατος που θα περιλαµβάνονται στη νέα
αναφορά
Σχήµα 153 : Παράδειγµα δηµιουργίας αναφοράς χωρίς οµαδοποίηση των πεδίων της
Στο παράδειγµα που ακολουθεί, η αναφορά που δηµιουργείται δια της χρήσης
του οδηγού χαρακτηρίζεται από πλήρη απουσία οµαδοποίησης, και εµφανίζει απλά
τις εγγραφές του πίνακα EMPLOYEE τη µία κάτω από την άλλη. Στο επόµενο βήµα
της διαδικασίας µπορούµε να καθορίσουµε εάν οι εγγραφές του πίνακα θα εκτυπω-
θούν µε την ίδια σειρά µε την οποία βρίσκονται καταχωρηµένες σε αυτόν, ή εάν
θα παρουσιαστούν ταξινοµηµένες ως προς κάποιο πεδίο – κάτι που συνήθως γίνε-
ται στην πράξη. Σε πλήρη αναλογία µε την οµαδοποίηση πεδίων, η διαδικασία ταξι-
νόµησης µπορεί να λάβει χώρα ως προς περισσότερα από ένα πεδία, ο καθορισµός
των οποίων γίνεται χρησιµοποιώντας το επόµενο πλαίσιο διαλόγου. Στο παράδειγµα
Σχήµα 154 : Καθορισµός του είδους της ταξινόµησης των πεδίων της αναφοράς
Σχήµα 155 : Καθορισµός της διάταξης των πεδίων στην επιφάνεια της έκθεσης
Μετά τον καθορισµό όλων αυτών των χαρακτηριστικών µε τον τρόπο που πα-
ρουσιάσαµε στις προηγούµενες σελίδες, το µόνο πράγµα που έχουµε να κάνουµε για
να ολοκληρώσουµε τη διαδικασία δηµιουργίας της νέας αναφοράς, είναι να αποδώ-
σουµε σε αυτή κάποιο όνοµα που θα την ταυτοποιεί µε µοναδικό τρόπο µέσα στη
βάση δεδοµένων. Η διαδικασία αυτή πραγµατοποιείται χρησιµοποιώντας το επόµενο
πλαίσιο διαλόγου, που είναι και το τελευταίο πλαίσιο που περιλαµβάνεται στον οδηγό
δηµιουργίας αναφορών. Από το πλαίσιο αυτό, µπορούµε ακόµη να καθορίσουµε, εάν
µετά την ολοκλήρωση της δηµιουργίας της αναφοράς θα λάβει χώρα άµεση προ-
επισκόπηση και εκτύπωσή της, ή εάν θα την εµφανίσουµε σε προβολή σχεδίασης
έτσι ώστε να προχωρήσουµε σε τροποποίηση των ιδιοτήτων που την περιγρά-
φουν.
Σχήµα 157 : Καθορισµός του ονόµατος της νέας αναφοράς και ολοκλήρωση της διαδικασίας δηµιουρ-
γίας της
Το επόµενο σχήµα παρουσιάζει την αναφορά που έχει δηµιουργηθεί µετά την
ολοκλήρωση των διαδικασιών που περιγράψαµε στις προηγούµενες σελίδες. Η εν
λόγω αναφορά εµφανίζει τα στοιχεία των υπαλλήλων της εταιρείας σε κατακό-
ρυφη διάταξη µε την κάθε γραµµή να περιλαµβάνει τα στοιχεία ενός υπαλλήλου.
Από το σχήµα αυτό διαπιστώνουµε πως η κεφαλίδα της αναφοράς περιλαµβάνει το
όνοµά της όπως αυτό έχει ορισθεί κατά το τελευταίο στάδιο της διαδικασίας,
ενώ το υποσέλιδο περιλαµβάνει την τρέχουσα ηµεροµηνία και τον αριθµός της
τρέχουσας σελίδας σε σχέση µε το συνολικό αριθµό σελίδων της αναφοράς.
Σχήµα 158 : Τυπικό παράδειγµα αναφοράς που έχει προκύψει δια της εφαρµογής της διαδικασίας
δηµιουργίας αναφορών που παρουσιάστηκε στις προηγούµενες σελίδες
Σχήµα 161 : Προεπισκόπηση του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ σε προβολή πηγαίου κώδικα (σε
γλώσσα SQL)
Σχήµα 162 : Ορισµός του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ ως την προέλευση των δεδοµένων της νέας
αναφοράς
Σχήµα 163 : Καθορισµός των πεδίων του ερωτήµατος ΑΠΑΣΧΟΛΗΣΗ που θα χρησιµοποιηθούν στη
δηµιουργία της νέας αναφοράς
Στο επόµενο βήµα της διαδικασίας που είναι και το πιο ενδιαφέρον, θα πρέπει
να καθορίσουµε το είδος της οµαδοποίησης που θα εφαρµοσθεί πάνω στα πεδία
της αναφοράς. Επειδή στην προκειµένη περίπτωση το ερώτηµα ΑΠΑΣΧΟΛΗΣΗ
επιστρέφει δεδοµένα που ανήκουν σε τέσσερις διαφορετικούς πίνακες – τους πίνακες
DEPARTMENT, EMPLOYEE, WORKS_ON και PROJECT – είναι προφανές
πως µπορούµε να ορίσουµε τέσσερα διαφορετικά είδη οµαδοποίησης, ως προς τα
πεδία του κάθε ένα από τους τέσσερις πίνακες της βάσης. Στην προκειµένη περί-
πτωση η οµαδοποίηση των δεδοµένων της αναφοράς, επιθυµούµε να γίνεται
πρώτα ως προς το όνοµα του τµήµατος (που ανήκει στον πίνακα DEPART-
MENT) και κατόπιν ως προς το όνοµα του υπαλλήλου (που ανήκει στον πίνακα
EMPLOYEE). Για το λόγο αυτό θα πρέπει να ορίσουµε την οµαδοποίηση έτσι όπως
αυτή απεικονίζεται στο επόµενο σχήµα. Εάν επιθυµούµε να ορίσουµε και επιπλέον
πεδία οµαδοποίησης µπορούµε να το κάνουµε χρησιµοποιώντας το επόµενο πλαίσιο
διαλόγου του οδηγού δηµιουργίας αναφορών. Στην περίπτωση αυτή µπορούµε να
ορίσουµε και την προτεραιότητα των πεδίων που καθορίζει τα διαδοχικά επί-
Σχήµα 164 : Καθορισµός του είδους οµαδοποίησης των πεδίων της αναφοράς
Σχήµα 166 : Καθορισµός του είδους της ταξινόµησης των δεδοµένων της αναφοράς
Σχήµα 167 : Καθορισµός της διάταξης των πεδίων της νέας αναφοράς
Σχήµα 168 : Τυπικό παράδειγµα αναφοράς που χαρακτηρίζεται από οµαδοποίηση των πεδίων της
Μετά τη δηµιουργία της νέας αναφοράς µε τη βοήθεια κάποιας από τις τεχνι-
κές που παρουσιάσαµε στην προηγούµενη ενότητα, µπορούµε να περάσουµε στο
επόµενο στάδιο της διαδικασίας που περιλαµβάνει την τροποποίηση της δοµής της
αναφοράς έτσι ώστε να καλύψουµε τις ανάγκες που υφίστανται σε κάθε περίπτωση.
Προκειµένου να πραγµατοποιήσουµε αυτή τη διαδικασία, θα πρέπει να µεταφέρουµε
την αναφορά σε προβολή σχεδίασης. Υπάρχουν δύο τρόποι µε τους οποίους µπο-
ρούµε να κάνουµε αυτή τη µεταφορά: (α) από το κεντρικό παράθυρο διαχείρισης
της βάσης δεδοµένων, επιλέγουµε την αναφορά που θέλουµε να επεξεργαστούµε
και τη συνέχεια χρησιµοποιούµε το κουµπί που φέρει την ετικέτα «Σχεδίαση» (β)
εφ’ όσον η αναφορά έχει προηγουµένως ανοίξει σε κατάσταση προεπισκόπησης,
µπορούµε να τη µεταφέρουµε σε προβολή σχεδίασης χρησιµοποιώντας το οµώ-
νυµο κουµπί που βρίσκεται στην αντίστοιχη γραµµή εργαλείων. Τυπικό παρά-
δειγµα αναφοράς σε προβολή σχεδίασης, παρουσιάζεται στο επόµενο σχήµα.
στη δεξιά εικόνα του επόµενου σχήµατος, ενώ στην αριστερή εικόνα εµφανίζεται το
menu επιλογών που επιτρέπει την επεξεργασία των πλαισίων ελέγχου (report con-
trols) που βρίσκονται διατεταγµένα στην επιφάνεια της αναφοράς. Όσον αφορά τις
διαδικασίες που µπορούν να πραγµατοποιηθούν χρησιµοποιώντας αυτά τα δύο
menus, αυτές σε γενικές γραµµές είναι οι ακόλουθες:
Σχήµα 170 : Menu επιλογών για τις ενότητες και τα πλαίσια ελέγχου της αναφοράς
Αλλαγή σε: η επιλογή αυτή εφαρµόζεται σε πεδίο της αναφοράς και προκα-
λεί το µετασχηµατισµό του σε πεδίο διαφορετικού τύπου. Θα πρέπει να σηµειωθεί
ωστόσο, πως ο νέος τύπος πεδίου θα πρέπει να είναι συµβατός µε τον τρέχοντα τύπο
για αυτό το πεδίο. Για παράδειγµα, ένα πλαίσιο κειµένου, µπορεί να µετατραπεί
µόνο σε ετικέτα, πλαίσιο λίστας ή σύνθετο πλαίσιο.
Αντιγραφή, αποκοπή και επικόλληση (copy, cut, paste): οι τρεις αυτές επι-
λογές χρησιµοποιούνται για την αντιγραφή ή µετακίνηση του επιλεγµένου πεδίου
σε κάποιο άλλο σηµείο της αναφοράς και µπορούν να εφαρµοσθούν τόσο σε ένα
απλό πεδίο, όσο και σε µια ολόκληρη οµάδα επιλεγµένων πεδίων.
Στοίχιση και Μέγεθος: οι επιλογές αυτές επιτρέπουν τον καθορισµό της θέ-
σης και του µεγέθους των επιλεγµένων πεδίων πάνω στην επιφάνεια της τρέχουσας
αναφοράς.
Χρησιµοποιώντας αυτό το πλαίσιο, µπορούµε για κάθε ένα από τα πεδία της
αναφοράς να καθορίσουµε την ταξινόµηση των τιµών του καθώς και τα χαρα-
κτηριστικά της οµαδοποίησης που θα εφαρµόσουµε σε αυτές. Η ταξινόµηση των
πεδίων µπορεί να γίνει τόσο κατά αύξουσα όσο και κατά φθίνουσα σειρά, ενώ όσον
αφορά την οµαδοποίηση, αυτή διαµορφώνεται δια του καθορισµού των ακόλουθων
πληροφοριών:
τον κατάλογο πεδίων που εµφανίζεται στο επάνω µέρος του πλαισίου διαλό-
γου του προηγούµενου σχήµατος. Όσον αφορά το είδος της οµαδοποίησης
αυτή σε γενικές γραµµές χαρακτηρίζεται από τους ακόλουθους κανόνες:
Εάν ο τύπος του πεδίου είναι κείµενο (text), η οµαδοποίηση µπορεί να γίνει
είτε ως προς την κάθε τιµή του πεδίου (each value) – αυτή είναι η προεπι-
λεγµένη τιµή της ιδιότητας για όλους τους τύπους πεδίων – είτε ως προς ένα
σύνολο χαρακτήρων που θα εµφανίζονται µπροστά από την τιµή του πε-
δίου (prefix). Αντίθετα, στην περίπτωση κατά την οποία το εν λόγω πεδίο εί-
ναι πεδίο ηµεροµηνίας ή ώρας (Date/Time), η ταξινόµησή του µπορεί να γί-
νει ανά µήνα (month), ανά έτος (year), ανά τρίµηνο (qtr), ανά εβδοµάδα
(week), ανά ηµέρα (day), ανά ώρα (hour) και ανά λεπτό (minute). Τέλος
στην περίπτωση κατά την οποία ο τύπος δεδοµένων είναι αυτόµατη αρίθ-
µηση (autonumber), αριθµός (number) ή αριθµητική µονάδα (currency) η
οµαδοποίηση των εγγραφών µπορεί να γίνει ανά διάστηµα τιµών, µε εύρος
του εν λόγω διαστήµατος να καθορίζεται από το χρήστη.
Εάν το πεδίο είναι πεδίο κειµένου (text) και ο τύπος οµαδοποίησης που έχει
επιλεγεί είναι δια της χρήσης κάποιου προθέµατος (prefix), εδώ καθορίζουµε
το µήκος του προθέµατος σε χαρακτήρες. Για παράδειγµα εάν στο πεδίο
αυτό θέσουµε την τιµή 3, αυτό σηµαίνει πως η ταξινόµηση των τιµών του πε-
δίου θα λάβει χώρα µε βάση τους τρεις πρώτους χαρακτήρες που περιέχο-
νται σε αυτές. Αντίθετα εάν ο τύπος δεδοµένων του πεδίου είναι ηµεροµηνία
και ώρα (date/time), εδώ καθορίζουµε το πλήθος των χρονικών µονάδων
ως προς τις οποίες έχουµε ζητήσει να γίνεται η οµαδοποίηση. Έτσι εάν
στην προηγούµενη ιδιότητα ζητήσαµε να γίνεται οµαδοποίηση ανά εβδο-
µάδα, η απόδοση στην τρέχουσα ιδιότητα τιµής ίσης µε 2, θα επιβάλλει την
οµαδοποίηση των δεδοµένων της αναφοράς ανά δύο εβδοµάδες. Αντίθετα,
εάν στην προηγούµενη ιδιότητα ζητήσαµε να γίνεται οµαδοποίηση ανά ώρα,
η καταχώρηση της τιµής 12 στην εν λόγω ιδιότητα επιβάλλει την οµαδοποί-
ηση των δεδοµένων ανά 12 ώρες. Ας σηµειωθεί πως σε πλήρη αναλογία µε
την προηγούµενη περίπτωση, η προεπιλεγµένη τιµή για την εν λόγω ιδιότητα
είναι οµαδοποίηση για κάθε τιµή ξεχωριστά, χαρακτηριστικό που ισχύει για
όλους τους τύπους πεδίων.
σε περισσότερες σελίδες, και µπορεί να λάβει µία από τις τρεις επόµενες τι-
µές:
1. Όχι (No): η τιµή αυτή – που είναι και η προεπιλεγµένη – προκαλεί την
εκτύπωση της κάθε οµάδας χωρίς να ενδιαφέρεται για το εάν η κεφα-
λίδα, το κυρίως τµήµα και το υποσέλιδο της οµάδας µπορούν να εκτυ-
πωθούν στην ίδια σελίδα.
Σχήµα 172 : Βοηθητικά εργαλεία για την προσθήκη νέων πεδίων στην επιφάνεια της αναφοράς
γορία που φέρει το όνοµα «Άλλα» (Other Properties) επιτρέπει τον καθορισµό ιδιο-
τήτων που δεν µπορούν να τοποθετηθούν σε κάποια από τις προηγούµενες κατηγο-
ρίες. Για κάθε µια από αυτές τις τέσσερις κατηγορίες ιδιοτήτων, υπάρχει µια αντί-
στοιχη σελίδα στο φύλλο ιδιοτήτων του στοιχείου που χρησιµοποιούµε, ενώ, µία πέ-
µπτη σελίδα που φέρει τον τίτλο «Όλα» (All Properties) εµφανίζει το σύνολο των
ιδιοτήτων που συσχετίζονται µε το τρέχον στοιχείο επεξεργασίας. Η αναλυτική περι-
γραφή του συνόλου των ιδιοτήτων που µπορούµε να καθορίσουµε για τις αναφορές
της Microsoft Access, αποτελεί το αντικείµενο των σελίδων που ακολουθούν.
Η διαδικασία καθορισµού των ιδιοτήτων για κάθε µια από τις ενότητες που
περιλαµβάνονται στην τρέχουσα αναφορά, λαµβάνει χώρα δια της χρήσης του πλαι-
σίου διαλόγου που παρουσιάζεται στο επόµενο σχήµα. Προκειµένου να εµφανίσουµε
αυτό το πλαίσιο, θα πρέπει κατά τα γνωστά να χρησιµοποιήσουµε την επιλογή «Ιδιό-
τητες» από το αναδυόµενο menu επιλογών που εµφανίζεται εάν πατήσουµε το δεξί
πλήκτρο του ποντικιού σε οποιοδήποτε σηµείο της επιφάνειας της ενότητας. Όσον
αφορά το είδος των ιδιοτήτων που µπορούµε να καθορίσουµε στο στάδιο αυτό της
διαδικασίας, αυτές σε γενικές γραµµές είναι οι ακόλουθες:
Σχήµα 172 : Καθορισµός ιδιοτήτων για τις ενότητες της τρέχουσας αναφοράς
λίδα. Ας σηµειωθεί πως αυτή η ιδιότητα µπορεί να τεθεί µόνο για τις ενότη-
τες της αναφοράς στο σύνολό της, και όχι για την κεφαλίδα και το υποσέ-
λιδο της κάθε σελίδας ξεχωριστά. Όσον αφορά την τιµή που µπορεί να λάβει
αυτή η ιδιότητα – η οποία εναλλακτικά µπορεί να τεθεί δια της χρήσης µιας
µακροεντολής ή κώδικα σε γλώσσα Visual Basic – αυτή µπορεί να είναι κά-
ποια από τις ακόλουθες τιµές:
2. Πριν από Ενότητα (Before Section): χρησιµοποιώντας αυτή την τιµή επι-
βάλλουµε την εκτύπωση της τρέχουσας ενότητας, στην αρχή µιας νέας
σελίδας.
3. Μετά από Ενότητα (After Section): χρησιµοποιώντας αυτή την τιµή επι-
βάλλουµε την εκτύπωση της ενότητας που βρίσκεται αµέσως µετά την
τρέχουσα ενότητα, στην αρχή µιας νέας σελίδας.
4. Πριν & Μετά (Before & After): η τιµή αυτή επιβάλλει την εκτύπωση της
τρέχουσας ενότητας καθώς και εκείνης που ακολουθεί αµέσως µετά, στην
αρχή των δύο επόµενων σελίδων.
2. Πριν από Ενότητα (Before Section): η τιµή αυτή επιτρέπει την εκτύπωση
της τρέχουσας ενότητας σε µία νέα γραµµή ή σε µία νέα στήλη, ενώ η
επόµενη ενότητα εκτυπώνεται στην ίδια γραµµή ή στήλη µε την τρέχουσα
ενότητα.
3. Μετά από Ενότητα (After Section): η τιµή αυτή επιτρέπει την εκτύπωση
του περιεχοµένου της τρέχουσας ενότητας στην τρέχουσα γραµµή ή
στήλη, ενώ η επόµενη ενότητα εκτυπώνεται σε µια νέα γραµµή ή στήλη.
4. Πριν & Μετά (Before & After): η τιµή αυτή επιτρέπει την εκτύπωση της
τρέχουσας και της επόµενης ενότητας, σε ξεχωριστές γραµµές ή στήλες.
Αυτό µε άλλα λόγια σηµαίνει πως η τρέχουσα ενότητα θα εκτυπωθεί σε
µια νέα γραµµή ή στήλη, ενώ το ίδιο θα συµβεί και µε την αµέσως επό-
µενη ενότητα, η οποία και αυτή µε τη σειρά της θα εκτυπωθεί σε µία νέα
γραµµή ή στήλη.
• Ορατό (Visible Property): η ιδιότητα αυτή παίρνει µόνο τις τιµές «Ναι (Yes)»
και «Όχι (No)» και καθορίζει εάν η τρέχουσα ενότητα θα είναι ορατή ή όχι κατά
την προεπισκόπηση της τρέχουσας αναφοράς.
Εάν η ιδιότητα CanGrow λάβει την τιµή «Ναι (Yes)», λαµβάνει χώρα αύξηση
της κατακόρυφης διάστασης της τρέχουσας ενότητας έτσι ώστε να εµφανι-
στούν και να εκτυπωθούν όλα τα πεδία που περιλαµβάνονται σε αυτή. Στην αντί-
θετη περίπτωση, και εφ’ όσον η ενότητα περιέχει πεδία τα οποία δεν φαίνονται
στην οθόνη (επειδή δεν χωράνε στην επιφάνεια της ενότητας λόγω του µικρού
µεγέθους της) αυτά δεν εµφανίζονται αλλά ούτε και εκτυπώνονται κατά τη
διαδικασία προεπισκόπησης και εκτύπωσης της αναφοράς.
• Ύψος (Height Property): η ιδιότητα αυτή επιτρέπει τον καθορισµό του µεγέ-
θους της ενότητας της αναφοράς κατά την κατακόρυφη διάσταση. Ο καθορι-
σµός αυτός γίνεται δια της καταχώρησης στο εν λόγω πεδίο της επιθυµητής σε
κάθε περίπτωση αριθµητικής τιµής. Εάν η τιµή αυτή δεν συνοδεύεται από κά-
ποια µονάδα µέτρησης, χρησιµοποιείται εκείνη που έχει καθορισθεί κατά το στά-
διο εγκατάστασης των Microsoft Windows και χρησιµοποιώντας το εικονίδιο
Επίπεδο (Flat)
Υπερυψωµένο (Raised)
Βυθισµένο (Sunken)
• Φιλτράρισµα κατά (FilterOn Property): η ιδιότητα αυτή παίρνει µόνο τις τιµές
«Ναι (Yes)» και «Όχι (No)» και καθορίζει εάν το φίλτρο που έχει ορισθεί στην
προηγούµενη ιδιότητα, θα εφαρµοσθεί ή όχι πάνω στις εγγραφές του αντικειµένου
προέλευσης της τρέχουσας αναφοράς.
• Κατάταξη κατά (OrderBy Property): στην περίπτωση κατά την οποία τα δεδο-
µένα της αναφοράς επιθυµούµε να εκτυπώνονται ταξινοµηµένα, θα πρέπει να κα-
ταχωρήσουµε ως τιµή σε αυτή την ιδιότητα, το όνοµα του πεδίου του αντικειµέ-
νου προέλευσης ως προς το οποίο θέλουµε να λάβει χώρα αυτή η ταξινόµηση.
Για παράδειγµα εάν επιθυµούµε να λάβει χώρα ταξινόµηση των εγγραφών της
αναφοράς ΑΠΑΣΧΟΛΗΣΗ ως προς το όνοµα του έργου, θα πρέπει ως τιµή για
αυτή την ιδιότητα, να καταχωρήσουµε τη συµβολοσειρά «Project Name». Θα
πρέπει να σηµειωθεί πως η προεπιλεγµένη συµπεριφορά της εφαρµογής είναι η
ταξινόµηση των εγγραφών κατά την αύξουσα διάταξη. Εάν επιθυµούµε η ταξι-
νόµηση να πραγµατοποιηθεί κατά τη φθίνουσα διάταξη, θα πρέπει δίπλα από το
όνοµα του πεδίου να βάλουµε τη λέξη DESC (από την αγγλική λέξη Descend-
ing). Έτσι, για να ταξινοµήσουµε τις εγγραφές της αναφοράς ως προς τις ώρες
απασχόλησης και κατά τη φθίνουσα διάταξη, θα καταχωρήσουµε στην ιδιότητα
αυτή την τιµή HOURS DESC. Τέλος είναι σηµαντικό να αναφερθεί, πως η ταξι-
νόµηση των εγγραφών της αναφοράς µπορεί να γίνει ως προς περισσότερα από
ένα πεδία. Για να το κάνουµε αυτό θα πρέπει να καταχωρήσουµε σε αυτή την
ιδιότητα, τα ονόµατα όλων αυτών των πεδίων χωρισµένα µε κόµµα. Έτσι η
καταχώρηση της τιµής HOURS DESC, Project Name σε αυτή την ιδιότητα, έχει
ως αποτέλεσµα την ταξινόµηση των εγγραφών της αναφοράς, πρώτα ως προς τις
ώρες εργασίας και έπειτα ως προς το όνοµα του έργου. Η ύπαρξη δε της συµ-
βολοσειράς DESC, έχει ως αποτέλεσµα την ταξινόµηση των εγγραφών ως προς
τις ώρες εργασίας ανά εβδοµάδα, κατά τη φθίνουσα διάταξη.
της εκτύπωσης µιας αναφοράς. Οι τιµές που µπορεί να λάβει αυτή η ιδιότητα
είναι οι εξής:
1. Χωρίς κλειδώµατα (No Locks): η τιµή αυτή που είναι και η προεπιλεγ-
µένη επιτρέπει την προεπισκόπηση ή την εκτύπωση της αναφοράς χωρίς
να λαµβάνεται µέριµνα για την προστασία των εγγραφών του αντικει-
µένου προέλευσης.
2. Όλες οι εγγραφές (All Records): η χρήση αυτής της τιµής στη συγκεκρι-
µένη ιδιότητα, προκαλεί το κλείδωµα όλων των εγγραφών του αντικει-
µένου προέλευσης, από το οποίο η αναφορά παίρνει δεδοµένα. Αυτό
σηµαίνει πως κατά τη διάρκεια της προεπισκόπησης ή της εκτύπωσης της
αναφοράς, δεν είναι δυνατή η προσθήκη, διαγραφή και τροποποίηση
εγγραφών των πινάκων που συσχετίζονται µε την τρέχουσα αναφορά.
Αντίθετα, αυτού του είδος οι διαδικασίες µπορούν να πραγµατοποιηθούν
µόνο όταν έχει ολοκληρωθεί η διαδικασία της προεπισκόπησης ή εκτύπω-
σης.
1. Όλες οι σελίδες (All Pages): στην περίπτωση αυτή (που είναι και η
προεπιλεγµένη) η κεφαλίδα (ή το υποσέλιδο) σελίδας θα εκτυπωθεί σε
όλες τις σελίδες της τρέχουσας αναφοράς.
2. Χωρίς κεφαλίδα έκθεσης (Not With Rpt Hdr): στην περίπτωση αυτή η
κεφαλίδα (ή το υποσέλιδο) σελίδας δεν εκτυπώνεται στην ίδια σελίδα µε
την κεφαλίδα της αναφοράς.
3. Χωρίς υποσέλιδο έκθεσης (Not With Rpt Ftr): στην περίπτωση αυτή η
κεφαλίδα (ή το υποσέλιδο) σελίδας δεν εκτυπώνεται στην ίδια σελίδα µε
το υποσέλιδο της αναφοράς, το οποίο εκτυπώνεται σε µία ξεχωριστή σε-
λίδα.
4. Χωρίς κεφαλίδα και υποσέλιδο έκθεσης (Not With Rpt Hdr/Ftr): στην
περίπτωση αυτή η κεφαλίδα (ή το υποσέλιδο) σελίδας δεν θα εκτυπωθεί
σε µία σελίδα, εάν στη σελίδα αυτή πρόκειται να εκτυπωθεί η κεφαλίδα ή
το υποσέλιδο της αναφοράς. Όσον αφορά το υποσέλιδο της αναφοράς,
αυτό εκτυπώνεται σε µία νέα σελίδα.
1. Ανά σελίδα (Per Page): η χρήση αυτής της τιµής επιβάλλει την εκτύπωση
όλων των δεδοµένων µιας οµάδας στην ίδια σελίδα της αναφοράς
2. Ανά στήλη (Per Column): η χρήση αυτής της τιµής επιβάλλει την εκτύ-
πωση όλων των δεδοµένων µιας οµάδας στην ίδια στήλη της αναφοράς.
• Πλάτος (Height Property): η ιδιότητα αυτή επιτρέπει τον καθορισµό του πλά-
τους της αναφοράς και εφαρµόζεται µόνο στην αναφορά, στο σύνολό της, και
όχι στις µεµονωµένες ενότητες που περιέχονται σε αυτή. Η τιµή που καταχωρεί-
ται στην εν λόγω ιδιότητα είναι το πλάτος της αναφοράς σε εκατοστά, αν και
είναι δυνατή η χρήση οποιασδήποτε µονάδας µέτρησης (στην περίπτωση αυτή, το
όνοµα αυτής της µονάδας θα πρέπει να καταχωρηθεί αµέσως µετά την τιµή του
πλάτους της αναφοράς).
• Εικόνα (Picture Property): η τιµή αυτής της ιδιότητας είναι το όνοµα και η δια-
δροµή ενός αρχείου εικόνας η οποία θα χρησιµοποιηθεί ως εικόνα φόντου
(background picture) στην τρέχουσα αναφορά. Αυτό το αρχείο µπορεί να ανήκει
σε κάποιους από τους γνωστούς τύπους αρχείων γραφικών (BMP, GIF, JPG,
κλπ) και ο καθορισµός του γίνεται δια της χρήσης του κατάλληλου πλαισίου δια-
λόγου.
Από την περιγραφή του τρόπου λειτουργίας του προγράµµατος για κάθε µία από
αυτές τις δύο τιµές, είναι προφανές πως ένα οποιοδήποτε αντικείµενο (και όχι
µόνο ένα αρχείο εικόνας) µπορεί να χρησιµοποιηθεί από τις εφαρµογές που εκτε-
λούνται µέσα από τα λειτουργικά συστήµατα της οικογένειας των Microsoft
Windows, µε δύο διαφορετικούς τρόπους. Ο πρώτος τρόπος περιλαµβάνει την
ενσωµάτωση του αντικειµένου στην εφαρµογή. Αυτό σηµαίνει πως το αντικεί-
µενο γίνεται αναπόσπαστο τµήµα του προγράµµατος, και εποµένως, το συνο-
λικό µέγεθος της εφαρµογής αυξάνεται κατά το µέγεθος του αρχείου που πε-
ριέχει αυτό το αντικείµενο. Το προφανές µειονέκτηµα αυτής της µεθόδου, είναι
πως εάν λάβει χώρα τροποποίηση του αντικειµένου (για παράδειγµα αλλαγή
των χρωµάτων µιας εικόνας) αυτό θα πρέπει να ενσωµατωθεί εκ νέου στην
εφαρµογή, αντικαθιστώντας το παλαιότερο στιγµιότυπό του.
Από την άλλη πλευρά, η διαδικασία της σύνδεσης του αντικειµένου, δεν ενσω-
µατώνει το αντικείµενο στην εφαρµογή αλλά δηµιουργείται και διατηρείται
ένας δείκτης (pointer) προς το αρχείο του συστήµατος που περιέχει το αντι-
κείµενο που θέλουµε να χρησιµοποιήσουµε. Αυτός ο τρόπος χρήσης του αντι-
κειµένου, δεν παρουσιάζει τα µειονεκτήµατα που χαρακτηρίζουν την ενσωµά-
τωσή του, καθώς ούτε το µέγεθος της εφαρµογής αυξάνεται, αλλά ούτε και
απαιτείται συνεχής ενηµέρωση του αντικειµένου (αφού ο δείκτης θα αναφέ-
ρεται κάθε φορά στο σωστό αρχείο). Το προφανές µειονέκτηµα αυτής της µεθό-
δου είναι πως µαζί µε το κύριο αρχείο της εφαρµογής θα πρέπει να διατη-
ρούµε κάθε φορά και όλα τα αρχεία των οποίων τα αντικείµενα χρησιµο-
ποιούνται από την εφαρµογή µας δια της χρήσης του µηχανισµού της σύνδε-
σης. Αυτές οι δύο εναλλακτικές προσεγγίσεις όσον αφορά τη χρήση ενός αντικει-
µένου συνιστούν την τεχνολογία OLE (Object Linking and Embedding) και
εκείνη που χρησιµοποιείται σε κάθε περίπτωση εξαρτάται από πολλούς παράγο-
ντες, όπως είναι για παράδειγµα οι ανάγκες που πρόκειται να καλύψει. Περισσό-
τερες λεπτοµέρειες για την τεχνολογία OLE µπορούν να βρεθούν στη βιβλιογρα-
φία.
1. Όλες οι σελίδες (All Pages): η τιµή αυτή (που είναι και η προεπιλεγµένη)
έχει ως αποτέλεσµα την εµφάνιση της εικόνας φόντου σε όλες τις σελίδες της
αναφοράς.
2. Πρώτη Σελίδα (First Page): η τιµή αυτή έχει ως αποτέλεσµα την εµφάνιση
της εικόνας φόντου µόνο στην πρώτη σελίδα της αναφοράς.
3. Καµία Σελίδα (No Pages): η τιµή αυτή έχει ως αποτέλεσµα την προεπισκό-
πηση ή την εκτύπωση των σελίδων της αναφοράς χωρίς την εµφάνιση της ει-
κόνας φόντου.
• Πλέγµα Χ και Πλέγµα Υ (GridX & GridY Properties): όπως έχει ήδη αναφερ-
θεί σε προηγούµενη ενότητα, ένα από τα βασικά εργαλεία του χρήστη για την
επεξεργασία της αναφοράς σε προβολή σχεδίασης, είναι το πλέγµα (grid), το
οποίο χρησιµοποιείται για τη στοίχιση των στοιχείων ελέγχου πάνω στην επι-
φάνεια της αναφοράς. Οι τιµές που καταχωρούµε σε αυτές τις δύο ιδιότητες
αντιστοιχούν στον αριθµό των υποδιαιρέσεων ανά µονάδα µέτρησης κατά την
οριζόντια (GridX) και κατακόρυφη (GridY) διεύθυνση αυτού του πλέγµατος
και θα πρέπει να ανήκουν στο διάστηµα [1,64]. Είναι προφανές πως η χρήση µε-
γάλων τιµών σε αυτές τις δύο ιδιότητες, προκαλεί την αύξηση της διακριτικής
ικανότητας όσον αφορά την στοίχιση των στοιχείων ελέγχου στην επιφάνεια της
τρέχουσας αναφοράς.
Η κάθε µια από τις ενέργειες που µπορούµε να χρησιµοποιήσουµε για την αλ-
ληλεπίδρασή µας µε την εφαρµογή, καλείται µε το δικό της ιδιαίτερο τρόπο, και
µε τον κατάλληλο σε κάθε περίπτωση αριθµό ορισµάτων. Για παράδειγµα, µπο-
ρούµε να σχεδιάσουµε την εφαρµογή µε τέτοιο τρόπο, ώστε κάθε φορά που ο χρή-
στης προσπαθεί να εκτελέσει µία διαδικασία η οποία δεν είναι επιτρεπτή, να δη-
µιουργείται ένα ηχητικό µήνυµα (beep message). Όπως θα δούµε σε επόµενη ενότη-
τα, αυτή η ενέργεια καλείται απλά µε το όνοµά της, και χωρίς να χρειάζεται να καθο-
ρίσουµε κάποιο όρισµα, αφού το µόνο που κάνει είναι να παράγει κάποιο ήχο. Αντί-
θετα, η ενέργεια που θα καλέσουµε για να ανοίξουµε ή να κλείσουµε µία φόρµα, θα
πρέπει να συνοδεύεται από ένα τουλάχιστον όρισµα, που είναι το όνοµα της φόρµας
που θέλουµε να ανοίξουµε ή να κλείσουµε. Σε άλλες πάλι περιπτώσεις, θα πρέπει να
χρησιµοποιήσουµε µεγαλύτερο αριθµό ορισµάτων. Έτσι εάν ζητήσουµε από το πρό-
γραµµα να µας µεταφέρει σε κάποια εγγραφή, θα πρέπει να καθορίσουµε τουλάχι-
στον τρεις παραµέτρους: (α) τον τύπο του αντικειµένου του οποίου την εγγραφή
θέλουµε να προσπελάσουµε (αυτό το αντικείµενο µπορεί να είναι πίνακας ή ερώ-
τηµα), το όνοµα του πίνακα ή του ερωτήµατος που θα χρησιµοποιήσουµε (π.χ.
τον πίνακα EMPLOYEE) και τη θέση της εγγραφής στην οποία θέλουµε να µε-
ταφερθούµε (π.χ. η πρώτη ή η τελευταία εγγραφή). Εποµένως ανάλογα µε τη φύση
της διαδικασίας που επιθυµούµε να χρησιµοποιήσουµε, θα πρέπει να καθορίσουµε
και τον κατάλληλο σε κάθε περίπτωση αριθµό ορισµάτων.
Κεφάλαιο 13 : Μακροεντολές 304
Μια µακροεντολή δεν είναι τίποτε άλλο από ένα σύνολο διαδικασιών οι ο-
ποίες εκτελούνται όλες µαζί σε ένα και µόνο βήµα, ως µια απλή εντολή. Στηριζό-
µενοι σε αυτόν τον ορισµό, µπορούµε να διατυπώσουµε τον ισχυρισµό πως οι µα-
κροεντολές της Microsoft Access είναι παρόµοιες µε τα αρχεία δέσµης (batch
files) του λειτουργικού συστήµατος MS-DOS. Η βασική δοµή αυτών των αρχείων,
περιλαµβάνει ένα σύνολο εντολών του λειτουργικού συστήµατος, τις οποίες το
λειτουργικό εκτελεί σε ένα και µοναδικό βήµα, και χωρίς να απαιτείται παρέµ-
βαση του χρήστη. Με τον ίδιο ακριβώς τρόπο, µια µακροεντολή αποτελείται από ένα
σύνολο εντελώς συγκεκριµένων διαδικασιών, οι οποίες εκτελούνται σε ένα και µόνο
βήµα, και ως µία απλή εντολή. Το βασικό πλεονέκτηµα αυτών των δοµών είναι πως
κατασκευάζονται πολύ εύκολα, και υπό αυτή την έννοια διευκολύνουν σηµαντικά
τόσο τον προγραµµατιστή (όσον αφορά την ανάπτυξη της εφαρµογής) όσο και τον
τελικό χρήστη (όσον αφορά την αλληλεπίδρασή του µε το πρόγραµµα). Οι βασικές
αρχές δηµιουργίας και διαχείρισης των µακροεντολών µέσα από το περιβάλλον της
Microsoft Access, αποτελούν το αντικείµενο των σελίδων που ακολουθούν.
Σχήµα 176: Οι τρεις βασικές περιοχές του κεντρικού παραθύρου δηµιουργίας µακροεντολών
Από το παραπάνω σχήµα διαπιστώνουµε πως για κάθε µια από τις ενέργειες
που περιλαµβάνονται σε κάθε µακροεντολή, έχουµε τη δυνατότητα να καταχω-
ρήσουµε κάποιο όνοµα, και να ορίσουµε και κάποια συνθήκη, η οποία θα καθο-
ρίσει και τις προϋποθέσεις κάτω από τις οποίες θα εκτελεστεί η συγκεκριµένη
ενέργεια. Εναλλακτικά µπορούµε να ορίσουµε αυτό το όνοµα όχι µόνο για µία ενέρ-
γεια, αλλά για µία οµάδα ενεργειών οι οποίες χαρακτηρίζονται από κάποιο είδος λο-
γικής συσχέτισης. Στο παράδειγµα του παραπάνω σχήµατος, χρησιµοποιείται το όνο-
µα Add Products για να περιγράψει την οµάδα ενεργειών «Αντήχηση», «Κλείσι-
µο», «Άνοιγµα Φόρµας», «Ορισµός Τιµής» και «Μετάβαση σε στοιχείο ελέγχου».
Από την άλλη πλευρά, η συνθήκη που καταχωρούµε στο παραπάνω πλαίσιο, επιτρέ-
πει την εκτέλεση κάποιας ενέργειας, µόνο όταν ικανοποιούνται κάποιες προϋπο-
θέσεις. Στο παράδειγµα του σχήµατος, η ενέργεια «Πλαίσιο Μηνύµατος» θα εκτε-
λεστεί, µόνο όταν ικανοποιείται η συνθήκη IsNull([SupplierID]). Αλλά η ισχύς αυ-
τής της συνθήκης υφίσταται µόνο όταν η φόρµα προµηθευτών δεν περιέχει κανένα
προµηθευτή. Εποµένως σύµφωνα µε τις προδιαγραφές της µακροεντολής, οι ενέρ-
γειες που περιλαµβάνονται στην οµάδα «Review Products» θα εκτελεστούνε µόνο
όταν υπάρχουν προµηθευτές, ενώ στην αντίθετη περίπτωση, η µακροεντολή θα εκτυ-
πώσει ένα ενηµερωτικό µήνυµα και θα τερµατίσει τη λειτουργία της.
3. Όνοµα φίλτρου (Filter Name): στην περίπτωση κατά την οποία δεν επιθυ-
µούµε να εµφανίσουµε όλες τις εγγραφές της αναφοράς, αλλά µόνο εκείνες
που ικανοποιούν κάποιες συνθήκες, µπορούµε να καταχωρήσουµε ως τιµή
σε αυτή την παράµετρο, το όνοµα ενός ερωτήµατος (query) ή ενός φίλτρου
(filter) που έχει αποθηκευθεί ως ερώτηµα. Θα πρέπει να σηµειωθεί ωστόσο
πως αυτό το ερώτηµα θα πρέπει να είναι έτσι σχεδιασµένο, ώστε να επιστρέ-
φει όλα τα πεδία τα οποία περιλαµβάνονται στην τρέχουσα αναφορά.
4. Συνθήκη «Όπου» (Where Condition): στην περίπτωση κατά την οποία επι-
θυµούµε να χρησιµοποιήσουµε ένα φίλτρο για να περιορίσουµε τα δεδοµένα
που θα εµφανιστούν στην τρέχουσα αναφορά, µπορούµε να χρησιµοποιήσου-
µε αυτή την παράµετρο για να περιορίσουµε τις εγγραφές του πίνακα ή του
ερωτήµατος από το οποίο η αναφορά παίρνει δεδοµένα. Η τιµή που κατα-
χωρούµε σε αυτή την παράµετρο είναι µια συµβολοσειρά παρόµοια µε εκείνη
που χαρακτηρίζει την πρόταση WHERE της εντολής SELECT της γλώσσας
SQL. Ωστόσο, στην προκειµένη περίπτωση, η λέξη WHERE δεν καταχω-
ρείται, αφού υπονοείται. Έτσι εάν επιθυµούµε να εµφανίσουµε την αναφορά
ΑΠΑΣΧΟΛΗΣΗ αλλά µόνο για εκείνες τις εγγραφές που αφορούν το Re-
search Department, θα πρέπει ως τιµή σε αυτή την παράµετρο να χρησιµο-
ποιήσουµε τη συµβολοσειρά DName=”Research”.
Περισσότερες λεπτοµέρειες για τις λειτουργικές µονάδες και τον τρόπο µε τον
οποίο αυτές χρησιµοποιούνται παρουσιάζονται στο οµώνυµο κεφάλαιο.
1. Όνοµα πίνακα (Table Name): η παράµετρος αυτή περιέχει το όνοµα του πί-
νακα τον οποίο θέλουµε να ανοίξουµε.
• Όνοµα φόρµας (Form Name): η παράµετρος αυτή δέχεται ως τιµή µια συµβολο-
σειρά που περιέχει το όνοµα της φόρµας που επιθυµούµε να χρησιµοποιήσου-
µε.
2. Όνοµα φίλτρου (Filter Name): στην περίπτωση κατά την οποία επιθυµούµε
να περιορίσουµε ή να ταξινοµήσουµε τις εγγραφές της φόρµας, µπορούµε
να καταχωρήσουµε σε αυτή την παράµετρο µία συµβολοσειρά, η οποία περιέ-
χει το όνοµα κάποιου ερωτήµατος (query) ή κάποιου φίλτρου (filter) που
έχει αποθηκευτεί ως ερώτηµα. Ωστόσο το φίλτρο ή το ερώτηµα θα πρέπει
να είναι έτσι σχεδιασµένο ώστε να επιστρέφει όλα τα πεδία που περιλαµβάνο-
νται στην τρέχουσα φόρµα.
2. Νέο όνοµα (New Name): η παράµετρος αυτή επιτρέπει τον καθορισµό του
ονόµατος για το αντίγραφο του αντικειµένου που πρόκειται να δηµιουρ-
γήσουµε. Εάν αυτό το αντίγραφο δηµιουργηθεί σε βάση δεδοµένων διαφορε-
τική από την τρέχουσα, µπορούµε να µην καταχωρήσουµε τίποτε σε αυτή την
παράµετρο, έτσι ώστε να προκαλέσουµε την αντιγραφή του αντικειµένου
χρησιµοποιώντας το ίδιο όνοµα. Είναι προφανές πως εάν το αντίγραφο του
αντικειµένου δηµιουργηθεί στην ίδια βάση δεδοµένων µε αυτή που περιέ-
χει το αρχικό αντικείµενο, θα πρέπει να καθορίσουµε ένα διαφορετικό ό-
νοµα. Στην αντίθετη περίπτωση η Microsoft Access θα εµφανίσει ένα µήνυµα
λάθους και θα διακόψει την εκτέλεση της µακροεντολής.
7. Κείµενο µηνύµατος (Message Text): στην περίπτωση κατά την οποία επιθυ-
µούµε εκτός από το επιλεγµένο αντικείµενο να αποστείλουµε και κάποιο κεί-
µενο (για παράδειγµα ορισµένα διευκρινιστικά σχόλια όσον αφορά το ρόλο
και τα περιεχόµενα του αντικειµένου), µπορούµε να καταχωρήσουµε αυτό το
κείµενο ως τιµή σε αυτή την παράµετρο. Στην αντίθετη περίπτωση το αντι-
κείµενο θα αποσταλεί χωρίς να συνοδεύεται από κάποιο κείµενο.
9. Αρχείο προτύπου (Template File): στην περίπτωση κατά την οποία επιθυ-
µούµε να στείλουµε κάποιο αντικείµενο διαµορφωµένο ως ιστοσελίδα
(HTML format), µπορούµε να χρησιµοποιήσουµε αυτή την παράµετρο για
να καθορίσουµε το όνοµα και τη διαδροµή ενός αρχείου προτύπου (tem-
plate file) µε τη βοήθεια του οποίου θα λάβει χώρα η διαµόρφωση του περιε-
χοµένου της ιστοσελίδας.
2. Αναµονή (Wait): η παράµετρος αυτή δέχεται µόνο τις τιµές «Ναι (Yes)» και
«Όχι (No)» και καθορίζει εάν η θα λάβει χώρα αναστολή (suspension) της
εκτέλεσης της µακροεντολής µέχρι την ολοκλήρωση της επεξεργασίας των
χαρακτήρων που έχουν αποσταλεί. Η προεπιλεγµένη τιµή αυτής της παραµέ-
τρου είναι η τιµή «Όχι».
γειας (action query) µέσα από την τρέχουσα µακροεντολή. Η χρήση αυτής της
ενέργειας απαιτεί τον καθορισµό των επόµενων δύο παραµέτρων:
Είναι σηµαντικό να αναφέρουµε πως η χρήση αυτής της ενέργειας για την εκτέ-
λεση κάποιας πρότασης SQL λαµβάνει χώρα µόνο όταν η πρόταση SQL αναφέ-
ρεται σε ένα ερώτηµα ενέργειας (action query) ή σε κάποιο ερώτηµα ορισµού
δεδοµένων (data definition query). Από αυτές τις δύο κατηγορίες ερωτηµάτων,
τα ερωτήµατα ενέργειας επιτρέπουν την καταχώρηση, διαγραφή και τροπο-
ποίηση των δεδοµένων των πινάκων της βάσης, ενώ τα ερωτήµατα ορισµού
δεδοµένων επιτρέπουν τη δηµιουργία και διαγραφή στοιχείων της βάσης,
όπως είναι οι πίνακες και οι δείκτες. Αντίθετα, εάν η πρόταση SQL που θέλου-
µε να χρησιµοποιήσουµε αναφέρεται σε ερώτηµα επιλογής (select query) ή ε-
ρώτηµα διασταύρωσης (crosstab query), δεν θα χρησιµοποιήσουµε την ενέρ-
γεια αυτή, αλλά την ενέργεια «Άνοιγµα Ερωτήµατος (OpenQuery Action)» που
έχει περιγραφεί σε προηγούµενη ενότητα.
• Όλο (All): η χρήση αυτής της τιµής επιτρέπει την εκτύπωση του συ-
νόλου των σελίδων του ενεργού αντικειµένου.
• Επιλογή (Selection): χρησιµοποιώντας αυτή την τιµή µπορούµε να
εκτυπώσουµε µόνο το τµήµα του αντικειµένου που έχει επιλεγεί (µε
το πληκτρολόγιο ή µε το ποντίκι).
2. Από σελίδα (Page From) και Έως σελίδα (Page To): στην περίπτωση κατά
την οποία καταχωρήσαµε στην παράµετρο Print Range την τιµή Pages, θα
πρέπει να χρησιµοποιήσουµε αυτές τις δύο τιµές για να καθορίσουµε την
αρχική και την τελική σελίδα εκτύπωσης. Στην περίπτωση αυτή η εκτύπω-
ση θα ξεκινήσει από την αρχή της αρχικής σελίδας, και θα ολοκληρωθεί στο
τέλος της τελικής σελίδας.
5. Συρραφή αντιτύπων (Collate Copies): στην περίπτωση κατά την οποία επι-
θυµούµε να εκτυπώσουµε περισσότερα από ένα αντίτυπα του ενεργού αντι-
κειµένου και η εκτύπωση του κάθε ενός από αυτά επεκτείνεται σε περισσότε-
ρες από µία σελίδες, µπορούµε να καθορίσουµε εάν για κάθε αντίτυπο θα
εκτυπώνεται το σύνολο των σελίδων του πριν την έναρξη της διαδικασίας
εκτύπωσης του άλλου αντιτύπου, ή εάν θα λαµβάνει χώρα εκτύπωση ό-
λων των αντιτύπων της κάθε σελίδας. Ο καθορισµός αυτής της παραµέτρου,
γίνεται δια της χρήσης του ορίσµατος Collate Copies, το οποίο παίρνει µία
από τις τιµές «Ναι (Yes)» και «Όχι (No)». Για να κατανοήσουµε καλύτερα
αυτή τη διαδικασία, ας υποθέσουµε πως θέλουµε να εκτυπώσουµε τρία αντί-
γραφα µιας αναφοράς, η οποία εκτείνεται σε τέσσερις σελίδες. Εάν αποδώ-
σουµε στην παράµετρο Collate Copies την τιµή «Ναι», οι σελίδες θα εκτυ-
πωθούν µε τη σειρά 1,2,3,4 (για το πρώτο αντίγραφο), 1,2,3,4 (για το δεύ-
τερο αντίγραφο) και 1,2,3,4 (για το τρίτο αντίγραφο). Αντίθετα, εάν στην
παράµετρο αυτό αποδώσουµε την τιµή «Όχι», η σειρά εκτύπωσης των σελί-
δων θα είναι 1,1,1,2,2,2,3,3,3,4,4,4. Είναι προφανές πως από τις δύο αυτές
σειρές εκτύπωσης θα επιλέξουµε την πρώτη, καθώς στη δεύτερη περίπτωση
θα πρέπει να οµαδοποιήσουµε τις σελίδες έτσι ώστε να σχηµατίσουµε τα τρία
αντίτυπα του εγγράφου.
3. Έξοδος (Exit): η τιµή αυτή της παραµέτρου επιβάλλει στη Microsoft Access
να τερµατίσει τη λειτουργία της χωρίς να αποθηκεύσει κανένα αντικείµε-
νο της βάσης, και χωρίς να ρωτήσει το χρήστη εάν επιθυµεί ή όχι την αποθή-
κευση αυτών των αντικειµένων.
5. Αυτόµατη εκκίνηση (Auto Start): η παράµετρος αυτή παίρνει µία από τις
τιµές «Ναι (Yes)» και «Όχι (No)» και καθορίζει εάν µετά την αποθήκευση
του αρχείου θα λάβει χώρα εκκίνηση της εφαρµογής η οποία διαχειρίζε-
ται τον τύπο αρχείων που έχει καθορισθεί για το αρχείο εξόδου της συ-
γκεκριµένης ενέργειας. Εάν για παράδειγµα αποθηκεύσουµε τα περιεχόµενα
του επιλεγµένου αντικειµένου σε µορφή φύλλου δεδοµένων του Microsoft
Excel, και στο αρχείο sample.xls, η καταχώρηση της τιµής «Ναι» σε αυτή την
παράµετρο, θα έχει ως αποτέλεσµα την εκκίνηση της εφαρµογής Microsoft
Excel και το άνοιγµα του αρχείου sample.xls µέσα από αυτή. Η προεπιλεγ-
µένη τιµή για αυτή την παράµετρο, είναι η τιµή «Όχι (No)».
6. Αρχείο προτύπου (Template File): στην περίπτωση κατά την οποία ο τύπος
του αρχείου εξόδου αυτής της ενέργειας είναι HTML, HTX ή ASP µπορούµε
να χρησιµοποιήσουµε αυτή την παράµετρο για να καθορίσουµε το όνοµα
και τη διαδροµή ενός αρχείου προτύπου (template file), το οποίο θα χρη-
σιµοποιηθεί για τη δηµιουργία του αρχείου εξόδου αυτών των συγκεκρι-
µένων τύπων αρχείων.
Η χρήση αυτής της ενέργειας απαιτεί τον καθορισµό του στοιχείου ελέγχου
(control name) του οποίου τα περιεχόµενα θέλουµε να ανανεώσουµε. Για να το
κάνουµε αυτό καταχωρούµε το όνοµα αυτού του στοιχείου στην οµώνυµη παρά-
µετρο (όνοµα στοιχείου ελέγχου, control name) που είναι και το µοναδικό όρι-
σµα που θα πρέπει να καθορίσουµε για αυτή την ενέργεια.
νακα στην οθόνη του υπολογιστή µας, και σε προβολή φύλλου δεδοµένων
(datasheet view). Ας σηµειωθεί, πως εφ’ όσον το αντικείµενο που θέλουµε να
εµφανίσουµε, δεν είναι ανοικτό, δεν µπορούµε να καταχωρήσουµε στην πα-
ράµετρο αυτή την τιµή «Όχι (No)» - εάν το κάνουµε, η Microsoft Access θα
εµφανίσει ένα µήνυµα λάθους, και θα τερµατίσει τη λειτουργία της µακροε-
ντολής.
1. Εύρεση του (Find What): η παράµετρος αυτή δέχεται ως όρισµα την τιµή του
δεδοµένου που επιθυµούµε να αναζητήσουµε στα αντικείµενα της βάσης.
Τυπικές τιµές που καταχωρούνται σε αυτή την παράµετρο είναι αριθµοί,
συµβολοσειρές και ηµεροµηνίες.
6. Μόνο στο τρέχον πεδίο (Only Current Field): η παράµετρος αυτή παίρνει
µία από τις τιµές «Ναι (Yes)» και «Όχι (No)», και καθορίζει εάν η διαδικα-
σία της αναζήτησης θα περιοριστεί µόνο στο πεδίο των εγγραφών του ε-
νεργού αντικειµένου το οποίο συµµετέχει στο κριτήριο αναζήτησης, η θα
επεκταθεί σε όλα τα πεδία Ας υποθέσουµε για παράδειγµα πως επιθυµούµε
να ανακτήσουµε όλες τις εγγραφές του πίνακα EMPLOYEE που ικανο-
ποιούν τη συνθήκη LNAME = «John». Εάν καταχωρήσουµε σε αυτή την πα-
ράµετρο την τιµή «Ναι», θα λάβει χώρα αναζήτηση της συµβολοσειράς
«John» µόνο στο πεδίο LNAME των εγγραφών του πίνακα EMPLOYEE.
Στην αντίθετη περίπτωση, αυτή η αναζήτηση θα επεκταθεί σε όλα τα πεδία
όλων των εγγραφών του πίνακα.
1. Όνοµα φίλτρου (Filter Name): η παράµετρος αυτή δέχεται ως τιµή µια συµ-
βολοσειρά που περιέχει το όνοµα του φίλτρου ή του ερωτήµατος που θα
εφαρµόσουµε πάνω στα δεδοµένα του αντικειµένου της βάσης.
Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό πως πριν εφαρµόσουµε την ε-
νέργεια ApplyFilter πάνω στις εγγραφές ενός αντικειµένου, θα πρέπει πρώτα
να επιλέξουµε αυτό το αντικείµενο. Αυτή η διαδικασία µπορεί να γίνει χρησιµο-
ποιώντας την ενέργεια «Επιλογή Αντικειµένου (SelectObject Action)» που πα-
ρουσιάσαµε σε προηγούµενες ενότητες.
• Ηχητικό σήµα (Beep Action): χρησιµοποιούµε την ενέργεια αυτή για να ανα-
παράγουµε ένα ηχητικό σήµα δια της χρήσης του µεγαφώνου (speaker) του
υπολογιστή. Η ενέργεια αυτή χρησιµοποιείται για να υποδηλώσει την ολοκλή-
ρωση κάποιας διαδικασίας ή την πραγµατοποίηση κάποιου σφάλµατος, και καλεί-
ται χωρίς ορίσµατα.
1. Θέση menu (Menu Index): η παράµετρος αυτή επιτρέπει τον καθορισµό της
θέσης του menu που περιέχει την επιλογή την οποία θέλουµε να διαµορ-
φώσουµε. Ο καθορισµός αυτής της θέσης γίνεται δια της χρήσης ενός ακέ-
ραιου αριθµού (που ξεκινά από το µηδέν) ο οποίος εκφράζει την απόσταση
του menu από την αρχή του κεντρικού menu της γραµµής εργαλείων που
συσχετίζεται µε το ενεργό παράθυρο της εφαρµογής.
2. Θέση εντολής (Command Index): µετά τον καθορισµό του menu επιλογών
που περιέχει την επιλογή που θέλουµε να διαµορφώσουµε, θα πρέπει να κα-
θορίσουµε και τη θέση της επιλογής µέσα σε αυτό το menu. Για να το κά-
νουµε αυτό θα πρέπει να καταχωρήσουµε στην παράµετρο αυτή µια ακέραια
τιµή που εκφράζει την απόσταση της συγκεκριµένης επιλογής από την αρ-
χή του menu επιλογών στο οποίο ανήκει.
• Όχι γκρίζο (Ungray): στην περίπτωση που η εντολή του menu είναι απε-
νεργοποιηµένη (disabled) µπορούµε να χρησιµοποιήσουµε αυτή την τιµή
που προκειµένου να την ενεργοποιήσουµε.
• Γκρίζο (Gray): στην περίπτωση κατά την οποία η εντολή του menu είναι
ενεργοποιηµένη (enabled), µπορούµε να επιλέξουµε αυτή την τιµή προ-
κειµένου να την απενεργοποιήσουµε.
• Ναι (Yes): η χρήση αυτής της τιµής επιβάλει την αποθήκευση των δεδο-
µένων του αντικειµένου της βάσης κατά τον τερµατισµό της λειτουργίας
του παραθύρου που συσχετίζεται µε αυτό.
• Όχι (No): η χρήση αυτής της τιµής τερµατίζει τη λειτουργία του επι-
λεγµένου παραθύρου, χωρίς να λάβει χώρα αποθήκευση των δεδοµέ-
νων του αντικειµένου που συσχετίζεται µε αυτό.
• Μετάβαση σε σελίδα (GoToPage Action): στην περίπτωση κατά την οποία ερ-
γαζόµαστε µε κάποια φόρµα η οποία χαρακτηρίζεται από την παρουσία περισσό-
τερων από µία σελίδων, µπορούµε να χρησιµοποιήσουµε την ενέργεια αυτή για
να µεταφέρουµε την εστίαση του συστήµατος στο πρώτο στοιχείο ελέγχου
που ανήκει σε κάποια συγκεκριµένη σελίδα. Ας υποθέσουµε για παράδειγµα
πως η φόρµα καταχώρησης στοιχείων για τους πελάτες µιας εταιρείας έχει
περισσότερες από µία σελίδες, κάθε µία εκ των οποίων περιέχει και κάποιο
είδος πληροφορίας, όπως είναι για παράδειγµα τα προσωπικά και οικονοµικά
στοιχεία του πελάτη, τα στοιχεία αγορών και πωλήσεων κ.ο.κ. Στην περίπτω-
ση αυτή µπορούµε να χρησιµοποιήσουµε αυτή την ενέργεια για να µεταφερθού-
µε σε κάποια συγκεκριµένη σελίδα. Η χρήση αυτής της ενέργειας, απαιτεί τον
καθορισµό των ακόλουθων πληροφοριών:
2. ∆εξιά (Right) και Κάτω (Down): σε περίπτωση κατά την οποία δεν θέλουµε
να εµφανίσουµε ολόκληρη τη σελίδα αλλά µόνο ένα µέρος αυτής, θα πρέπει
να καθορίσουµε τις συντεταγµένες της πάνω αριστερής γωνίας του τµήµα-
τος της φόρµας που θέλουµε να εµφανίσουµε. Για να το κάνουµε αυτό θα
καταχωρήσουµε στην παράµετρο «∆εξιά» τη συντεταγµένη της οριζό-
ντιας θέσης της πάνω αριστερής γωνίας µετρηµένη από την αριστερή ά-
κρη του παραθύρου που την περιέχει, και στην παράµετρο «Κάτω» τη συ-
ντεταγµένη της κατακόρυφης θέσης της άνω αριστερής γωνίας µετρηµέ-
νη από την επάνω άκρη του παραθύρου που την περιέχει. Οι µονάδες µέ-
τρησης αυτών των συντεταγµένων, θα είναι ίντσες ή εκατοστά, ανάλογα µε
τις ρυθµίσεις που έχουµε ορίσει για το σύστηµά µας από το εικονίδιο Re-
gional Settings του πίνακα ελέγχου.
Η χρήση αυτής της ενέργειας απαιτεί τον καθορισµό της τιµής µιας και µοναδικής
παραµέτρου, που είναι το όνοµα του στοιχείου στο οποίο θέλουµε να µεταβού-
µε. Εάν για παράδειγµα θέλουµε να µεταφερθούµε στο πεδίο LNAME της φόρ-
µας EMPLOYEE που εµφανίζει τα προσωπικά στοιχεία των υπαλλήλων της ε-
ταιρείας, θα πρέπει να καταχωρήσουµε στην παράµετρο «Όνοµα στοιχείου ελέγ-
χου (Control Name)» την τιµή «LNAME».
1. ∆εξιά (Right): η παράµετρος αυτή επιτρέπει τον καθορισµό της τιµής της
οριζόντιας συντεταγµένης της άνω αριστερής γωνίας της νέας θέσης του
παραθύρου. Η τιµή αυτή εκφράζει την απόσταση της νέας θέσης της άνω α-
ριστερής γωνίας, από την αριστερή πλευρά του παραθύρου µέσα στο οποίο
περιέχεται το ενεργό παράθυρο της βάσης.
2. Κάτω (Down): η παράµετρος αυτή επιτρέπει τον καθορισµό της τιµής της
κατακόρυφης συντεταγµένης της άνω αριστερής γωνίας της νέας θέσης
του παραθύρου. Η τιµή που καταχωρούµε στην παράµετρο αυτή, εκφράζει
την απόσταση της νέας θέσης της αριστερής γωνίας από την πάνω πλευρά του
παραθύρου µέσα στο οποίο περιέχεται το ενεργό παράθυρο της βάσης.
4. Ύψος (Height): η τιµή αυτή δέχεται ως όρισµα το νέο ύψος του παραθύρου.
• Σύνδεση (Link): στην περίπτωση κατά την οποία και οι δύο βάσεις δεδο-
µένων έχουν δηµιουργηθεί µε τη Microsoft Access, µπορούµε αντί για την
εισαγωγή των δεδοµένων κάποιου από τους πίνακες της δεύτερης βάσης,
να δηµιουργήσουµε ένα σύνδεσµο προς αυτόν τον πίνακα, έτσι ώστε να
προσπελάσουµε τα δεδοµένα του, χωρίς να χρειαστεί να τον αντιγράψουµε
στην τρέχουσα βάση.
5. Περιέχει ονόµατα πεδίων (Has Field Names): στην περίπτωση κατά την ο-
ποία τα δεδοµένα του αρχείου που θέλουµε να µεταφέρουµε είναι οργανωµέ-
να σε γραµµές και στήλες, είναι πιθανό η πρώτη γραµµή του αρχείου να
µην περιέχει δεδοµένα, αλλά τα ονόµατα των πεδίων των οποίων οι τιµές
περιλαµβάνονται στις στήλες του αρχείου. Στην περίπτωση που συµβαίνει
κάτι τέτοιο, µπορούµε να αποδώσουµε στην παράµετρο αυτή την τιµή «Ναι
(Yes)». Η χρήση αυτής της τιµής στην εν λόγω παράµετρο, επιτρέπει στη Mi-
crosoft Access να χρησιµοποιήσει τα ονόµατα αυτών των πεδίων για τα αντί-
στοιχα πεδία του πίνακα της βάσης δεδοµένων στον οποίο θα αποθηκευθούνε
τα δεδοµένα που µεταφέρονται. Στην αντίθετη περίπτωση η τιµή που θα κα-
ταχωρήσουµε σε αυτή την παράµετρο, θα είναι η τιµή «Όχι (No)».
6. Πίνακας HTML (HTML Table Name): στην περίπτωση κατά την οποία
λαµβάνει χώρα µεταφορά δεδοµένων ανάµεσα στην τρέχουσα βάση δεδοµέ-
νων και σε µία σελίδα HTML, µπορούµε να χρησιµοποιήσουµε αυτή την πα-
ράµετρο, για να καθορίσουµε το όνοµα του πίνακα ή της λίστας αυτής της
σελίδας, τα δεδοµένα του οποίου επιθυµούµε να προσπελάσουµε. Στην πε-
ρίπτωση κατά την οποία δεν καταχωρηθεί καµία τιµή σε αυτή την παράµετρο,
θα λάβει χώρα µεταφορά των δεδοµένων του πρώτου πίνακα ή λίστας που
ανήκει σε αυτή τη σελίδα.
1. Νέο όνοµα (New Name): η παράµετρος αυτή δέχεται ως τιµή µια συµβολο-
σειρά που περιέχει το νέο όνοµα του αντικειµένου που θέλουµε να µετονο-
µάσουµε.
3. Παλαιό όνοµα (Old Name): η παράµετρος αυτή χρησιµοποιείται για τον κα-
θορισµό του ονόµατος του αντικειµένου που επιθυµούµε να µετονοµάσου-
µε. Εάν δεν καθορίσουµε κάποιο τύπο και κάποιο όνοµα αντικειµένου, η ε-
νέργεια αυτή θα µετονοµάσει το ενεργό αντικείµενο που βρίσκεται επιλεγ-
µένο στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων.
2. Ηχητικό σήµα (Beep): στην περίπτωση κατά την οποία επιθυµούµε να εµφα-
νίσουµε το κείµενο του µηνύµατος συνοδευόµενο από µία ηχητική προει-
δοποίηση, καταχωρούµε στην παράµετρο αυτή την τιµή «Ναι (Yes)», που
αποτελεί και την προεπιλεγµένη τιµή αυτής της παραµέτρου.
menu συντόµευσης και menu bars. Η χρήση αυτής της ενέργειας, απαιτεί τον
καθορισµό των επόµενων παραµέτρων:
1. Όνοµα menu (Menu Name): η παράµετρος αυτή δέχεται ως τιµή µια συµβο-
λοσειρά που περιέχει το όνοµα του menu που θα εµφανίζεται στην προ-
σαρµοσµένη γραµµή εργαλείων.
Μετά την αναλυτική περιγραφή των βασικών αντικειµένων µιας βάσης δεδοµέ-
νων έτσι όπως αυτή υλοποιείται µέσα από το περιβάλλον της Microsoft Access, ας
περάσουµε τώρα σε πιο προχωρηµένες τεχνικές ανάπτυξης εφαρµογών οι οποίες ε-
κτός των άλλων περιλαµβάνουν τη συγγραφή κώδικα, δια της χρήσης του οποίου
είναι δυνατή η εκτέλεση πολύπλοκων διαδικασιών. Σε όλες τις εκδόσεις της Micro-
soft Access, η διαθέσιµη γλώσσα προγραµµατισµού για την συγγραφή αυτού του κώ-
δικα, είναι µια περιορισµένη έκδοση της Visual Basic που είναι γνωστή ως VBA
(Visual Basic for Applications). ∆εν είναι λίγες όµως και οι περιπτώσεις ανάπτυξης
εφαρµογών, στις οποίες η βάση δεδοµένων έχει υλοποιηθεί χρησιµοποιώντας τη Mi-
crosoft Access, ενώ το βασικό περιβάλλον αλληλεπίδρασης µε το χρήση έχει δη-
µιουργηθεί χρησιµοποιώντας την πλήρη έκδοση της γλώσσας Visual Basic.
Αν και στις πιο πολλές περιπτώσεις, η υλοποίηση των διαδικασιών της αναπτυσ-
σόµενης εφαρµογής µπορεί να γίνει και µε πολλούς άλλους εναλλακτικούς τρόπους
όπως είναι για παράδειγµα δια της χρήσης µακροεντολών, εν τούτοις η υλοποίηση
αυτών των διαδικασιών δια µέσου µιας γλώσσας προγραµµατισµού κρίνεται πιο απο-
δοτική, καθώς διευκολύνει περισσότερο τη σωστή σχεδίαση και υλοποίηση της
εφαρµογής. Αυτό ισχύει ιδιαίτερα στις περιπτώσεις σχεδίασης φορµών και ανα-
φορών, η προσπέλαση και χρήση των οποίων διευκολύνεται πάρα πολύ όταν στηρί-
ζεται στη χρήση ειδικών προγραµµάτων που είναι γνωστά µε το όνοµα λειτουργικές
µονάδες (modules). Σύµφωνα µε τα αρχεία τεκµηρίωσης της Microsoft Access, µια
λειτουργική µονάδα ορίζεται ως µια συλλογή δηλώσεων, προτάσεων και διαδι-
κασιών, οι οποίες βρίσκονται αποθηκευµένες ως µία ενιαία οντότητα, και κάτω
από ένα κοινό όνοµα. Στην περίπτωση κατά την οποία µία φόρµα ή αναφορά χαρα-
κτηρίζεται από την ύπαρξη λειτουργικών µονάδων οι οποίες επιτρέπουν την προσπέ-
λασή της από τον τελικό χρήστη, αυτές οι µονάδες αποτελούν τµήµα του αντικειµέ-
Κεφάλαιο 14 : Λειτουργικές Μονάδες 342
νου της φόρµας ή της αναφοράς, και εποµένως, εάν το αντικείµενο αυτό διαγραφεί ή
µετακινηθεί σε άλλη βάση, οι συσχετιζόµενες λειτουργικές µονάδες θα διαγραφούν ή
θα µετακινηθούν ανάλογα. Αυτό όµως δεν συµβαίνει όταν η αλληλεπίδραση του χρή-
στη µε τη φόρµα ή την αναφορά γίνεται δια µέσου κατάλληλα σχεδιασµένων µακροε-
ντολών. Πράγµατι, όπως έχει αναφερθεί στο προηγούµενο κεφάλαιο, οι µακροεντο-
λές αποθηκεύονται ως ξεχωριστά αντικείµενα της βάσης, και εποµένως, η διαγρα-
φή ή µετακίνηση κάποιας φόρµας ή αναφοράς, θα απαιτεί ενδεχοµένως και τη δια-
γραφή ή µετακίνηση της αντίστοιχης µακροεντολής. Εποµένως η χρήση των λειτουρ-
γικών µονάδων στη θέση των µακροεντολών, διευκολύνει τη συντήρηση της βάσης
και καθιστά απλούστερη τη σχεδίαση της εφαρµογής.
Στην τρέχουσα έκδοση της Microsoft Access, υπάρχουν δύο κατηγορίες λειτουρ-
γικών µονάδων. Η πρώτη από τις κατηγορίες αυτές που φέρει το όνοµα λειτουργικές
µονάδες κλάσης (class modules) χρησιµοποιείται για τον ορισµό νέων τύπων αντι-
κειµένων, και είναι εντελώς ανάλογη µε τις κλάσεις (classes) των αντικειµενοστρα-
φών γλωσσών προγραµµατισµού. Χαρακτηριστικό παράδειγµα αυτής της κατηγορίας
λειτουργικών µονάδων, είναι οι λειτουργικές µονάδες φόρµας και αναφοράς, οι
οποίες στη γενική περίπτωση περιλαµβάνουν διαδικασίες συµβάντος που καθορίζουν
την απόκριση της φόρµας ή της αναφοράς σε συµβάντα συγκεκριµένου τύπου. Ας
σηµειωθεί πως σε αντίθεση µε τις προηγούµενες εκδόσεις της Microsoft Access όπου
οι λειτουργικές µονάδες κλάσης έπρεπε υποχρεωτικά να συσχετιστούνε µε κάποια
φόρµα ή αναφορά, στην τρέχουσα έκδοση µπορούµε να δηµιουργήσουµε λειτουργι-
κές µονάδες κλάσης χωρίς να εφαρµόσουµε υποχρεωτικά ένα τέτοιο συσχετισµό.
Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως στην περίπτωση δήλω-
σης πινάκων (για κάθε τύπο δεδοµένων), οι απαιτήσεις σε µνήµη δεν περιορίζονται
µόνο στον αποθηκευτικό χώρο που θα καταλάβουν τα δεδοµένα αυτών των πινά-
κων, αλλά αντίθετα απαιτούνται 20 επιπλέον bytes µνήµης για το αντικείµενο
του πίνακα και 4 bytes µνήµης για κάθε µια από τις διαστάσεις που τον περιγρά-
φουν. Το µέγεθος του αποθηκευτικού χώρου που απαιτείται για την αποθήκευση των
δεδοµένων του πίνακα, είναι προφανώς ίσο µε το γινόµενο του πλήθους των στοι-
χείων του πίνακα επί το µέγεθος του τύπου δεδοµένων αυτών των στοιχείων. Για
παράδειγµα η αποθήκευση ενός συνόλου 20 ακεραίων αριθµών, απαιτεί χώρο α-
ποθήκευσης µε µέγεθος 40 bytes, διότι οι απαιτήσεις σε µνήµη του τύπου δεδοµέ-
νων ακέραιων αριθµών (integer data type) είναι 2 bytes.
του είδους, αναγράφεται ανάµεσα στο ζεύγος των δεσµευµένων προτάσεων Begin
Sub και End Sub.
Από την άλλη πλευρά, εάν η µεταβλητή δεν ορίζεται µέσα σε κάποια διαδικασία
αλλά στο δηλωτικό τµήµα (declaration section) µιας λειτουργικής µονάδας και
δια της χρήσης της δεσµευµένης λέξης Dim (που θα µελετηθεί στη συνέχεια), µπορεί
να χρησιµοποιηθεί από όλες τις διαδικασίες που περιλαµβάνονται σε αυτή, όχι
όµως και από τις διαδικασίες των υπόλοιπων λειτουργικών µονάδων. Στην ορολογία
του δοµηµένου προγραµµατισµού, οι µεταβλητές αυτές χαρακτηρίζονται ως ιδιωτι-
κές (private). Υπάρχει όµως η δυνατότητα προσπέλασης µιας µεταβλητής από όλες
τις λειτουργικές µονάδες της εφαρµογής, εάν δηλωθεί ως κοινόχρηστη, κάτι που γί-
νεται αναγράφοντας τη δεσµευµένη λέξη Public πριν από το όνοµα αυτής της µετα-
βλητής.
Η έννοια της ιδιωτικής και της κοινόχρηστης µεταβλητής µπορεί χωρίς καµία
τροποποίηση να επεκταθεί και στην περίπτωση των διαδικασιών που περιέχονται σε
µία λειτουργική µονάδα. Μιλώντας γενικά, αυτού του είδους οι διαδικασίες θεωρού-
νται κοινόχρηστες, και εποµένως µπορούν να χρησιµοποιηθούν από όλες τις λει-
τουργικές µονάδες µιας εφαρµογής. Εξαίρεση στον κανόνα αυτό, αποτελούν οι
διαδικασίες συµβάντος (event procedures) οι οποίες πάντοτε θεωρούνται ιδιωτι-
κές. Για το λόγο αυτό, κάθε φορά που δηλώνουµε µια διαδικασία συµβάντος, η Vis-
ual Basic τοποθετεί πάντοτε τη δεσµευµένη λέξη Private πριν από το όνοµα αυτής
της διαδικασίας. Για όλες τις υπόλοιπες διαδικασίες, εφ’ όσον επιθυµούµε να τις δια-
πραγµατευτούµε ως ιδιωτικές, θα πρέπει να καταχωρήσουµε από µόνοι µας τη λέξη
Private αµέσως πριν από το όνοµα που τις χαρακτηρίζει.
όπου η χρήση του χαρακτήρα «|» υποδηλώνει τον τελεστή της λογικής διάζευξης
(Boolean OR) ενώ το όρισµα [Data Type] είναι το όνοµα του τύπου δεδοµένων της
σταθεράς που θέλουµε να δηλώσουµε. Ως τύπο δεδοµένων για τη νέα σταθερά µπο-
ρούµε να χρησιµοποιήσουµε οποιοδήποτε έγκυρο τύπο δεδοµένων της γλώσσας Vis-
ual Basic (δηλαδή κάποιον από τους Boolean, Byte, Integer, Long, Currency,
Single, Double, Date, String και Variant). Στην περίπτωση κατά την οποία επιθυ-
µούµε να δηλώσουµε δύο σταθερές µέσα από την ίδια πρόταση, µπορούµε να το
κάνουµε χρησιµοποιώντας το κόµµα «,» ως το χαρακτήρα διαχωρισµού. Έτσι η πρό-
ταση
επιτρέπει την ταυτόχρονη δήλωση δύο σταθερών, εκ των οποίων η πρώτη είναι ακέ-
ραιος αριθµός και φέρει την τιµή 18, ενώ η δεύτερη είναι νοµισµατική µονάδα και
φέρει την τιµή 30000.
Από την άλλη πλευρά, η δήλωση µιας µεταβλητής (variable) γίνεται µε πα-
ρόµοιο τρόπο, και χρησιµοποιώντας τη δεσµευµένη λέξη Dim. Σε πλήρη αναλογία µε
τη δήλωση µιας σταθεράς, η δήλωση µιας µεταβλητής µπορεί να λάβει χώρα είτε µέ-
σα σε κάποια από τις διαδικασίες της λειτουργικής µονάδας, είτε στο δηλωτικό
της τµήµα. Και στις δύο αυτές περιπτώσεις η εν λόγω µεταβλητή χρησιµοποιείται ως
ιδιωτική, ενώ για να χαρακτηριστεί ως κοινόχρηστη, θα πρέπει στη δηλωτική της
πρόταση και πριν από το όνοµά της, να αναγραφεί η δεσµευµένη λέξη Public. Η
χρήση της λέξης Private καθιστά τη µεταβλητή ιδιωτική, ενώ µια άλλη ενδιαφέρου-
σα περίπτωση είναι η χρήση της λέξης Static, η οποία επιτρέπει στην εν λόγω µετα-
βλητή να διατηρεί την τιµή της ανάµεσα σε διαδοχικές κλήσεις της από τις δια-
δικασίες της λειτουργικής µονάδας. Οι µεταβλητές αυτού του είδους ονοµάζονται
στατικές µεταβλητές (static variables).
όπου ο τύπος δεδοµένων για τη νέα µεταβλητή µπορεί να είναι κάποιος από τους
Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (σταθερού ή
µεταβλητού µήκους), Object ή Variant. Εάν δεν καταχωρηθεί κάποιος τύπος δε-
δοµένων, χρησιµοποιείται ο προεπιλεγµένος τύπος Variant. Η εφαρµογή παρέχει ε-
πίσης τη δυνατότητα να χρησιµοποιήσουµε ως τύπο δεδοµένων κάποιο τύπο που έχει
ορισθεί από το χρήστη σε προηγούµενο στάδιο της διαδικασίας (user defined data
type) - η δήλωση νέων τύπων δεδοµένων, γίνεται χρησιµοποιώντας τη δεσµευµένη
λέξη Type. Τέλος, σε πλήρη αναλογία µε τη δήλωση µιας σταθεράς, υπάρχει η δυνα-
τότητα να ορίσουµε ταυτόχρονα πολλές µεταβλητές µέσα από την ίδια πρόταση, και
χρησιµοποιώντας το κόµµα «,» ως διαχωριστικό ανάµεσα σε δύο διαδοχικές δηλώ-
σεις µεταβλητών. Έτσι η δήλωση
ορίζει τρεις µεταβλητές, τις Color, Mean και Fract εκ των οποίων η πρώτη είναι τύ-
που δεδοµένων Integer, η δεύτερη τύπου δεδοµένων Variant (αφού δεν έχει καθορι-
σθεί κάποιος τύπος δεδοµένων), και η τρίτη τύπου δεδοµένων Double.
ενός δυναµικού πίνακα δεν καθορίσουµε τον τύπο δεδοµένων των στοιχείων που πε-
ριλαµβάνονται σε αυτόν, χρησιµοποιείται ο προεπιλεγµένος τύπος Variant.
• Λογικοί Τελεστές (Logical Operators): τέλος στην κατηγορία των λογικών τε-
λεστών, ανήκουν οι γνωστοί τελεστές AND, OR, NOT, XOR, EQV και IMP
που χρησιµοποιούνται στη διαδικασία δόµησης λογικών εκφράσεων, οι οποίες
µπορούν να λάβουν µόνο τις τιµές TRUE ή FALSE.
σης». Περισσότερες λεπτοµέρειες για τις µεθόδους του αντικειµένου της εφαρµογής
µπορούν να βρεθούν στα αρχεία τεκµηρίωσης της Microsoft Access.
Στην περίπτωση κατά την οποία δεν καθορίσουµε κάποιες τιµές για τα ορί-
σµατα viewMode και dataMode, χρησιµοποιούνται οι προεπιλεγµένες τιµές ac-
ViewNormal και acEdit αντίστοιχα.
DoCmd.OpenDiagram diagramName
όπου το όρισµα reportName είναι το όνοµα της αναφοράς που θέλουµε να χρησι-
µοποιήσουµε, το όρισµα reportView καθορίζει το είδος της προβολής στην οποία
θα χρησιµοποιήσουµε την εν λόγω αναφορά, ενώ τα ορίσµατα filterName και
whereCondition επιτρέπουν τη χρήση όχι όλων των εγγραφών της αναφοράς, αλλά
µόνο εκείνων που πληρούνε κάποια κριτήρια.
Στην περίπτωση κατά την οποία καθορίσουµε όνοµα διαδικασίας αλλά όχι ό-
νοµα λειτουργικής µονάδας, η Microsoft Access θα αναζητήσει την καθορισµένη
διαδικασία στις βασικές λειτουργικές µονάδες της βάσης (standard modules) και
θα ανοίξει εκείνη τη λειτουργική µονάδα στην οποία θα εντοπίσει αυτή τη διαδικασί-
α. Από την άλλη πλευρά, εάν καθορίσουµε όνοµα λειτουργικής µονάδας αλλά όχι και
όνοµα διαδικασίας, η Microsoft Access θα ανοίξει τη λειτουργική µονάδα που έχει
καθορισθεί, και θα µεταφέρει τον έλεγχο της εφαρµογής στο δηλωτικό τµήµα (dec-
laration section) αυτής της µονάδας. Σε κάθε περίπτωση, η χρήση της µεθόδου
OpenModule απαιτεί τον καθορισµό τουλάχιστον ενός από τα ορίσµατα που την
περιγράφουν. Είναι προφανές, πως εάν καθορισθούν και τα δύο αυτά ορίσµατα, η
Microsoft Access θα ανοίξει τη λειτουργική µονάδα που έχει καθορισθεί, και θα ε-
κτελέσει τη διαδικασία της οποίας το όνοµα έχει περαστεί ως τιµή στο όρισµα proce-
dureName.
που προκαλεί την εκτέλεση της διαδικασίας IsLoaded που ανήκει στη λειτουργική
µονάδα Utility Functions. Το παράδειγµα αυτό έχει ληφθεί από τα αρχεία τεκµηρίω-
σης της Microsoft Access που αναφέρονται στη µέθοδο OpenModule.
Στη σύνταξη αυτή το όρισµα tableName καθορίζει το όνοµα του πίνακα που
επιθυµούµε να χρησιµοποιήσουµε. Η χρήση του ορίσµατος αυτού είναι υποχρεωτική,
ενώ τα υπόλοιπα δύο ορίσµατα χρησιµοποιούνται κατά βούληση και ανάλογα µε τις
περιστάσεις. Όσον αφορά τις τιµές που µπορούν να λάβουν τα ορίσµατα αυτά, ισχύ-
ουν τα όσα έχουν αναφερθεί στις προηγούµενες παραγράφους. Έτσι το όρισµα ta-
bleView µπορεί να λάβει µία από τις τιµές acViewDesign, acViewNormal και ac-
ViewPreview ενώ το όρισµα dataMode µπορεί να λάβει κάποια από τις τιµές acAdd,
acEdit και acReadOnly. Εάν δεν αποδώσουµε τιµή στα δύο αυτά ορίσµατα, χρησι-
µοποιούνται οι προεπιλεγµένες τιµές acViewNormal και acEdit αντίστοιχα.
όπου το όρισµα echoOn παίρνει µία από τις τιµές True ή False (ανάλογα µε το εάν
θα χρησιµοποιηθεί η αντήχηση ή όχι), ενώ το όρισµα statusBarText παίρνει ως τιµή
µια συµβολοσειρά, το περιεχόµενο της οποίας είναι το κείµενο που θα εµφανισθεί
στη γραµµή κατάστασης της εφαρµογής (status bar), στην περίπτωση κατά την
οποία λάβει χώρα απενεργοποίηση της αντήχησης. Χαρακτηριστικό παράδειγµα χρή-
σης αυτής της µεθόδου, είναι η κλήση της µε τη µορφή
Το επόµενο όρισµα που περιλαµβάνεται στη σύνταξη αυτής της µεθόδου, φέ-
ρει το όνοµα sourceObjectType και επιτρέπει τον καθορισµό του τύπου του αντι-
κειµένου, επί του οποίου εφαρµόζεται αυτή η µέθοδος. Σε πλήρη αναλογία µε την
ενέργεια CopyObject, αυτό το αντικείµενο µπορεί να ανήκει σε οποιονδήποτε έγκυ-
ρο τύπο αντικειµένου της Microsoft Access. Ο πίνακας που ακολουθεί παρουσιάζει
τις τιµές που µπορεί να λάβει η παράµετρος sourceObjectType και ο τύπος αντικει-
µένου που αντιστοιχεί σε κάθε µία από αυτές.
που επιτρέπει τη δηµιουργία αντιγράφου του πίνακα Employees στην τρέχουσα βάση
δεδοµένων. Χρησιµοποιώντας ανάλογες εντολές, µπορούµε να δηµιουργήσουµε αντί-
γραφα ασφαλείας, για όλα τα αντικείµενα της βάσης δεδοµένων.
όπου τα ορίσµατα objectType και objectName επιτρέπουν τον καθορισµό του τύπου
και του ονόµατος του αντικειµένου που θέλουµε να αποθηκεύσουµε. Σύµφωνα µε τα
όσα αναφέραµε σε προηγούµενη παράγραφο, οι επιτρεπτές τιµές που µπορεί να λά-
βει το όρισµα objectType είναι οι acDataAccessPage (για σελίδα πρόσβασης δεδο-
µένων), acDiagram (για διάγραµµα της βάσης δεδοµένων), acForm (για φόρµα),
acMacro (για µακροεντολή), acModule (για λειτουργική µονάδα), acQuery (για ε-
ρώτηµα), acReport (για αναφορά), acServerView (για προβολή διακοµιστή), ac-
StoredProcedure (για αποθηκευµένη διαδικασία) και acTable (για πίνακα). Εάν δεν
καθορισθεί κάποιος τύπος δεδοµένων χρησιµοποιείται η προεπιλεγµένη τιµή acDe-
fault. Στην περίπτωση αυτή η Microsoft Access αποθηκεύει το τρέχον αντικείµενο
της βάσης δεδοµένων χρησιµοποιώντας το όνοµα που έχει καθορισθεί δια της χρή-
σης της παραµέτρου objectName.
ρίσουµε τιµή για αυτό το όρισµα, η Microsoft Access θα µας ζητήσει αυτή την πλη-
ροφορία αµέσως πριν την εκτέλεση αυτής της διαδικασίας.
που προκαλεί την άµεση αποστολή της αναφοράς «Sales Reports» σε µορφή HTML
στον παραλήπτη amarg@uom.gr µε θέµα µηνύµατος «November’s Sales Report».
η οποία διαγράφει τον πίνακα «EMPLOYEE» από τη βάση δεδοµένων της εφαρµο-
γής.
όπου το όρισµα sqlStatement περιέχει τον κώδικα SQL ενός ερωτήµατος ενέργειας ή
ορισµού δεδοµένων (τα ερωτήµατα αυτού του είδους περιλαµβάνουν ενέργειες όπως
είναι η CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX,
DROP INDEX, INSERT INTO, DELETE, UPDATE κ.λ.π), ενώ στο όρισµα use-
Transaction αποδίδεται µια από τις τιµές True ή False ανάλογα µε το εάν το query
που εκτελείται δια της χρήσης αυτής της µεθόδου, πρόκειται να χρησιµοποιηθεί ή όχι
σε µία διαδικασία συναλλαγής (transaction). Αυτή η διαδικασία ορίζεται ως µία
σειρά από µεταβολές που εφαρµόζονται πάνω στα δεδοµένα και στο σχήµα µιας
βάσης δεδοµένων και χαρακτηρίζεται από τη χρήση των δεσµευµένων λέξεων Be-
ginTrans και CommitTrans. Η προεπιλεγµένη τιµή για αυτή την ιδιότητα είναι η
τιµή True.
η οποία προκαλεί την εκτύπωση της λίστας των υπαλλήλων της εταιρείας σε τρία
αντίτυπα. Η εκτύπωση αυτής της λίστας γίνεται από τη µακροεντολή «Print Em-
ployee List», η οποία στην προκειµένη περίπτωση εκτελείται τρεις φορές.
µένων. Αυτή η µέθοδος είναι εντελώς ανάλογη µε την ενέργεια PrintOut που περι-
γράψαµε στο κεφάλαιο διαχείρισης των µακροεντολών, και η κλήση της ακολουθεί
µία σύνταξη της µορφής
Από την άλλη πλευρά, το όρισµα printQuality, επιτρέπει τον καθορισµό της
ποιότητας εκτύπωσης. Οι τιµές που µπορεί να πάρει αυτό το όρισµα είναι acDraft
(πρόχειρη εκτύπωση), acLow (εκτύπωση χαµηλής ποιότητας), acMedium (εκτύπω-
σης µεσαίας ποιότητας) και acHigh (εκτύπωση υψηλής ποιότητας). Η τελευταία τιµή
είναι και η προεπιλεγµένη τιµή για την παράµετρο printQuality. Εάν επιθυµούµε να
εκτυπώσουµε τα περιεχόµενα του επιλεγµένου αντικειµένου περισσότερες από µία
φορές, καθορίζουµε τον αριθµό των αντιτύπων δια της χρήσης της παραµέτρου cop-
ies. Τέλος η παράµετρος collateCopies δέχεται µία από τις τιµές True ή False ανά-
λογα µε τον εάν επιθυµούµε ή όχι να χρησιµοποιήσουµε το χαρακτηριστικό της συρ-
ραφής αντιτύπων. Περισσότερες λεπτοµέρειες σχετικά µε αυτό το χαρακτηριστικό
εκτύπωσης, µπορούν να βρεθούνε στην τεκµηρίωση της ενέργειας PrintOut όπως
αυτή παρουσιάζεται στο κεφάλαιο διαχείρισης των µακροεντολών.
που έχει ως αποτέλεσµα την πρόχειρη εκτύπωση 5 αντιτύπων των σελίδων 1 έως
10 του επιλεγµένου αντικειµένου χρησιµοποιώντας το χαρακτηριστικό της συρρα-
φής αντιτύπων.
που προκαλεί την εµφάνιση της γραµµής εργαλείων που φέρει το όνοµα Employee-
Management.
όπου objectName είναι το όνοµα του αντικειµένου και objectType ο τύπος του. Σε
πλήρη αναλογία µε παρόµοιες µεθόδους οι οποίες εφαρµόζονται πάνω στα αντικείµε-
να της βάσης δεδοµένων, οι τιµές που µπορεί να πάρει το όρισµα objectType είναι
acDataAccessPage (σελίδα πρόσβασης δεδοµένων), acDiagram (διάγραµµα της βά-
σης δεδοµένων), acForm (φόρµα), acMacro (µακροεντολή), acModule (λειτουργική
µονάδα), acQuery (ερώτηµα), acReport (αναφορά ή έκθεση), acServerView (προ-
βολή διακοµιστή), acStoredProcedure (αποθηκευµένη διαδικασία) και acTable (πί-
νακας). Παράδειγµα χρήσης της µεθόδου acRepaintObject είναι η κλήση της µε τη
µορφή
που επανασχεδιάζει το παράθυρο που συσχετίζεται µε τον πίνακα Employees της βά-
σης δεδοµένων.
την ενέργεια Quit που περιγράψαµε στο κεφάλαιο διαχείρισης µακροεντολών, και η
κλήση της χαρακτηρίζεται από µία σύνταξη της µορφής
DoCmd.Quit Options
όπου το όρισµα options καθορίζει εάν θα λάβει χώρα αποθήκευση της βάσης δε-
δοµένων πριν τον τερµατισµό της λειτουργίας της εφαρµογής. Οι τιµές που µπορεί
να λάβει αυτή η παράµετρος είναι οι acQuitPrompt (που προκαλεί την εµφάνιση ε-
νός πλαισίου διαλόγου δια της χρήσης του οποίου ο χρήστης καθορίζει εάν επιθυµεί
να αποθηκεύσει ή όχι τη βάση δεδοµένων), acQuitSaveAll (που προκαλεί την αυτό-
µατη αποθήκευση όλων των αντικειµένων της εφαρµογής) και acQuitSaveNone (που
τερµατίζει τη λειτουργία της Microsoft Access χωρίς να αποθηκεύσει τις αλλαγές
που ενδεχοµένως έχουν πραγµατοποιηθεί πάνω στη βάση δεδοµένων). Εάν δεν καθο-
ρισθεί κάποια τιµή, η προεπιλεγµένη τιµή που χρησιµοποιείται, είναι η acQuit-
SaveAll. Παράδειγµα χρήσης της µεθόδου Quit είναι η κλήση της µε τη µορφή
DoCmd.Quit acQuitPrompt
που τερµατίζει τη λειτουργία της Microsoft Access, ερωτώντας το χρήστη εάν επιθυ-
µεί να αποθηκεύσει ή όχι την τρέχουσα βάση δεδοµένων.
Από την άλλη πλευρά, το όρισµα outputFormat δέχεται ως τιµή µια σταθερά
που καθορίζει τον τύπο του αρχείου στο οποίο θα αποθηκεύσουµε τα περιεχόµενα
του επιλεγµένου αντικειµένου. Η σταθερά αυτή µπορεί να λάβει µία από τις τιµές
acFormatASP (για Active Server Page Format), acFormatDAP (για Data Access
Page Format), acFormatHTML (για HTML Format), acFormatIIS (για Internet In-
formation Server Format), acFormatRTF (για Rich Text Format), acFormatTXT
(για Text Format) και acFormatXLS (για XLS Format). Όσον αφορά το όνοµα και
τη διαδροµή του αρχείου εξόδου, αυτά καθορίζονται χρησιµοποιώντας την παράµε-
τρο outputFile, ενώ στην περίπτωση κατά την οποία ο τύπος του αρχείου εξόδου εί-
ναι HTML, µπορούµε χρησιµοποιώντας την παράµετρο templateFile να καθορίσου-
µε το όνοµα και τη διαδροµή ενός αρχείου προτύπου, µε τη βοήθεια του οποίου θα
λάβει χώρα η διαµόρφωση του περιεχοµένου του αρχείου εξόδου. Η τελευταία παρά-
µετρος που µπορούµε να καθορίσουµε στην κλήση της µεθόδου OutputTo, είναι η
autoStart. Εάν αυτή η παράµετρος λάβει την τιµή «True», λαµβάνει χώρα άµεση
εκκίνηση της εφαρµογής που διαχειρίζεται το συγκεκριµένο τύπου του αρχείου
εξόδου. Εάν για παράδειγµα καθορίσουµε ως αρχείο εξόδου ένα φύλλο δεδοµένων
(XLS Format), η απόδοση της τιµής «True» στη µεταβλητή autoStart, θα έχει ως
αποτέλεσµα την εκκίνηση του Microsoft Excel αµέσως µετά την ολοκλήρωση της
διαδικασίας έτσι ώστε να προχωρήσουµε σε περαιτέρω επεξεργασία του αρχείου εξό-
δου (εάν βέβαια κάτι τέτοιο είναι επιθυµητό).
DoCmd.Requery controlName
όπου controlName είναι το όνοµα του στοιχείου ελέγχου τα περιεχόµενα του οποίου
επιθυµούµε να ανανεώσουµε. Χαρακτηριστικό παράδειγµα χρήσης αυτής της µεθό-
δου είναι η κλήση της µε τη µορφή
DoCmd.Requery “EmployeeList”
όπου το στοιχείο ελέγχου «EmployeeList» είναι ένα πλαίσιο λίστας (list box) που
εµφανίζει τα προσωπικά στοιχεία των υπαλλήλων που εργάζονται στην εταιρεία.
Στην περίπτωση κατά την οποία λάβει χώρα τροποποίηση των περιεχοµένων του πί-
νακα EMPLOYEE δια της προσθήκης ή της διαγραφής κάποιων εγγραφών, θα πρέ-
πει να χρησιµοποιήσουµε αυτή τη µέθοδο για να ανανεώσουµε τα περιεχόµενα του
πλαισίου λίστας, έτσι ώστε αυτό σε κάθε περίπτωση να εµφανίζει ενηµερωµένα
δεδοµένα.
ψαµε στο κεφάλαιο διαχείρισης των µακροεντολών και η κλήση της χαρακτηρίζεται
από µία σύνταξη της µορφής
που επιτρέπει την επιλογή της φόρµας «Department» ως το ενεργό αντικείµενο της
βάσης δεδοµένων.
DoCmd.SetWarnings warningsOn
όπου το όρισµα warningsOn δέχεται µία από τις τιµές True ή False που ενεργο-
ποιούν ή απενεργοποιούν αντίστοιχα την εµφάνιση των προειδοποιητικών µηνυµά-
των. Τυπικό παράδειγµα χρήσης αυτής της µεθόδου, είναι η κλήση της µε τη µορφή
DoCmd.SetWarnings False
η οποία αποτρέπει την εµφάνιση αυτών των µηνυµάτων κατά τη διάρκεια εκτέλεσης
της διαδικασίας που περιέχει αυτή τη µέθοδο.
Από την άλλη πλευρά, το όρισµα match επιτρέπει τον καθορισµό του τρόπου
αναζήτησης του δεδοµένου που έχει καθοριστεί. Αυτό το όρισµα παίρνει µία από
τις τιµές acAnyWhere, acEntire και acStart. Χρησιµοποιώντας την τιµή acAny-
Where θεωρούµε πως το δεδοµένο αναζήτησης αποτελεί τµήµα κάποιου πεδίου
ενώ η τιµή acEntire (που είναι και η προεπιλεγµένη) διαπραγµατεύεται το δεδοµένο
αναζήτησης ως ολόκληρη την τιµή του πεδίου. Τέλος η χρήση της τιµής acStart
θεωρεί πως το δεδοµένο αναζήτησης αποτελεί µόνο πρόθεµα των τιµών των πεδίων
του πίνακα, και εποµένως η διαδικασία αναζήτησης θα επιστρέψει µόνο τις εγγραφές
που χαρακτηρίζονται από αυτή την ιδιότητα.
Το επόµενο πεδίο που µπορούµε να καθορίσουµε στη σύνταξη αυτής της µε-
θόδου, φέρει το όνοµα search και επιτρέπει τον καθορισµό του συνόλου των εγ-
γραφών στις οποίες θα λάβει χώρα η αναζήτηση του καθορισµένου δεδοµένου.
Αυτό το όρισµα µπορεί να λάβει µία από τις τιµές acDown, acUp και acSearchAll.
Εάν χρησιµοποιήσουµε την τιµή acDown, η διαδικασία αναζήτησης θα περιορισθεί
µόνο σε εκείνες τις εγγραφές που βρίσκονται κάτω από την τρέχουσα εγγραφή, ενώ η
χρήση της τιµής acUp θα περιορίσει την αναζήτηση µόνο στις εγγραφές του ενεργού
αντικειµένου που βρίσκονται πάνω από την τρέχουσα εγγραφή. Εάν επιθυµούµε να
επεκτείνουµε την αναζήτηση σε όλες τις εγγραφές του ενεργού αντικειµένου, ανεξάρ-
τητα από τη θέση της τρέχουσας εγγραφής, θα πρέπει να αποδώσουµε σε αυτή την
παράµετρο την τιµή acSearchAll που είναι άλλωστε και η προεπιλεγµένη τιµή για
αυτό το όρισµα.
Από την άλλη πλευρά, το όρισµα onlyCurrentField, παίρνει µία από τις τιµές
acAll και acCurrent και καθορίζει εάν η αναζήτηση του καθορισµένου δεδοµένου
θα περιοριστεί µόνο στο αντίστοιχο πεδίο των εγγραφών του ενεργού αντικειµέ-
νου, ή θα επεκταθεί σε όλα τα πεδία αυτών των εγγραφών. Εάν για παράδειγµα
αναζητούµε τον υπάλληλο της εταιρείας µε το επώνυµο Smith, η χρήση της τιµής
acCurrent στην παράµετρο onlyCurrentField θα περιορίζει τη διαδικασία αναζήτη-
σης µόνο στις τιµές της στήλης LNAME του πίνακα EMPLOYEE. Αντίθετα η χρή-
ση της τιµής acAll θα επιστρέψει τις εγγραφές του εν λόγω πίνακα που περιέχουν τη
συµβολοσειρά Smith σε οποιοδήποτε από τα πεδία τους.
Τέλος το πεδίο findFirst παίρνει κάποια από τις τιµές True ή False και καθο-
ρίζει εάν η διαδικασία αναζήτησης θα ξεκινήσει από την πρώτη εγγραφή του ε-
νεργού αντικειµένου ή από την εγγραφή εκείνη που βρίσκεται αµέσως µετά την
τρέχουσα εγγραφή. Η προεπιλεγµένη τιµή για αυτή την παράµετρο είναι η τιµή True
που ξεκινά τη διαδικασία αναζήτησης από την πρώτη εγγραφή του ενεργού αντικει-
µένου.
που επιστρέφει τις εγγραφές του ενεργού αντικειµένου που βρίσκονται µετά την τρέ-
χουσα εγγραφή η οποίες περιέχουν τη συµβολοσειρά Smith σε οποιοδήποτε τµήµα
της τιµής του πεδίου τους.
της εντολής SELECT της γλώσσας SQL πάνω στα δεδοµένα ενός πίνακα, µιας
φόρµας ή ενός ερωτήµατος. Αυτή η µέθοδος είναι παρόµοια µε την οµώνυµη ενέρ-
γεια που παρουσιάσαµε στο κεφάλαιο διαχείρισης των µακροεντολών, και η κλήση
της χαρακτηρίζεται από µία σύνταξη της µορφής
DoCmd.ApplyFilter FName=“John“
που εµφανίζει µόνο τις εγγραφές του ενεργού αντικειµένου για τις οποίες το πεδίο
LName έχει την τιµή «John». Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως
πριν από τη µέθοδο ApplyFilter θα πρέπει να χρησιµοποιήσουµε τη µέθοδο Select
Object προκειµένου να καθορίσουµε το ενεργό αντικείµενο της βάσης.
πλήρως τη θέση της εντολής µέσα στο menu. Για παράδειγµα εάν αποδώσουµε στις
τιµές menuIndex και commandIndex τις τιµές 1 και 4, αναφερόµαστε στην πέµπτη
εντολή της δεύτερης οµάδας επιλογών του menu του ενεργού παραθύρου. Εάν το
στοιχείο του menu που καθορίζουµε δια της χρήσης αυτών των δύο τιµών δεν αντι-
στοιχεί σε εντολή αλλά σε menu επιλογών χαµηλότερου επιπέδου, µπορούµε να χρη-
σιµοποιήσουµε το τρίτο όρισµα (subCommandIndex) για να καθορίσουµε τη θέση
της εντολής µέσα σε αυτό το menu. Τέλος, η κατάσταση στην οποία θέλουµε να
µεταφέρουµε την επιλογή που έχουµε καθορίσει, χρησιµοποιούµε το τέταρτο όρισµα.
Το όρισµα αυτό παίρνει µία από τις τιµές acMenuCheck (επιλογή στοιχείου),
acMenuGray (απενεργοποίηση στοιχείου), acMenuUncheck (κατάργηση επιλογής
στοιχείου) και acMenuUngray (ενεργοποίηση στοιχείου). Η επιλογή ενός στοιχείου
menu γίνεται τοποθετώντας δίπλα στο όνοµά του το σύµβολο «√». Θα πρέπει να ση-
µειωθεί, πως αυτή η ενέργεια µπορεί να εφαρµοσθεί µόνο στα προσαρµοσµένα
menus (custom menus) που δηµιουργούνται προκειµένου να καλύψουν τις ανάγκες
του χρήστη, και όχι στα προεπιλεγµένα menus (default menus) της Microsoft Ac-
cess.
DoCmd.SetMenuItem 0, 1, acMenuUngray
που ενεργοποιεί τη δεύτερη εντολή που βρίσκεται στην πρώτη οµάδα επιλογών του
προσαρµοσµένου menu του ενεργού παραθύρου της εφαρµογής.
η οποία µας µεταφέρει στην υπ’ αριθµόν 20 εγγραφή του πίνακα Employee.
που µεταφέρει την εστίαση του συστήµατος στην τρίτη σελίδα της φόρµας και
στο σηµείο µε συντεταγµένες (1440, 567).
µοια µε την οµώνυµη ενέργεια που περιγράψαµε στο κεφάλαιο διαχείρισης µακροε-
ντολών, και η κλήσης χαρακτηρίζεται από µία σύνταξη της µορφής
DoCmd.GoToControl controlName
όπου controlName είναι το όνοµα του στοιχείου ελέγχου στο οποίο επιθυµούµε να
µεταφέρουµε την εστίαση του συστήµατος.
Τυπικό παράδειγµα χρήσης αυτής της µεθόδου, είναι η κλήση της µε τη µορ-
φή
DoCmd.GoToControl “EmployeeSSN”
που µεταφέρει την εστίαση του συστήµατος στο πεδίο «EmployeeSSN» της φόρµας
EMPLOYEES.
όπου τα ορίσµατα right και down καθορίζουν τις συντεταγµένες της άνω αριστε-
ρής γωνίας της νέας θέσης του παραθύρου (αυτές οι συντεταγµένες µετρώνται σε
σχέση µε τις συντεταγµένες των πλευρών του παραθύρου που περιέχει το ενεργό πα-
ράθυρο της βάσης δεδοµένων), ενώ τα ορίσµατα width και height εκφράζουν τις νέ-
ες διαστάσεις του παραθύρου, και πιο συγκεκριµένα, το πλάτος και το ύψος του.
Είναι σηµαντικό να αναφερθεί, πως οι αριθµητικές τιµές που καταχωρούµε σε αυτά
τα τέσσερα ορίσµατα, είναι εκπεφρασµένες σε twips. Όπως έχει αναφερθεί σε προη-
γούµενη παράγραφο, το twip είναι µία ειδική µονάδα µέτρησης µήκους της Micro-
soft Access, και ορίζεται ως το 1/1440 µιας ίντσας.
που µετακινεί το παράθυρο σε µία νέα θέση επί της οθόνης, χωρίς ωστόσο να µετα-
βάλει τις διαστάσεις του.
Από την άλλη πλευρά, το όρισµα databaseType επιτρέπει τον καθορισµό του
τύπου της βάσης δεδοµένων από ή προς την οποία θα µεταφέρουµε δεδοµένα. Υ-
πάρχουν πολλοί διαφορετικοί τύποι βάσεων δεδοµένων που µπορούνε να
χρησιµοποιηθούνε και οι οποίοι καθορίζονται αποδίδοντας στην παράµετρο
databaseType µια από τις τιµές «Microsoft Access» (η τιµή αυτή είναι και η
προεπιλεγµένη) , «Jet 2.x», «Jet 3.x», «dBase III», «dBase IV», «dBase 5»,
«Paradox 3.x», «Paradox 4.x», «Paradox 5.x», «Paradox 7.x», «ODBC
Databases». Έχοντας καθορίσει τον τύπο της βάσης δεδοµένων που επιθυµούµε να
χρησιµοποιήσουµε θα πρέπει στη συνέχεια να καθορίσουµε και το όνοµά της
καταχωρώντας το όνοµα και τη διαδροµή του αρχείου που την περιέχει, στην
παράµετρο databaseName.
Μετά τον καθορισµό του τύπου και του ονόµατος της βάσης, θα πρέπει να
προσδιορίσουµε τον τύπο και το όνοµα του αντικειµένου που θέλουµε να χρησι-
µοποιήσουµε. Ο τύπος του αντικειµένου καθορίζεται κατά τα γνωστά καταχωρώντας
στην παράµετρο objectType µια εκ των τιµών acTable (πίνακας), acQuery (ερώτη-
µα), acForm (φόρµα), acReport (αναφορά ή έκθεση), acMacro (µακροεντολή),
acModule (λειτουργική µονάδα), acDataAccessPage (σελίδα πρόσβασης δεδοµέ-
νων), acServerView (προβολή διακοµιστή), acDiagram (διάγραµµα της βάσης δε-
δοµένων) και acStoredProcedure (αποθηκευµένη διαδικασία). Η προεπιλεγµένη τι-
µή για αυτή την ιδιότητα είναι η acTable. Από την άλλη πλευρά, τα ονόµατα των α-
ντικειµένων προέλευσης και προορισµού καθορίζονται δια της χρήσης των ορισµά-
των source και destination – εάν δεν χρησιµοποιηθεί το όρισµα destination τότε το
αντικείµενο προέλευσης θα µεταφερθεί στην τρέχουσα βάση δεδοµένων µε το ίδιο
όνοµα. Μία ακόµη παράµετρος που µπορούµε να καθορίσουµε στο σηµείο αυτό αφο-
ρά το τµήµα του αντικειµένου που επιθυµούµε να µεταφέρουµε. Αν και στις πιο
πολλές περιπτώσεις η µεταφορά αυτή περιλαµβάνει τόσο τη δοµή του αντικειµένου
όσο και το σύνολο των δεδοµένων που βρίσκονται αποθηκευµένα σε αυτό, εν τού-
τοις σε πολλές περιπτώσεις ζητούµε να µεταφέρουµε µόνο τη δοµή του αντικειµέ-
νου και όχι τα δεδοµένα που περιέχει. Για να το κάνουµε αυτό θα πρέπει να κατα-
χωρήσουµε στο όρισµα structureOnly την τιµή «True». Τέλος το όρισµα saveLog-
inId δέχεται µία από τις τιµές «True» ή «False» ανάλογα µε το εάν επιθυµούµε ή όχι
να αποθηκεύσουµε το όνοµα (login name) και τον κωδικό πρόσβασης (password)
που καταχώρησε ο χρήστης προκειµένου να συνδεθεί σε µία βάση δεδοµένων η οποία
ακολουθεί το µοντέλο του ODBC (Open Database Connectivity).
Στην παραπάνω σύνταξη το όρισµα transferType δέχεται µία από τις τιµές
acExportDelim, acExportFixed, acExportHTML, acExportMerge, acImportDe-
lim (η τιµή αυτή είναι και η προεπιλεγµένη), acImportFixed, acImportHTML,
acLinkDelim, acLinkFixed, acLinkHTML οι οποίες καθορίζουν τον τύπο της µε-
ταφοράς (εισαγωγή, εξαγωγή ή σύνδεση) καθώς και τον τύπο του αρχείου κειµέ-
νου. Η χρήση αυτής της παραµέτρου είναι ιδιαίτερα σηµαντική καθώς µας δίνει τη
δυνατότητα να κάνουµε εισαγωγή κειµένου που είναι διαµορφωµένο σε γραµµές
και στήλες, σε κάποιον από τους πίνακες της τρέχουσας βάσης. Το όνοµα του πί-
νακα στον οποίο θα λάβει χώρα η αποθήκευση των δεδοµένων (σε περίπτωση διαδι-
κασίας εισαγωγής κειµένου) καθορίζεται δια της χρήσης της παραµέτρου tableName,
ενώ το όνοµα specificationName δέχεται ως τιµή ένα όνοµα προδιαγραφής (specifi-
cation name) που καθορίζει µε µοναδικό τρόπο το είδος της ανταλλαγής πληροφορί-
ας ανάµεσα στο αρχείου κειµένου και στην τρέχουσα βάση. Περισσότερες πληροφο-
ρίες σχετικά µε το θέµα αυτό ξεφεύγουν από το σκοπό της συγγραφής αυτού του βι-
βλίου και ο αναγνώστης παραπέµπεται στα αρχεία τεκµηρίωσης της Microsoft Ac-
cess ή σε κάποιο άλλο εγχειρίδιο που καλύπτει µε περισσότερη λεπτοµέρεια τη χρήση
αυτής της εφαρµογής.
µένων, ενώ το όνοµα fileName δέχεται ως τιµή µια συµβολοσειρά που περιέχει το
όνοµα και τη διαδροµή του αρχείου του υπολογιστικού φύλλου που επιθυµούµε
να χρησιµοποιήσουµε. Στην περίπτωση κατά την οποία η πρώτη γραµµή του υπολο-
γιστικού φύλλου δεν περιέχει δεδοµένα αλλά ονόµατα πεδίων, θα πρέπει να αποδώ-
σουµε στην παράµετρο hasFieldNames την τιµή «True». Στην περίπτωση αυτή, αυ-
τά τα ονόµατα των πεδίων θα χρησιµοποιηθούν ως τα ονόµατα των πεδίων του πίνα-
κα που θα δηµιουργήσουµε για την αποθήκευση αυτών των δεδοµένων.
που έχει ως αποτέλεσµα τη µεταφορά των περιεχοµένων της περιοχής A1:D15 του
φύλλου δεδοµένων «c:\dataFiles\sales.xls» στον πίνακα «Sales» της τρέχουσας βά-
σης δεδοµένων.
ΕΡΓΑΣΤΗΡΙΟ 1
Στόχος του 1ου εισαγωγικού εργαστηρίου είναι η κατανόηση του τρόπου οργάνωσης της πληροφορίας
στους πίνακες της βάσης δεδοµένων. Αυτή η οργάνωση χαρακτηρίζεται από την οµαδοποίηση των
ατοµικών πεδίων που συσχετίζονται µεταξύ τους σε εγγραφές (records) οι οποίες αποθηκεύονται σε
κατάλληλα διαµορφωµένους πίνακες (tables). Με άλλα λόγια ο κάθε πίνακας αποτελείται από ένα
σύνολο εγγραφών, µε την κάθε µια από αυτές τις εγγραφές να αποτελείται από ένα σύνολο πεδίων.
Όσον αφορά το σύνολο των πινάκων που έχουν δηµιουργηθεί µε τον τρόπο αυτό, αυτοί συσχετίζονται
µεταξύ τους και αποτελούν τη βάση δεδοµένων της εφαρµογής. Με άλλα λόγια ένα σχεσιακό σχήµα
βάσης δεδοµένων, χαρακτηρίζεται από την ακόλουθη ιεραρχική δοµή:
ΑΣΚΗΣΗ 01.01
ΑΣΚΗΣΗ 01.02 Να υλοποιηθούν οι πίνακες ΤΑΙΝΙΑ και ΣΥΜΜΕΤΟΧΗ στη Microsoft Access
Για την κατασκευή αυτών των δύο πινάκων στη Microsoft Access – καθώς και όσων άλλων προκύψουν
στο µέλλον – υπάρχουν συνοπτικές οδηγίες στο µικρό εγχειρίδιο χρήσης της εφαρµογής που συνοδεύει
τις εκφωνήσεις των εργαστηριακών ασκήσεων, και αναλυτικές οδηγίες στο Κεφάλαιο 8 των
σηµειώσεων του µαθήµατος που βρίσκονται στην ηλεκτρονική διεύθυνση www.neural.uom.gr/
databases.htm. Σε γενικές γραµµές, η διαδικασία δηµιουργίας ενός νέου πίνακα έχει ως εξής: από το
κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων, µεταφερόµαστε στη σελίδα των πινάκων και
επιλέγουµε τη δηµιουργία νέου πίνακα σε προβολή σχεδίασης. Αυτή η διαδικασία έχει ως αποτέλεσµα
τη µεταφορά του χρήστη στο περιβάλλον σχεδίασης πινάκων, όπου για κάθε πεδίο καταχωρούµε το όνοµά
του, τον τύπο δεδοµένων που το χαρακτηρίζει και προαιρετικά κάποιο σχόλιο που περιγράφει το
ρόλο του µέσα στον πίνακα. Στο τελευταίο βήµα της διαδικασίας ορίζουµε το πρωτεύον κλειδί του
πίνακα και τον αποθηκεύουµε ορίζοντας για αυτόν κάποιο όνοµα.
ΣΗΜΕΙΩΣΗ: Θα είναι καλό να δοθεί ιδιαίτερη έµφαση στη σωστή διαµόρφωση του κάθε πεδίου
πίνακα και στην απόδοση των κατάλληλων σε κάθε περίπτωση τιµών στις ιδιότητες που το
χαρακτηρίζουν. Αυτές οι ιδιότητες επηρεάζουν τα χαρακτηριστικά εµφάνισης του πεδίου στις
επιφάνειες των φορµών και των αναφορών της βάσης, καθώς και το είδος των συσχετίσεων στις
οποίες αυτό συµµετέχει. Για το λόγο αυτό ενδείκνυται η προσεκτική διαµόρφωσή τους όσον αφορά τις
τιµές που λαµβάνουν.
ΤΑΙΝΙΑ
ΤΙΤΛΟΣ ΑΠΟΘΕΜΑ_VHS ΑΠΟΘΕΜΑ_BETA ΠΑΡΑΓΩΓΗ ΤΙΜΗ
ΣΥΜΜΕΤΟΧΗ
ΤΥΠΟΙ ∆Ε∆ΟΜΕΝΩΝ
ΓΙΑ ΤΑ ΠΕ∆ΙΑ ΤΩΝ
ΤΙΤΛΟΣ ΕΠΩΝΥΜΟ ΟΝΟΜΑ ΠΙΝΑΚΩΝ
ΤΑΙΝΙΑΣ ΗΘΟΠΟΙΟΥ ΗΘΟΠΟΙΟΥ
(α) Για ποιο λόγο τα δεδοµένα καταχωρούνται σε δύο και όχι σε ένα πίνακα; Ποια είναι τα πλεονεκτήµατα
και τα µειονεκτήµατα των δύο αυτών µορφών οργάνωσης της πληροφορίας;
(β) Μελετώντας την τρέχουσα δοµή της βάσης δεδοµένων, θεωρείτε πως υπάρχει καλύτερος τρόπος
οργάνωσης της πληροφορίας σε πίνακες, και εάν ναι, ποιος είναι αυτός; Ποια είναι τα πλεονεκτήµατα
αυτού του νέου τρόπου οργάνωσης, σε σχέση µε την τρέχουσα δοµή της βάσης;
Η υλοποίηση του πίνακα ΤΑΙΝΙΑ στη Microsoft Access οδηγεί στο αποτέλεσµα του επόµενου σχήµατος:
Από τον παραπάνω πίνακα διαπιστώνουµε πως στη θέση νέας εγγραφής βρίσκονται ήδη
καταχωρηµένες οι τιµές µηδέν (0) σε ορισµένες από τις στήλες που περιέχονται σε αυτή. Αυτές είναι
και οι προεπιλεγµένες τιµές για τα πεδία που αντιστοιχούν σε αυτές τις στήλες. Η έννοια της
προεπιλεγµένης τιµής είναι πως εάν ο χρήστης δεν καταχωρήσει κάποια τιµή σε κάποιο πεδίο, τότε
κατά την αποθήκευση της εγγραφής στον πίνακα της βάσης, θα χρησιµοποιηθεί ως τιµή για αυτό το
πεδίο, η προεπιλεγµένη τιµή του. Ας θεωρήσουµε για παράδειγµα το σύστηµα µηχανογράφησης ενός
τριτοβάθµιου ιδρύµατος. Θεωρώντας πως όλοι οι φοιτητές που σπουδάζουν σε αυτό είναι ενήλικες –
δηλαδή πάνω από 18 ετών – µπορούµε να θέσουµε ως προεπιλεγµένη τιµή για την ηλικία του φοιτητή την
τιµή 18. Αυτό σηµαίνει πως αν ο υπάλληλος της Γραµµατείας δεν καταχωρήσει την ηλικία του
φοιτητή στην ατοµική του καρτέλα, θα αποδοθεί σε αυτό το πεδίο η τιµή 18, δηλαδή η
προεπιλεγµένη τιµή του.
ΠΑΡΑΤΗΡΗΣΗ (η κατανόηση αυτής της παραγράφου απαιτεί την γνώση εννοιών όπως είναι η
συσχέτιση, το ξένο κλειδί και οι κανόνες ακεραιότητας αναφοράς εγγραφών): ∆εν είναι δύσκολο να
διαπιστώσει κανείς, πως κάθε φορά που ο χρήστης προσθέτει σε κάποιο πίνακα ένα αριθµητικό πεδίο,
η Microsoft Access θέτει αυτόµατα ως προεπιλεγµένη τιµή για αυτό το πεδίο, την τιµή µηδέν. Αυτό
είναι κάτι που µπορεί να οδηγήσει σε προβληµατική συµπεριφορά της βάσης, εάν το εν λόγω πεδίο είναι
ξένο κλειδί, έχει δηλαδή τοποθετηθεί στον πίνακα για να υλοποιήσει τη συσχέτισή του µε κάποιο άλλο
πίνακα. Ας θεωρήσουµε για παράδειγµα το σύστηµα µηχανογράφησης µιας βιβλιοθήκης και τους
πίνακες BOOK και EDITOR στους οποίους καταχωρούνται στοιχεία βιβλίων και εκδοτικών οίκων
αντίστοιχα. Θεωρώντας πως η πολλαπλότητα της συσχέτισης που υφίσταται ανάµεσα στους δύο πίνακες,
είναι Ν:1, είναι προφανές πως η υλοποίηση της εν λόγω συσχέτισης, απαιτεί την προσθήκη στον
πίνακα BOOK του αριθµητικού πεδίου EditorId, που αποτελεί το πρωτεύον κλειδί του πίνακα
EDITOR. Εάν δεν θέσουµε κάποια προεπιλεγµένη τιµή για αυτό το πεδίο, αυτή θα τεθεί αυτόµατα στην
τιµή µηδέν. Εποµένως εάν κατά την καταχώρηση ενός νέου βιβλίου δεν ορίσουµε κάποιο κωδικό εκδότη,
το πεδίο EditorId θα λάβει τη µηδενική τιµή. Στην περίπτωση αυτή η ακεραιότητα αναφοράς
εγγραφών (referential integrity) θα διασφαλισθεί µόνο αν στον πίνακα EDITOR υπάρχει εγγραφή
εκδότη µε τιµή πρωτεύοντος κλειδιού ίση µε το µηδέν. Στην αντίθετη περίπτωση, θα λάβει χώρα
παραβίαση των κανόνων ακεραιότητας της βάσης δεδοµένων, διότι στον πίνακα BOOK θα υπάρχει
εγγραφή που θα παραπέµπει σε ανύπαρκτη εγγραφή του πίνακα EDITOR. Αλλά ακόµη και εάν υπάρχει
µία τέτοια εγγραφή, είναι πολύ πιθανό να λάβει χώρα συσχέτιση του νέου βιβλίου µε λάθος εκδότη. Για
το λόγο αυτό όταν προσθέτουµε ένα αριθµητικό πεδίο σε κάποιο πίνακα προκειµένου αυτό να
χρησιµοποιηθεί ως ξένο κλειδί που υλοποιεί κάποια συσχέτιση, είναι αναγκαίο να µη θέτουµε
προεπιλεγµένη τιµή για το πεδίο αυτό, και να αποδίδουµε στην παράµετρο αυτή την τιµή NULL.
ΕΡΓΑΣΤΗΡΙΟ 2
Στόχος του 2ου εργαστηρίου είναι η κατανόηση των συσχετίσεων που υφίστανται ανάµεσα στους
πίνακες της βάσης. Πιο συγκεκριµένα θα σχολιασθεί η αναγκαιότητα της ύπαρξης αυτών των
συσχετίσεων, και η δυνατότητα της ανάκτησης συνδυασµένης πληροφορίας που απορρέει από αυτές.
Επίσης θα µελετηθούν οι πράξεις της σύζευξης και του καρτεσιανού γινοµένου – τόσο σε θεωρητικό όσο
και σε πρακτικό επίπεδο – ενώ θα γίνει και η πρώτη αναφορά στη διαδικασία της κανονικοποίησης που
χρησιµοποιείται κατά τη φάση της σχεδίασης της δοµής του σχεσιακού σχήµατος.
ΘΕΩΡΗΤΙΚΗ ΕΙΣΑΓΩΓΗ
Συνήθως το κοινό πεδίο επί του οποίου εφαρµόζεται η πράξη της σύζευξης (το πεδίο αυτό ονοµάζεται
οδηγός της πράξης) αποτελεί κύριο κλειδί για τον ένα ή και για τους δύο πίνακες. Αυτό, όµως, δεν είναι
απαραίτητο να συµβαίνει πάντα. Στην ακραία περίπτωση κατά την οποία ο οδηγός της σύζευξης είναι το
κενό σύνολο, η πράξη της σύζευξης εκφυλίζεται στην πράξη του ΚΑΡΤΕΣΙΑΝΟΥ ΓΙΝΟΜΕΝΟΥ. Ας
σηµειωθεί πως δεν είναι υποχρεωτικό να εφαρµόσουµε τις πράξεις της σύζευξης και του καρτεσιανού
γινοµένου σε δύο διαφορετικούς πίνακες, καθώς οι πράξεις αυτές δύνανται να εφαρµοσθούν και επί δύο
διαφορετικών αντιγράφων του ίδιου πίνακα.
Ερώτηµα – κλειδί για την επιλογή ή την απόρριψη οδηγού στην εκτέλεση της πράξης της σύζευξης (και
του καρτεσιανού γινοµένου) ανάµεσα σε δύο πίνακες είναι το εξής: υπάρχει πληροφορία στο
αποτέλεσµα που επιστρέφει η συγκεκριµένη πράξη για τη συγκεκριµένη βάση πληροφοριών; Με
άλλα λόγια, έχει νόηµα η πραγµατοποίηση µιας τέτοιας πράξης, και εάν ναι, ποιο είναι αυτό;
ΑΣΚΗΣΗ 02.01
Στο προηγούµενο εργαστήριο ορίσαµε τη βάση ταινιών video η οποία περιέχει τους ακόλουθους πίνακες:
Στηριζόµενοι στην τρέχουσα δοµή της βάσης και στη θεωρητική εισαγωγή που παρουσιάζεται στην
προηγούµενη παράγραφο, να σχολιάσετε και να απαντήσετε τα επόµενα ερωτήµατα:
Έχει νόηµα η σύζευξη των πινάκων ΤΑΙΝΙΑ, Ας συµβολίσουµε τη σύζευξη των πινάκων ΤΑΙ-
ΣΥΜΜΕΤΟΧΗ µε οδηγό τις στήλες ΣΥΜΜΕ- ΝΙΑ και ΣΥΜΜΕΤΟΧΗ ως ΤΑΙ-
ΤΟΧΗ.Τίτλος και ΤΑΙΝΙΑ. Τίτλος; ΝΙΑ&ΣΥΜΜΕΤΟΧΗ. Στην περίπτωση αυτή
ισχύουν οι ακόλουθες προτάσεις:
Πως θα σχολιάζατε την σύζευξη των πινάκων
ΤΑΙΝΙΑ, ΣΥΜΜΕΤΟΧΗ µε οδηγό τις στήλες Οι στήλες στον πίνακα αποτέλεσµα δεν είναι
ΣΥΜΜΕΤΟΧΗ.Τίτλος και ΤΑΙΝΙΑ.Παραγωγή; απαραίτητο να διατηρούν τα ονόµατα που έχουν
στους αρχικούς πίνακες
Πως θα σχολιάζατε την εκτέλεση της πράξης του
καρτεσιανού γινοµένου ανάµεσα στους πίνακες Ο πίνακας ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ περιέχει το
ΤΑΙΝΙΑ και ΣΥΜΜΕΤΟΧΗ; σύνολο του πληροφοριακού περιεχοµένου της
βάσης.
Πως θα σχολιάζατε την εκτέλεση της πράξης του
καρτεσιανού γινοµένου ανάµεσα σε δύο αντί- Ερώτηση: Γιατί λοιπόν η πληροφορία βρίσκεται
γραφα του πίνακα ΤΑΙΝΙΑ; καταχωρηµένη σε δύο και όχι σε ένα πίνακα;
ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ
ΤΙΤΛΟΣ ΑΠΟΘ. ΑΠΟΘ. ΕΠΙΘΕΤΟ ΟΝΟΜΑ
ΠΑΡΑΓΩΓΗ ΤΙΜΗ
ΤΑΙΝΙΑΣ VHS BETA ΗΘΟΠΟΙΟΥ ΗΘΟΠΟΙΟΥ
ΚΑΝΟΝΙΚΟΠΟΙΗΣΗ
• Η κανονικοποίηση ελαττώνει τον χώρο που δεσµεύει η βάση στην περιφερειακή µνήµη
• Η κανονικοποίηση διευκολύνει την πράξη της εγγραφής νέας πληροφορίας στη βάση
• Η κανονικοποίηση διευκολύνει την πράξη της µεταβολής πληροφορίας στη βάση
• Η κανονικοποίηση αυξάνει την πιστότητα της βάσης πληροφοριών καθώς αποτρέπει την
καταχώρηση της ίδιας πληροφορίας περισσότερες από µία φορές (data redundancy).
ωστόσο ….
Η κανονικοποίηση οδηγεί στην αύξηση του υπολογιστικού κόστους επεξεργασίας για κάποια
ερωτήµατα προς τη βάση: οι πράξεις της σύζευξης και του καρτεσιανού γινοµένου κοστίζουν
ακριβά
ΑΣΚΗΣΗ 02.02
(α) Για το παράδειγµα της βάσης των ταινιών (β) Πόσες γραµµές θα έχει ο πίνακας-
video, πόσο επί τοις εκατό χώρο περιφερειακής αποτέλεσµα µετά την εκτέλεση της πράξης
µνήµης κερδίζουµε, όταν κάνουµε χρήση του του καρτεσιανού γινοµένου ανάµεσα στους
κανονικοποιηµένου σχεσιακού σχήµατος σε ΤΑΙΝΙΑ και ΣΥΜΜΕΤΟΧΗ; Σχολιάστε το
σχέση µε το µη κανονικοποιηµένο; κατά πόσο µπορεί να γίνει γενίκευση του
αποτελέσµατος αυτής της ερώτησης ώστε
Για απλότητα θεωρείστε ότι τα κελιά του πίνακα να ισχύει για τον πληθυσµό (σε γραµµές)
δεσµεύουν σταθερό χώρο µνήµης ανάλογα µε στο καρτεσιανό γινόµενο οποιωνδήποτε
τον τύπο της στήλης, ακόµη και όταν µένουν δύο πινάκων.
κενά.
ΕΡΓΑΣΤΗΡΙΟ 3
ΤΑΙΝΙΑ
ΤΡΑΓΟΥ∆Ι
∆ΙΑΝΟΜΕΑΣ
Σύµφωνα µε το συµβολισµό που χρησιµοποιήσαµε στο προηγούµενο εργαστήριο, η σχεσιακή δοµή της
βάσης µπορεί να γραφεί µε τη µορφή
Στην παραπάνω γραφή τα πεδία των πινάκων που είναι γραµµένα µε έντονους (bold) χαρακτήρες είναι
τα πρωτεύοντα κλειδιά τους (primary keys). Παρατηρούµε πως σε κάποιους πίνακες τα πρωτεύοντα
κλειδιά είναι σύνθετα πεδία, αποτελούνται δηλαδή από πολλά απλά πεδία.
Τα ερωτήµατα αυτού του είδους απευθύνονται προς το πληροφοριακό σύστηµα και έχουν ως αποτέλεσµα
την επιλεκτική ανάκτηση δεδοµένων. Για κάθε ερώτηµα επιλέγεται µία στρατηγική προσπέλασης σε
έναν ή περισσότερους πίνακες, και επεξεργασία του περιεχοµένου τους δια της χρήσης των τελεστών
της άλγεβρας πινάκων (γνωστή και ως σχεσιακή άλγεβρα). Το τελικό αποτέλεσµα της επεξεργασίας
επιστρέφεται στο χρήστη καταχωρηµένο σε κατάλληλα διαµορφωµένο πίνακα και εκτυπώνεται στον
εκτυπωτή ή προβάλλεται στην οθόνη. Το σχεσιακό σύστηµα διαχείρισης βάσης δεδοµένων δεν καταχωρεί
αποτελέσµατα στην περιφερειακή µνήµη εκτός και αν εµείς το καθοδηγήσουµε στο να κάνει κάτι τέτοιο.
Ο πίνακας ο οποίος µας πληροφορεί για το ποιος διανοµέας διανέµει ποιο τραγούδι
φέρει το όνοµα ∆ΙΑΝΟΜΗ ΤΡΑΓΟΥ∆ΙΟΥ. Εκεί ωστόσο δεν περιλαµβάνεται το
ΠΙΝΑΚΕΣ ΠΟΥ
όνοµα του καλλιτέχνη ο οποίος ερµηνεύει το κάθε τραγούδι, και εποµένως ο
ΕΜΠΛΕΚΟΝΤΑΙ
πίνακας ∆ΙΑΝΟΜΗ ΤΡΑΓΟΥ∆ΙΟΥ από µόνος του δεν επαρκεί. Χρειάζεται να
ΣΤΗ ΣΧΕ∆ΙΑΣΗ
γίνει σύζευξη των περιεχοµένων του µε τα περιεχόµενα του πίνακα ΤΡΑΓΟΥ∆Ι –
ΤΟΥ
στην περίπτωση αυτή ο οδηγός της πράξης της σύζευξης θα είναι η στήλη Τίτλος
ΕΡΩΤΗΜΑΤΟΣ
Τραγουδιού στον πίνακα ΤΡΑΓΟΥ∆Ι και η στήλη Όνοµα Τραγουδιού στον πίνακα
∆ΙΑΝΟΜΗ ΤΡΑΓΟΥ∆ΙΟΥ.
3) Στο τελευταίο βήµα της διαδικασίας θα πρέπει να λάβει χώρα η πράξη της
επιλογής επί του ενδιάµεσου πίνακα TABLE_2 έτσι ώστε να κρατήσουµε µόνο τις
στήλες οι οποίες µας ενδιαφέρουν και οι οποίες φέρουν τα ονόµατα Όνοµα
Ερµηνευτή και Επώνυµο Ερµηνευτή.
Από την ανάλυση που πραγµατοποιήθηκε στις προηγούµενες σελίδες, καθίσταται προφανές, πως το
σχεσιακό σχήµα της βάσης δεδοµένων (relational database schema) περιγράφει σε αρκετά µεγάλο
βαθµό, τη δοµή και οργάνωση της πληροφορίας η οποία καταχωρείται στους πίνακες της βάσης,
καθώς και τις συσχετίσεις των δεδοµένων στη συγκεκριµένη εφαρµογή. Υπό αυτή την έννοια, το
σχεσιακό σχήµα µοντελοποιεί την εφαρµογή και αποτελεί εναλλακτική µορφή της µεθοδολογίας των
διαγραµµάτων Οντοτήτων Συσχετίσεων (Entity Relationship Diagrams, ER Diagrams). Στην
προκειµένη περίπτωση, η διαδικασία ταυτοποίησης των οντοτήτων και των συσχετίσεων της εφαρµογής,
θα οδηγήσει στα ακόλουθα αποτελέσµατα:
Ο πίνακας ΣΥΜΜΕΤΟΧΗ δεν περιλαµβάνεται στα παραπάνω αποτελέσµατα, διότι χαρακτηρίζεται από
την ακόλουθη ιδιαιτερότητα: θα αποτελούσε συσχέτιση εάν υπήρχε πίνακας ΗΘΟΠΟΙΟΣ στον οποίο
θα καταχωρούσαµε επιπρόσθετα ατοµικά στοιχεία των ηθοποιών (για παράδειγµα, Ηλικία,
∆ιεύθυνση Κατοικίας, κ.λ.π.). Ο λόγος για τον οποίο υπάρχει στο παραπάνω σχήµα, είναι για να
αποφύγουµε την πολλαπλή καταχώρηση των στοιχείων ταινίας για εκείνες τις ταινίες στις οποίες
πρωταγωνιστούν περισσότεροι από ένας ηθοποιοί. Με εντελώς ανάλογο τρόπο, το ζεύγος των στηλών
Όνοµα Ηθοποιού και Επώνυµο Ηθοποιού, µπορεί να λάβει πολλαπλές τιµές για κάθε στιγµιότυπο της
οντότητας ΤΑΙΝΙΑ.
ΕΡΓΑΣΤΗΡΙΟ 4
Στα τρία προηγούµενα εργαστήρια έλαβε χώρα η µελέτη της σχεδίασης της βάσης ταινιών video και η
υλοποίησή της στη Microsoft Access. Στο στάδιο αυτό υποτίθεται πως έχει επέλθει η εξοικείωση των
φοιτητών µε τις βασικές έννοιες των σχεσιακών βάσεων δεδοµένων και πώς έχει λάβει χώρα η πλήρη
υλοποίηση της βάσης. Αυτό σηµαίνει πως οι πίνακες έχουν υλοποιηθεί, οι ιδιότητες των πεδίων των
πινάκων έχουν διαµορφωθεί σωστά, και οι εγγραφές που περιέχονται στο φυλλάδιο των
εργαστηριακών ασκήσεων, έχουν ήδη καταχωρηθεί στους πίνακες. Εάν κάποια από αυτές τις
διαδικασίες δεν έχει ακόµη ολοκληρωθεί, θα είναι καλό να πραγµατοποιηθεί πριν την ενασχόληση µε το
αντικείµενο του τέταρτου εργαστηρίου.
Στο επόµενο σχήµα παρουσιάζεται το µοντέλο οντοτήτων συσχετίσεων που περιγράφει µε διαγραµµατικό
τρόπο τη δοµή της βάσης ταινιών video. Οι φοιτητές θα πρέπει να έχουν τη δυνατότητα να κατανοήσουν τη
δοµή και τα χαρακτηριστικά του µοντέλου, κατανόηση, που απαιτεί τη γνώση της βασικής θεωρίας που
συσχετίζεται µε αυτή τη διαγραµµατική τεχνική. Αυτή η θεωρία περιλαµβάνεται στο 2ο κεφάλαιο των
σηµειώσεων του µαθήµατος και είναι διαθέσιµη µέσω του παγκόσµιου διαδικτύου.
Έχοντας κατανοήσει το µοντέλο οντοτήτων συσχετίσεων και το σχεσιακό σχήµα για την τρέχουσα µορφή
της βάσης ταινιών video ας περάσουµε τώρα στη βελτίωση του σχεσιακού σχήµατος, η οποία
συζητήθηκε για πρώτη φορά στο πρώτο εργαστήριο του µαθήµατος. Θεωρώντας πως για τον κάθε
ηθοποιό που συµµετέχει σε ταινία της βάσης καταχωρούµε και άλλες πληροφορίες εκτός από το
ονοµατεπώνυµό του, είναι προφανές πως απαιτείται η ύπαρξη ενός ακόµη πίνακα που φέρει το όνοµα
ΗΘΟΠΟΙΟΣ και ο οποίος χρησιµοποιείται για την καταχώρηση στοιχείων ηθοποιών. Ας υποθέσουµε
ακόµη πως για κάθε ηθοποιό καταχωρούµε το όνοµα και το επώνυµό του, τη διεύθυνση κατοικίας
του, το τηλέφωνό του, τον κωδικό αριθµό του και την ηλικία του – η επιλογή του τύπου δεδοµένων για
αυτά τα πεδία αφήνεται ως άσκηση στους φοιτητές του εργαστηρίου.
Η άλλη βελτίωση που µπορούµε να επιφέρουµε στο τρέχον σχεσιακό σχήµα, είναι η χρήση ενός κωδικού
αριθµού ως πρωτεύον κλειδί για τον πίνακα ΤΑΙΝΙΑ. Ποια πιστεύετε πως θα είναι η συνέπεια αυτής
της τροποποίησης του σχεσιακού σχήµατος, αφού ούτως ή άλλως, ο τίτλος της κάθε ταινίας (υποτίθεται
πως) είναι µοναδικός και εποµένως µπορεί να χρησιµοποιηθεί ως το πρωτεύον κλειδί για αυτόν τον
πίνακα;
Σε ποιες ταινίες ακούγονται τραγούδια που διανέµονται από την εταιρεία OBT;
Ποιων ταινιών τα τραγούδια διανέµονται σε CD η τιµή του οποίου είναι µεγαλύτερη από 4000 δραχµές;
Να ανακτηθούν τα ονοµατεπώνυµα των ηθοποιών που συµµετέχουν σε περισσότερες από µία ταινίες.
CASE STUDIES
Σύµφωνα µε το νέο ανανεωµένο σχέδιο µαθήµατος, µετά την ολοκλήρωση του 4ου εργαστηρίου, οι
φοιτητές θα πρέπει να αναλάβουν και να διεκπεραιώσουν ένα πρόβληµα µηχανογράφησης ενός
πληροφοριακού συστήµατος (case study). Οι λύσεις αυτών των ασκήσεων θα πρέπει να παραδοθούν
στους διδάσκοντες µετά την ολοκλήρωση του 8ου εργαστηρίου – όπου σύµφωνα µε το χρονοδιάγραµµα
θα έχει ολοκληρωθεί η παρουσίαση της Microsoft Access – και οι πιο άρτιες από αυτές θα παρουσιαστούν
από τους φοιτητές µετά την ολοκλήρωση του εργαστηρίου και πριν τη διεξαγωγή των εξετάσεων του
µαθήµατος. Στις επόµενες σελίδες ακολουθεί ένας κατάλογος τυπικών προβληµάτων µηχανογράφησης
πληροφοριακών συστηµάτων, από όπου οι φοιτητές µπορούν να διαλέξουν το πρόβληµα που θα
αναλάβουν να υλοποιήσουν. Εναλλακτικά οι φοιτητές έχουν τη δυνατότητα να προτείνουν το δικό τους
πρόβληµα – εφ’ όσον έχουν κάτι υπ’ όψιν – καθώς ούτως ή άλλως ο αριθµός των προτεινόµενων
προβληµάτων που ακολουθούν είναι ήδη περιορισµένος.
Το πρόβληµα αυτό παρουσιάζεται αναλυτικά στις σηµειώσεις του µαθήµατος και για το λόγο αυτό η
έµφαση δεν θα πρέπει να δοθεί τόσο στην ανάλυση και στη σχεδίαση της δοµής της βάσης, όσο στην
υλοποίηση του πληροφοριακού συστήµατος στη Microsoft Access. Σε γενικές γραµµές το πρόβληµα
αφορά τη λειτουργία µιας εταιρείας (COMPANY) η οποία υποδιαιρείται σε τµήµατα
(DEPARTMENTS) που απασχολούν υπαλλήλους (EMPLOYEES) σε διάφορα έργα (PROJECTS).
Ζητείται η ανάπτυξη ενός πληροφοριακού συστήµατος που θα επιτρέπει τη διαχείριση του
πληροφοριακού υλικού της βάσης, όπως την καταχώρηση υπαλλήλων, τµηµάτων και έργων, την
κατανοµή των υπαλλήλων σε τµήµατα και την ανάθεση έργων σε υπαλλήλους.
Η υλοποίηση αυτού του προβλήµατος απαιτεί την κατασκευή των πινάκων της βάσης, των
συσχετίσεων που υφίστανται ανάµεσά τους έτσι όπως αυτές υπαγορεύονται από το σχεσιακό σχήµα
της συγκεκριµένης εφαρµογής, και την καταχώρηση στους πίνακες, των εγγραφών που υπάρχουν
στις σηµειώσεις του µαθήµατος. Στο επόµενο βήµα της διαδικασία, θα πρέπει να υλοποιηθούν τα
ακόλουθα στοιχεία:
Φόρµες καταχώρησης δεδοµένων για υπαλλήλους, τµήµατα και έργα. Ιδιαίτερη έµφαση θα πρέπει να
δοθεί στην κατανοµή των υπαλλήλων στα τµήµατα της εταιρείας. Πιο συγκεκριµένα ο κωδικός του
τµήµατος στο οποίο θα τοποθετηθεί ο υπάλληλος δεν θα καταχωρηθεί µε το χέρι. Αντίθετα θα
κατασκευαστεί ένα πλαίσιο λίστας (list box) που θα εµφανίζει τον κατάλογο των διαθέσιµων τµηµάτων
της εταιρείας, και κάθε φορά που χρήστης θα επιλέγει κάποιο όνοµα τµήµατος, ο κωδικός αυτού του
τµήµατος θα επιστρέφεται και θα καταχωρείται στο πεδίο DNO της νέας εγγραφής του πίνακα
EMPLOYEE. Εντελώς ανάλογες τεχνικές θα εφαρµοσθούν σε όλες τις περιπτώσεις που απαιτούν την
απόδοση τιµής σε πεδίο πίνακα που έχει χαρακτηρισθεί ως ξένο κλειδί. Ποιο πιστεύετε πως είναι το
πλεονέκτηµα αυτής της διαδικασίας;
Να κατασκευαστεί φόρµα που θα εµφανίζει εντός πλαισίου λίστας τα ονόµατα των διαθέσιµων
τµηµάτων της εταιρείας. Όταν ο χρήστης επιλέγει κάποιο όνοµα τµήµατος, θα λαµβάνει χώρα εµφάνιση
των στοιχείων των υπαλλήλων που δουλεύουν σε αυτό (LNAME, FNAME, SSN, BDATE και SALARY)
σε κατάλληλα διαµορφωµένη υποφόρµα κάτω από την οποία θα υπάρχουν δύο άλλα πεδία που θα
εµφανίζουν το µέσο όρο του µισθού και της ηλικίας αυτών των υπαλλήλων. Αυτή η υποφόρµα θα
πρέπει να κατασκευαστεί µε τέτοιο τρόπο ώστε όταν ο χρήστης επιλέξει ένα όνοµα υπαλλήλου σε αυτή,
να εµφανιστεί – σε άλλη υποφόρµα – το όνοµα και η τοποθεσία των έργων στα οποία απασχολείται,
καθώς επίσης ο εβδοµαδιαίος αριθµός των ωρών ενασχόλησης σε αυτό το έργο.
Να κατασκευαστεί φόρµα που να εµφανίζει πλαίσιο λίστας µε τα προσωπικά στοιχεία των υπαλλήλων της
εταιρίας (LNAME, FNAME και SSN). Όταν ο χρήστης επιλέγει κάποιο όνοµα από αυτό το πλαίσιο, θα
λαµβάνει χώρα εµφάνιση των στοιχείων των προστατευόµενων µελών για αυτόν τον υπάλληλο (NAME,
SEX, BDATE, RELATIONSHIP) σε κατάλληλα διαµορφωµένη υποφόρµα.
Για τους πίνακες της βάσης που περιέχουν στοιχεία υπαλλήλων, τµηµάτων και έργων, να κατασκευαστούν
κατάλληλα διαµορφωµένες αναφορές που να εµφανίζουν τα περιεχόµενά τους.
∆ίδεται το µοντέλο οντοτήτων συσχετίσεων του επόµενου σχήµατος που περιγράφει τη δοµή του
συστήµατος µηχανογράφησης µιας βιβλιοθήκης.
Με τη βοήθεια αυτού του µοντέλου να σχεδιάσετε το σχεσιακό σχήµα του συστήµατος διαχείρισης
βιβλιοθήκης. Για κάθε πίνακα να ορίσετε τη δοµή του, τον τύπο δεδοµένων των πεδίων του και το
πρωτεύον κλειδί του.
Για κάθε έναν από τους πίνακες που συσχετίζονται µε το ΒΙΒΛΙΟ, τον ΕΚ∆ΟΤΗ, το ΣΥΓΓΡΑΦΕΑ και
το ∆ΑΝΕΙΖΟΜΕΝΟ να κατασκευάσετε φόρµες καταχώρησης εγγραφών δια της χρήσης των οποίων θα
καταχωρούνται νέα στοιχεία στους πίνακες της βάσης.
Να κατασκευαστεί φόρµα δανεισµού βιβλίων που να επιτρέπει το δανεισµό βιβλίου σε κάποιο πρόσωπο.
Το όνοµα του δανειζόµενου προσώπου θα επιλέγεται από κατάλληλα διαµορφωµένο πλαίσιο λίστας
διαδικασία που θα έχει ως αποτέλεσµα την εµφάνιση σε υποφόρµα των βιβλίων που έχει ήδη δανεισθεί
το συγκεκριµένο άτοµο καθώς και την ηµεροµηνία δανεισµού και επιστροφής για αυτά τα βιβλία. Η
επιλογή του βιβλίου προς δανεισµό θα γίνεται και αυτή από λίστα η οποία θα εµφανίζει µόνο εκείνα τα
βιβλία που υπάρχουν στη βιβλιοθήκη έτσι ώστε να αποκλειστεί η πιθανότητα δανεισµού ενός βιβλίου το
απόθεµα του οποίου έχει ήδη εξαντληθεί.
Να κατασκευαστεί φόρµα που θα εµφανίζει συγκεντρωτικά στοιχεία για τα βιβλία που έχουν
δανεισθεί. Πιο συγκεκριµένα ο χρήστης θα πρέπει να πληκτρολογεί µια ηµεροµηνία και πατώντας ένα
κουµπί να ενηµερώνονται δύο υποφόρµες. Από αυτές τις υποφόρµες η µία θα εµφανίζει τα βιβλία τα
οποία θα έπρεπε να είχαν ήδη επιστραφεί – αυτό σηµαίνει πως η ηµεροµηνία που καταχώρησε ο χρήστης
είναι µεταγενέστερη από την ηµεροµηνία επιστροφής – ενώ η δεύτερη θα εµφανίζει όλα τα υπόλοιπα
δανειζόµενα βιβλία – εκείνα η ηµεροµηνία επιστροφής των οποίων δεν έχει παρέλθει ακόµη. Για κάθε
βιβλίο θα εµφανίζεται ο τίτλος του, ο κωδικός ISBN, το όνοµα και το επώνυµο του προσώπου που το
δανείστηκε, και οι ηµεροµηνίες δανεισµού και επιστροφής.
Να κατασκευαστεί φόρµα που να εµφανίζει το σύνολο των βιβλίων της βιβλιοθήκης. Όταν ο χρήστης
επιλέξει κάποιο βιβλίο, θα πρέπει να έχει τη δυνατότητα – πατώντας ένα κουµπί εντολής – να εµφανίσει
την καρτέλα µε τα στοιχεία του επιλεγµένου βιβλίου.
Να κατασκευαστεί ηµερήσια αναφορά που για την τρέχουσα ηµεροµηνία να εµφανίζει τα στοιχεία των
βιβλίων (και πιο συγκεκριµένα τον τίτλο του, τον κωδικό ISBN και το ονοµατεπώνυµο του
προσώπου που το δανείστηκε) που θα πρέπει να επιστραφούν µέχρι το τέλος της ηµέρας ή έχουν ήδη
καθυστερήσει.
∆ίδεται το ακόλουθο σχεσιακό σχήµα το οποίο αφορά τη δοµή του πληροφοριακού συστήµατος
διαχείρισης αγορών και πωλήσεων µιας αποθήκης:
ΠΡΟΪΟΝ (Κωδικός, Όνοµα, Τιµή, Ποσότητα, Μονάδα Μέτρησης, Κωδικός Κατηγορίας Προϊόντος)
ΚΑΤΗΓΟΡΙΑ ΠΡΟΪΟΝΤΟΣ (Κωδικός Κατηγορίας, Όνοµα Κατηγορίας)
ΠΕΛΑΤΗΣ (Κωδικός, Επώνυµο, Όνοµα, ∆ιεύθυνση, Τηλέφωνο, ΑΦΜ)
ΠΡΟΜΗΘΕΥΤΗΣ (Κωδικός, Επώνυµο, Όνοµα, ∆ιεύθυνση, Τηλέφωνο, ΑΦΜ)
ΠΩΛΗΣΗ (Κωδικός Πελάτη, Κωδικός Προϊόντος, Ηµεροµηνία Αγοράς, Ποσότητα, Έκπτωση)
ΑΓΟΡΑ (Κωδικός Προµηθευτή, Κωδικός Προϊόντος, Ηµεροµηνία Αγοράς, Ποσότητα, Έκπτωση)
Να κατασκευαστούν φόρµες καταχώρησης δεδοµένων για τα προϊόντα, τους πελάτες και τους
προµηθευτές και να υλοποιηθούν οι µηχανισµοί καταγραφής αγορών και πωλήσεων. Η αγορά ενός
προϊόντος από κάποιο προµηθευτή, θα περιλαµβάνει την εµφάνιση των στοιχείων των προϊόντων και των
προµηθευτών σε κατάλληλα διαµορφωµένα πλαίσια λίστας (list boxes) από όπου ο χρήστης θα µπορεί να
επιλέγει ποια προϊόντα θα αγορασθούν και από ποιους προµηθευτές. Με εντελώς ανάλογο τρόπο θα
λαµβάνει χώρα η καταγραφή µιας πώλησης. Το σύστηµα θα πρέπει επίσης να διαχειρίζεται τις ποσότητες
των προϊόντων εµφανίζοντας πάντοτε τις τρέχουσες τιµές τους. Πιο συγκεκριµένα, εάν λάβει χώρα
προµήθεια Ν τεµαχίων του Χ προϊόντος αυτή η τιµή θα πρέπει να προστίθεται στην υπάρχουσα
ποσότητα, έτσι ώστε κάθε φορά να γνωρίζουµε τη σωστή ποσότητα των προϊόντων της αποθήκης.
Με εντελώς ανάλογο τρόπο, η πώληση ποσότητας προϊόντος σε πελάτη θα οδηγεί στην αφαίρεση αυτής
της ποσότητας από την τρέχουσα τιµή της. Εάν διαπιστωθεί πως η ποσότητα που παράγγειλε ο πελάτης
υπερβαίνει την ποσότητα του προϊόντος στην αποθήκη, ή εάν το προϊόν αυτό έχει εξαντληθεί, η εφαρµογή
θα πρέπει να εµφανίζει ένα µήνυµα λάθους και να µην προχωρά στη διεκπεραίωση της δοσοληψίας.
Σε µία βελτιωµένη έκδοση της εφαρµογής, µπορούµε για κάθε προϊόν να ορίσουµε ένα όριο ασφαλείας,
πέραν του οποίου θα ενεργοποιείται ο µηχανισµός επαναπαραγγελίας του προϊόντος από τον
προµηθευτή.
Να κατασκευαστεί φόρµα µε όνοµα ΤΙΜΟΛΟΓΙΟ ΠΩΛΗΣΗΣ η οποία για κάθε πελάτη θα εµφανίζει
το περιεχόµενο της τρέχουσας παραγγελίας του. Πιο συγκεκριµένα, ο χρήστης θα επιλέγει το επώνυµο
του πελάτη από κατάλληλα διαµορφωµένο πλαίσιο λίστας. Η επιλογή αυτή θα έχει ως αποτέλεσµα την
πλήρωση µιας υποφόρµας µε ένα πλήθος εγγραφών κάθε µία από τις οποίες θα περιλαµβάνει τον
κωδικό και το όνοµα του εκάστοτε προϊόντος, την ποσότητα παραγγελίας για αυτό το προϊόν, το
ποσοστό έκπτωσης και τη συνολική τιµή της παραγγελίας πριν και µετά την έκπτωση. Εάν η
παραγγελία περιλαµβάνει περισσότερα από ένα προϊόντα, θα πρέπει στο τέλος της φόρµας να εµφανίζεται
µία γραµµή που να εκτυπώνει το ποσό που οφείλει ο πελάτης στην εταιρεία για το σύνολο της
παραγγελίας, πριν και µετά την έκπτωση. Εάν ο πελάτης που έχει επιλεγεί έχει πραγµατοποιήσει
περισσότερες από µία παραγγελίες, η φόρµα θα πρέπει να έχει τη δυνατότητα εµφάνισης όλων αυτών
των παραγγελιών – µια παραγγελία σε κάθε σελίδα – και ο χρήστης θα πρέπει να µπορεί να
µετακινηθεί ανάµεσα σε αυτές τις παραγγελίες χρησιµοποιώντας τα κατάλληλα πλήκτρα πλοήγησης
(navigation buttons). Σε κάθε µια από τις παραπάνω περιπτώσεις η εφαρµογή θα πρέπει να εµφανίζει και
την ηµεροµηνία της τρέχουσας παραγγελίας. Τυπικό παράδειγµα τιµολογίου – που δεν εµφανίζει
ωστόσο το σύνολο της πληροφορίας που ζητείται σε αυτή την άσκηση – παρουσιάζεται στο επόµενο
σχήµα.
Στόχος αυτής της εργασίας είναι η σχεδίαση και η υλοποίηση ενός πληροφοριακού συστήµατος που θα
διαχειρίζεται κρατήσεις θέσεων σε αµαξοστοιχίες του Οργανισµού Σιδηροδρόµων Ελλάδος (ΟΣΕ).
Η ανάπτυξη αυτής της εφαρµογής, θα πρέπει να λάβει χώρα θεωρώντας ότι ισχύουν οι ακόλουθες
παραδοχές:
Η κάθε αµαξοστοιχία χαρακτηρίζεται από ένα κωδικό, από κάποιο όνοµα (για παράδειγµα η αµαξοστοιχία
ΒΕΡΓΙΝΑ του Intercity χαρακτηρίζεται από τον κωδικό αριθµό 70) και περιέχει ένα συγκεκριµένο
πλήθος από βαγόνια. Για κάθε βαγόνι καταχωρούµε τον κωδικό του, το όνοµά του (εάν υπάρχει κάποιο
όνοµα), τον κωδικό της κατηγορίας στην οποία ανήκει (Α’ ή Β’ θέση) και το πλήθος των θέσεων που
περιέχει. Τέλος για κάθε θέση καταχωρούµε τον κωδικό της, τον κωδικό του βαγονιού που την περιέχει,
τη θέση της µέσα στο βαγόνι (εάν είναι δίπλα σε παράθυρο ή όχι), καθώς και το εάν είναι θέση
καπνιστών ή µη καπνιστών.
Η κάθε µία από τις θέσεις των βαγονιών κρατείται για έναν ή περισσότερους επιβάτες (η τελευταία
περίπτωση δεν αναφέρεται σε διπλοκράτηση, η οποία σαφώς θα πρέπει να αποφεύγεται: απλά όταν ένας
επιβάτης κρατήσει µία θέση για µια διαδροµή από τη Θεσσαλονίκη µέχρι την Κατερίνη, η ίδια θέση
θα πρέπει στη συνέχεια να µπορεί να χορηγηθεί σε κάποιον που ταξιδεύει από Λάρισα προς Αθήνα –
οι δύο διαδροµές δεν επικαλύπτονται). Για κάθε επιβάτη καταχωρούµε τον κωδικό του, το όνοµα και το
επώνυµό του, το τηλέφωνο και την ηλικία του καθώς και τον αριθµό του φορολογικού του µητρώου. Οι
πληροφορίες που καταχωρούνται για την κάθε κράτηση, περιλαµβάνουν ακόµη την ηµεροµηνία και ώρα
αναχώρησης της αµαξοστοιχίας, τον κωδικό των πόλεων προέλευσης και προορισµού (αυτές οι πόλεις
θα επιλέγονται από κατάλληλα διαµορφωµένα πλαίσια λίστας (list boxes)), την τιµή της θέσης, και τον
τρόπο πληρωµής του αντιτίµου του εισιτηρίου (τοις µετρητοίς, επί πιστώσει, µε αντικαταβολή, κ.λ.π.).
Το σύστηµα κράτησης σιδηροδροµικών θέσεων θα πρέπει να είναι κατάλληλα σχεδιασµένο ώστε να µην
επιτρέπει την καταχώρηση µιας θέσης σε περισσότερους από έναν επιβάτες – αυτό σηµαίνει µεταξύ
των άλλων πως αν δεν υπάρχουν ελεύθερες θέσεις, η διαδικασία κράτησης µιας θέσης δεν θα πρέπει
να είναι επιτρεπτή. Εάν ο επιβάτης ακυρώσει την κράτηση, η θέση αυτή θα πρέπει να αποδεσµεύεται
έτσι ώστε να µπορέσει να καταχωρηθεί σε άλλο επιβάτη, και ο επιβάτης θα µπορεί να λαµβάνει πίσω το
αντίτιµο του εισιτηρίου, είτε ολόκληρο, εάν η ακύρωση γίνει πέντε µέρες ή περισσότερο πριν την
πραγµατοποίηση του δροµολογίου, είτε µειωµένο (λόγω παρακράτησης ποσοστού της αξίας του
εισιτηρίου) εάν η ακύρωση γίνει σε µεταγενέστερη χρονική στιγµή. Αυτό το ποσοστό παρακράτησης
θα υπολογίζεται µε βάση τα περιεχόµενα του επόµενου πίνακα:
Αριθµός ηµερών που µεσολαβούν ανάµεσα στην Ποσοστό επί της συνολικής αξίας του εισιτη-
ηµεροµηνία ακύρωσης της κράτησης και στην ρίου που παρακρατείται λόγω της ακύρωσης
ηµεροµηνία πραγµατοποίησης του δροµολογίου κράτησης της θέσης.
Να κατασκευάσετε φόρµες καταχώρησης δεδοµένων δια της χρήσης των οποίων θα είναι δυνατή η
εισαγωγή στοιχείων για τις αµαξοστοιχίες, τα βαγόνια και τις θέσεις τους, καθώς και η διαδικασία
κράτησης θέσεως για επιβάτες. Τα στοιχεία της θέσης και του προσώπου στον οποίο αυτή αποδίδεται θα
επιλέγονται από κατάλληλα διαµορφωµένα πλαίσια λίστας ενώ µε ανάλογο τρόπο θα καταχωρούνται και
τα στοιχεία που αφορούν τα σηµεία επιβίβασης και προορισµού. Όπως έχει ήδη αναφερθεί σε
προηγούµενη παράγραφο, θα πρέπει να δοθεί ιδιαίτερη έµφαση στη διαδικασία αποτροπής καταχώρησης
της ίδιας θέσης σε διαφορετικά πρόσωπα – εκτός εάν τα µήκη διαδροµής τους δεν επικαλύπτονται. Να
υλοποιηθεί επίσης το σύστηµα ακύρωσης κράτησης θέσεως. Για κάθε τέτοια ακύρωση η εφαρµογή θα
πρέπει να έχει τη δυνατότητα να υπολογίζει το ποσό που θα παρακρατείται από το αρχικό αντίτιµο του
εισιτηρίου µε βάση τα στοιχεία του πίνακα που παρατίθεται στην προηγούµενη παράγραφο.
Να ανακτηθούν τα ονόµατα και τα επώνυµα των επιβατών που έχουν κρατήσει θέση µη καπνιστή σε
παράθυρο σε όλα τα βαγόνια Β’ θέσης της αµαξοστοιχίας Βεργίνα που θα αναχωρήσει από τη
Θεσσαλονίκη µε προορισµό την Αθήνα στις 15 Νοεµβρίου 2003 και στις 13:45 το µεσηµέρι. Πόσοι από
αυτούς τους επιβάτες πρόκειται να αποβιβασθούν στη Λάρισα;
Για τη διαδροµή της αµαξοστοιχίας Βεργίνα που θεωρήθηκε στην προηγούµενη άσκηση να ανακτήσετε για
κάθε βαγόνι τον κωδικό του, το όνοµά του (εάν υπάρχει) και τον αριθµό των κενών θέσεων που περιέχει
(δηλαδή των θέσεων για τις οποίες δεν έχει γίνει κράτηση).
Να ανακτηθεί το όνοµα και το επώνυµο των προσώπων µε τη µεγαλύτερη και τη µικρότερη ηλικία που
επιβαίνουν σε οποιοδήποτε βαγόνι της Α’ θέσης της αµαξοστοιχίας ΦΙΛΙΠΠΟΣ που ξεκίνησε από την
Αλεξανδρούπολη µε προορισµό την Αθήνα στις 20 ∆εκεµβρίου 2003 και στις 7:30 το πρωί.
Για τη διαδροµή της αµαξοστοιχίας ΦΙΛΙΠΠΟΣ που θεωρήθηκε στην προηγούµενη άσκηση να
ανακτηθούν τα ονόµατα και τα επώνυµα των επιβατών που στις 17 ∆εκεµβρίου 2003 προχώρησαν σε
ακύρωση της κράτησης της θέσης τους, καθώς και ο µέσος όρος του χρηµατικού ποσού που
παρακρατήθηκε από τον Οργανισµό επί της αρχικής αξίας του εισιτηρίου.
Για δεδοµένη ηµεροµηνία που θα καταχωρείται από το χρήστη, να κατασκευαστεί αναφορά η οποία θα
εµφανίζει κατάσταση επιβίβασης της αµαξοστοιχίας ΒΕΡΓΙΝΑ µε τα επώνυµα των επιβατών να
εµφανίζονται κατά αύξουσα ταξινόµηση οµαδοποιηµένα ως προς τον κωδικό του βαγονιού στο οποίο
επιβαίνουν. Για κάθε επιβάτη να εµφανίζεται το επώνυµο, το όνοµα και η ηλικία του, καθώς και ο αριθµός
θέσης στην οποία ταξιδεύει. Επίσης δίπλα στο όνοµα του κάθε βαγονιού να εµφανίζεται η επί τοις εκατό
πληρότητά του, δηλαδή το επί τοις εκατό ποσοστό των θέσεών του που έχουν χορηγηθεί στους επιβάτες
της αµαξοστοιχίας σε σχέση µε το συνολικό αριθµό θέσεων που περιέχει.
Σε κάθε εφαρµογή µηχανογράφησης που απαιτεί την ανάπτυξη ενός πληροφοριακού συστήµατος, η
διαδικασία που ακολουθείται περιλαµβάνει τα τρία γνωστά στάδια που φέρουν τα ονόµατα ανάλυση,
σχεδιασµός και υλοποίηση. Στην προκειµένη περίπτωση ωστόσο, η διαδικασία της ανάλυσης δεν είναι
αναγκαία – αφού οι προδιαγραφές του προβλήµατος και οι απαιτήσεις των χρηστών δίδονται µαζί µε το
πρόβληµα – και το µόνο που απαιτείται είναι ο σωστός σχεδιασµός και η υλοποίηση της εφαρµογής. Εάν η
εκφώνηση του προβλήµατος περιλαµβάνει το µοντέλο οντοτήτων συσχετίσεων, η διαδικασία περιορίζεται
στην αναγωγή του µοντέλου αυτού στο ισοδύναµο σχεσιακό µοντέλο. Στην προκειµένη περίπτωση για
καθαρά εκπαιδευτικούς σκοπούς µπορεί να ζητηθεί και η αντίστροφη διαδικασία, δηλαδή στηριζόµενοι
στη δοµή του σχεσιακού µοντέλου να ζητηθεί η κατασκευή του µοντέλου οντοτήτων συσχετίσεων. Σε
κάθε περίπτωση, θα πρέπει να λάβει χώρα η δηµιουργία και διαµόρφωση των πινάκων στη Microsoft
Access, καθώς και η υλοποίηση των συσχετίσεων που υφίστανται ανάµεσά τους. Μετά την ολοκλήρωση
των παραπάνω διαδικασιών θα είναι καλό να καταχωρηθούν ενδεικτικές εγγραφές στους πίνακες έτσι ώστε
να είναι δυνατός ο έλεγχος τόσο της ορθότητας των αποτελεσµάτων που επιστρέφονται από τα ερωτήµατα
της βάσης όσο και της ισχύος των κανόνων ακεραιότητας αναφοράς στην περίπτωση εισαγωγής,
διαγραφής και τροποποίησης των σχετικών εγγραφών.
Στο σηµείο αυτό έχει τυπικά ολοκληρωθεί η σχεδίαση και η υλοποίηση της βάσης και ο χρήστης µπορεί να
περάσει στην υλοποίηση των υπόλοιπων στοιχείων όπως είναι οι φόρµες, οι εκθέσεις και τα ερωτήµατα.
ΕΡΓΑΣΤΗΡΙΟ 5
Μετά την ολοκλήρωση της σχεδίασης της δοµής της βάσης δεδοµένων ακολουθεί η σχεδίαση του
περιβάλλοντος αλληλεπίδρασης της εφαρµογής µε το χρήστη. Αυτό το περιβάλλον στη Microsoft Access
περιλαµβάνει την κατασκευή φορµών καταχώρησης δεδοµένων και τη δηµιουργία αναφορών δια της
χρήσης των οποίων είναι δυνατή η προεπισκόπηση και η εκτύπωση των δεδοµένων των πινάκων της
βάσης. Ας σηµειωθεί ωστόσο πως αυτά τα δεδοµένα µπορεί να προέρχονται όχι µόνο από τους πίνακες
αλλά και από κατάλληλα σχεδιασµένα ερωτήµατα. Στο εργαστήριο αυτό – καθώς και στο επόµενο – θα
ασχοληθούµε µε την κατασκευή φορµών καταχώρησης δεδοµένων ενώ στα επόµενα εργαστήρια θα
ασχοληθούµε µε την κατασκευή αναφορών που θα λαµβάνουν και θα εµφανίζουν δεδοµένα τόσο από τους
πίνακες όσο και από τα ερωτήµατα της εφαρµογής.
Το σχεσιακό σχήµα βάσης δεδοµένων που θα χρησιµοποιηθεί στα επόµενα εργαστήρια, είναι αυτό της
διαχείρισης ταινιών video που έχει ήδη παρουσιαστεί σε προηγούµενες ενότητες. Ωστόσο η δοµή της
βάσης έχει τροποποιηθεί έτσι ώστε να γίνει πιο παραµετρική και να χαρακτηρίζεται από µεγαλύτερη
ταχύτητα και ευελιξία όσον αφορά τη διαδικασία καταχώρησης και ανάκτησης δεδοµένων. Το νέο
σχεσιακό σχήµα της εφαρµογής διαχείρισης ταινιών video παρουσιάζεται στη συνέχεια (τα πεδία εκείνα
που παρουσιάζονται µε έντονη γραφή (bold) είναι τα πρωτεύοντα κλειδιά των πινάκων της βάσης).
ΟΝΟΜΑ ∆ΟΜΗ
ΠΙΝΑΚΑ ΠΙΝΑΚΑ
Έχοντας ολοκληρώσει τη σχεδίαση και υλοποίηση της βάσης στη Microsoft Access µπορούµε τώρα να
περάσουµε στην υλοποίηση των φορµών αλληλεπίδρασης µε το χρήστη ξεκινώντας από την κατασκευή
της κεντρικής οθόνης. Συνήθως αυτή η οθόνη εµφανίζει κάποιο λογότυπο και επιτρέπει την
πραγµατοποίηση των βασικών µορφών διαχείρισης των δεδοµένων της εφαρµογής. Ακολουθώντας αυτή
την προσέγγιση µπορούµε να κατασκευάσουµε την κεντρική οθόνη σύµφωνα µε το πρότυπο που
παρουσιάζεται στο επόµενο σχήµα:
∆εν είναι δύσκολο να διαπιστώσει κανείς, πως η λειτουργικότητα αυτής της οθόνης χαρακτηρίζεται από
την ύπαρξη των ακόλουθων πλαισίων ελέγχου (form controls):
(α) Την οµάδα επιλογών ΟΝΤΟΤΗΤΕΣ που περιέχει τις επιλογές ΤΑΙΝΙΕΣ, ΤΡΑΓΟΥ∆ΙΑ, ΗΘΟΠΟΙΟΙ,
ΕΡΜΗΝΕΥΤΕΣ και ∆ΙΑΝΟΜΕΙΣ. Χρησιµοποιώντας αυτή την οµάδα, µπορούµε να καθορίσουµε τον
τύπο της πληροφορίας που επιθυµούµε να διαχειρισθούµε.
(β) Την οµάδα επιλογών ∆ΙΑ∆ΙΚΑΣΙΕΣ που περιέχει τις επιλογές ΕΙΣΑΓΩΓΗ, ∆ΙΑΓΡΑΦΗ,
ΚΑΤΑΛΟΓΟΣ, ΕΡΩΤΗΜΑΤΑ, ΕΚΤΥΠΩΣΕΙΣ. Χρησιµοποιώντας αυτή την οµάδα µπορούµε να
καθορίσουµε το είδος της επεξεργασίας που θέλουµε να πραγµατοποιήσουµε για τον επιλεγµένο τύπο
οντότητας.
Είναι προφανές πως η χρήση αυτών των δύο οµάδων επιλογών καθορίζει µε µοναδικό τρόπο το είδος της
διαδικασίας που επιθυµούµε να πραγµατοποιήσουµε. Στο παράδειγµα του προηγούµενου σχήµατος η
χρήση των επιλογών ΤΑΙΝΙΕΣ (στην οµάδα ΟΝΤΟΤΗΤΕΣ) και ΕΙΣΑΓΩΓΗ (στην οµάδα διαδικασίες)
σηµαίνει πως ο χρήστης επιθυµεί να προχωρήσει στην εισαγωγή µιας νέας ταινίας στη βάση δεδοµένων
της εφαρµογής.
(γ) Το κουµπί εντολής που φέρει τον τίτλο «ΕΚΚΙΝΗΣΗ ΕΠΙΛΕΓΜΕΝΗΣ ∆ΙΑΧΕΙΡΙΣΗΣ» και το οποίο
ανοίγει την κατάλληλη σε κάθε περίπτωση φόρµα για αλληλεπίδραση µε το χρήστη. Στο παράδειγµα του
προηγούµενου σχήµατος, η χρήση αυτού του κουµπιού εντολής έχει ως αποτέλεσµα την εµφάνιση της
φόρµας καταχώρησης νέας ταινίας.
(δ) Το κουµπί εντολών που φέρει τον τίτλο «ΒΟΗΘΗΤΙΚΕΣ ΕΡΓΑΣΙΕΣ» το οποίο εάν χρησιµοποιηθεί
εµφανίζει τη φόρµα βοηθητικών εργασιών από όπου µπορούµε να καταχωρήσουµε πληροφορίες που
αφορούν τη διανοµή ταινιών και τραγουδιών, τη συµµετοχή ηθοποιών σε ταινίες, την ερµηνεία τραγουδιών
από ερµηνευτές, κ.λ.π.
Για να κατασκευάσουµε την κεντρική φόρµα θα πρέπει να επιλέξουµε τη διαδικασία νέας φόρµας σε
προβολή σχεδίασης και να ορίσουµε τα γενικά χαρακτηριστικά της χρησιµοποιώντας το φύλλο ιδιοτήτων
της. Στην προκειµένη περίπτωση η ύπαρξη του λογότυπου «Sound and Video Gallery» στην επιφάνεια της
φόρµας, καθιστά περιττή τη διαδικασία καθορισµού κάποιου τίτλου – για να αφαιρέσουµε τον τίτλο της
φόρµας πρέπει να ανοίξουµε το φύλλο ιδιοτήτων της, να µεταφερθούµε στη σελίδα «Μορφή», να
τοποθετήσουµε το δείκτη του ποντικιού στο πεδίο «Λεζάντα» και να πατήσουµε µία ή περισσότερες φορές
το πλήκτρο Space του πληκτρολογίου. Όσον αφορά τα υπόλοιπα χαρακτηριστικά εµφάνισης της φόρµας,
αυτή θα πρέπει να είναι όσο το δυνατό πιο απλή έτσι ώστε να µπορεί να χρησιµοποιηθεί εύκολα από το
χρήστη. Για το λόγο αυτό τόσο σε αυτή τη φόρµα όσο και σε όλες τις φόρµες τις εφαρµογής, έχουν
αφαιρεθεί τα πιο πολλά από τα χαρακτηριστικά εµφάνισης της φόρµας, όπως είναι οι γραµµές κύλισης, οι
δείκτες επιλογής εγγραφών και τα κουµπιά µετακίνησης (µε εξαίρεση τις φόρµες που εµφανίζουν
συγκεντρωτικά στοιχεία), οι διαχωριστικές γραµµές, το πλαίσιο ελέγχου, τα κουµπιά ελαχιστοποίησης και
µεγιστοποίησης, και το κουµπί «τι είναι». Ακόµη έχει απενεργοποιηθεί η αυτόµατη αλλαγή µεγέθους, ενώ
το στυλ περιγράµµατος έχει γίνει λεπτό έτσι ώστε να µην είναι δυνατή η αλλαγή του µεγέθους της,
διαδικασία, η οποία ίσως µπερδέψει το χρήστη. Το τµήµα του φύλλου ιδιοτήτων της φόρµας που περιέχει
τις τιµές που έχουν χρησιµοποιηθεί για όλες τις παραπάνω ιδιότητες, παρουσιάζεται στο επόµενο σχήµα:
Η τελευταία πολύ σηµαντική ιδιότητα που πρέπει να τεθεί για όλες τις φόρµες της εφαρµογής είναι ο
χαρακτηρισµός της φόρµας ως αποκλειστικής (modal) έτσι ώστε ο χρήστης να µην έχει τη δυνατότητα
χρήσης κάποιου άλλου στοιχείου της εφαρµογής, πριν τελειώσει την αλληλεπίδρασή του µαζί της (δηλαδή
ουσιαστικά πριν την κλείσει). Για να χαρακτηρίσουµε µια φόρµα ως αποκλειστική θα πρέπει να
µεταφερθούµε στη σελίδα «Άλλα (Others)» του φύλλο ιδιοτήτων της και στην ιδιότητα «Αποκλειστική» να
καταχωρήσουµε την τιµή «Ναι».
Στόχος αυτής της παραγράφου είναι η περιγραφή της διαδικασίας κατασκευής της οµάδας επιλογών που
φέρει τον τίτλο ΟΝΤΟΤΗΤΕΣ. Έχοντας κατανοήσει και εφαρµόσει αυτή τη διαδικασία, οι φοιτητές θα
πρέπει να στη συνέχεια να κατασκευάσουν µε την ίδιο τρόπο την οµάδα επιλογών για τις ∆ΙΑ∆ΙΚΑΣΙΕΣ
της εφαρµογής.
Για να κατασκευάσουµε αυτό το πλαίσιο ελέγχου, επιλέγουµε το στοιχείο «Οµάδα επιλογών» από την
εργαλειοθήκη, προσέχοντας ώστε το κουµπί του οδηγού στοιχείων ελέγχου (control wizard) να είναι
ενεργοποιηµένο (πατηµένο προς τα κάτω) . Εάν στη συνέχεια πατήσουµε µε το αριστερό πλήκτρο του
ποντικιού στο σηµείο της οθόνης στο οποίο επιθυµούµε να εµφανίσουµε την οµάδα επιλογών,
εµφανίζονται οι οθόνες του οδηγού η µία µετά την άλλη, δια της χρήσης των οποίων καθορίζουµε τα
χαρακτηριστικά αυτής της οµάδας. Οι οθόνες αυτές παρουσιάζονται συνοπτικά στα σχήµατα που
ακολουθούν:
Η λειτουργία του οδηγού οµάδας επιλογών σε γενικές γραµµές είναι η ακόλουθη: Χρησιµοποιώντας την
πρώτη οθόνη του οδηγού καθορίζουµε τις επιλογές που θέλουµε να χρησιµοποιήσουµε καταχωρώντας
αυτές τη µία κάτω από την άλλη. Εάν κατά το άνοιγµα της φόρµας επιθυµούµε κάποια από αυτές τις
επιλογές να είναι προεπιλεγµένη, µπορούµε να ορίσουµε αυτή την επιλογή χρησιµοποιώντας τη δεύτερη
οθόνη. Βεβαίως έχουµε τη δυνατότητα να µην ορίσουµε προεπιλεγµένη επιλογή αλλά κάτι τέτοιο δεν
συνίσταται διότι ενδέχεται να οδηγήσει σε προβληµατική λειτουργία της εφαρµογής.
Στο επόµενο βήµα της διαδικασίας µας δίδεται η δυνατότητα για κάθε µια από τις επιλογές της οµάδας, να
ορίσουµε κάποια επιστρεφόµενη τιµή. Αυτή η διαδικασία είναι πολύ σηµαντική διότι επιτρέπει τη χρήση
της οµάδας επιλογών µέσα από τις φόρµες της εφαρµογής. ∆ιαπιστώνουµε πως ο οδηγός απέδωσε στις
πέντε επιλογές της οµάδες, τις διαδοχικές τιµές 1,2,3,4 και 5. Αν και µπορούµε να µεταβάλλουµε αυτές τις
τιµές ορίζοντας τις δικές µας, εν τούτοις στην προκειµένη περίπτωση δεν έχουµε κάποιο συγκεκριµένο
λόγο να το κάνουµε και για το λόγο αυτό τις αφήνουµε ως έχουν. Χρησιµοποιώντας τέλος τις δύο επόµενες
οθόνες, µπορούµε να καθορίσουµε τα χαρακτηριστικά εµφάνισης των επιλογών (εάν αυτά θα είναι
κουµπιά επιλογής πλαίσια ελέγχου ή κουµπιά εναλλαγής) και να αποδώσουµε στην οµάδα επιλογών
κάποιο όνοµα. Στην προκειµένη περίπτωση, το όνοµα που έχει αποδοθεί στην οµάδα επιλογών
ΟΝΤΟΤΗΤΕΣ είναι το ENTITY_LIST.
Οι ετικέτες ΟΝΤΟΤΗΤΕΣ και ∆ΙΑ∆ΙΚΑΣΙΕΣ που εµφανίζονται πάνω από την οµάδα επιλογών δεν είναι
παρά ετικέτες των οποίων τα χαρακτηριστικά έχουν διαµορφωθεί αναλόγως έτσι ώστε να αποκτήσουν µια
τρισδιάστατη υφή.
Σύµφωνα µε τα όσα έχουν αναφερθεί στις προηγούµενες παραγράφους η φόρµα της βάσης δεδοµένων που
θα ενεργοποιηθεί σε κάθε περίπτωση εξαρτάται από το ζεύγος των επιλογών του χρήστη στις δύο οµάδες
ιδιοτήτων που υλοποιήσαµε στην προηγούµενη διαδικασία. Αυτή η φόρµα θα ανοίξει χρησιµοποιώντας το
κουµπί εντολής που φέρει τον τίτλο «Εκκίνηση Επιλεγµένης ∆ιαχείρισης», και για το λόγο αυτό ο κώδικας
που θα προκαλέσει το άνοιγµα της φόρµας θα καταχωρηθεί στο συµβάν «Με το κλικ» της σελίδας
ιδιοτήτων που φέρει τον τίτλο «Συµβάν». Ο τρόπος µε τον οποίο εµφανίζεται το παράθυρο καταχώρησης
κώδικα για το συγκεκριµένο στοιχείο ελέγχου και για το συγκεκριµένο συµβάν, παρουσιάζεται στο
επόµενο σχήµα.
Στην επόµενη σελίδα θα παρουσιάσουµε τον τρόπο µε τον οποίο εµφανίζονται οι διάφορες φόρµες της
εφαρµογής για κάθε συνδυασµό επιλογών των οµάδων ΟΝΤΟΤΗΤΕΣ και ∆ΙΑ∆ΙΚΑΣΙΕΣ. Αυτές οι
φόρµες προφανώς θα πρέπει να υπάρχουν έτσι ώστε να µπορέσουν να απεικονισθούν στην οθόνη του
υπολογιστή και να χρησιµοποιηθούν από το χρήστη. Για το λόγο αυτό, πριν την υλοποίηση της
διαδικασίας που περιγράφεται στη συνέχεια θα πρέπει να υλοποιηθούν όλες οι φόρµες της εφαρµογής,
καθώς αυτές καλούνται µέσα από την παραπάνω κεντρική οθόνη. Αυτός είναι και ο λόγος για τον οποίο σε
πάρα πολλές περιπτώσεις η κεντρική οθόνη της εφαρµογής υλοποιείται συνήθως τελευταία.
Όπως έχει ήδη αναφερθεί στις προηγούµενες ενότητες, κάθε φορά που επιλέγεται κάποια επιλογή από
κάποια οµάδα, λαµβάνει χώρα επιστροφή της τιµής που αντιστοιχεί σε αυτή την επιλογή. Ας θεωρήσουµε
για παράδειγµα την οµάδα επιλογών ENTITY_LIST και την ακέραια µεταβλητή currentEntity η χρήση της
οποίας απαιτεί µία δήλωση της µορφής Dim currentEntity As Integer. Εάν γράψουµε την πρόταση
currentEntity = ENTITY_LIST, τότε η τιµή που θα αποδοθεί στην εν λόγω µεταβλητή θα είναι η τιµή 1
εάν από την οµάδα επιλογών ΟΝΤΟΤΗΤΕΣ επιλέξουµε τις ΤΑΙΝΙΕΣ, η τιµή 2 εάν από την οµάδα
επιλογών επιλέξουµε τα τραγούδια, κ.ο.κ (η απόδοσης τιµής σε κάθε επιλογή γίνεται κατά τη διάρκεια
δηµιουργίας της οµάδας επιλογών όπως φαίνεται από τις οθόνες του οδηγού επιλογών που παρουσιάζονται
στην προηγούµενη σελίδα). Με εντελώς ανάλογο τρόπο µια πρότασης της µορφής currentAction =
ACTION_LIST (όπου currentAction ακέραια µεταβλητή) θα αποδώσει στη µεταβλητή currentAction την
τιµή 1 εάν από την οµάδα επιλογών ∆ΙΑ∆ΙΚΑΣΙΕΣ επιλέξουµε την εισαγωγή, την τιµή 2, εάν επιλέξουµε
τη διαγραφή, κ.ο.κ. Με ποιο τρόπο εποµένως θα εµφανίσουµε τη φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ όταν
ο χρήστης επιλέξει τις ΤΑΙΝΙΕΣ από την οµάδα επιλογών ΟΝΤΟΤΗΤΕΣ και την ΕΙΣΑΓΩΓΗ από την
οµάδα επιλογών ∆ΙΑ∆ΙΚΑΣΙΕΣ; Πολύ απλά. Με µία εντολή της µορφής
Η παραπάνω εντολή παρουσιάζεται βέβαια σε µορφή ψευδοκώδικα, αποτελεί εν τούτοις ένα κλασσικό
παράδειγµα του τρόπου µε τον οποίο θα υλοποιηθεί η διαδικασία εµφάνισης της κατάλληλης φόρµας
ανάλογα µε την επιλογή του χρήστη. Στην επόµενη σελίδα παρουσιάζεται το πλήρες τµήµα κώδικα που
επιτρέπει την εµφάνιση των διαφόρων φορµών της εφαρµογής. Σε αυτόν τον κώδικα, η κλήση πολλαπλών
εντολών διακλάδωσης υλοποιείται χρησιµοποιώντας την εντολή Select Case η οποία περιλαµβάνεται στις
πιο κλασσικές γλώσσες προγραµµατισµού και εποµένως θεωρητικά θα πρέπει να είναι γνωστή. Η εντολή
που προκαλεί την εµφάνιση της φόρµας είναι η µέθοδος OpenForm του αντικειµένου DoCmd η οποία
περιγράφεται διεξοδικά στο κεφάλαιο 14 των σηµειώσεων του µαθήµατος και για το λόγο αυτό δεν
αναλύεται καθόλου. Εκείνο που κάνει ο κώδικας της επόµενης σελίδας, είναι να καθορίζει το κατάλληλο
όνοµα της φόρµας που επιθυµούµε να εµφανίσουµε για τους διάφορους συνδυασµούς επιλογών του
χρήστη, ενώ η εντολή OpenForm καλείται µία και µοναδική φορά στο τέλος της διαδικασίας για να
εµφανίσει την επιλεγµένη φόρµα στην οθόνη του υπολογιστή µας.
Η διαδικασία σχεδίασης της κεντρικής φόρµας ολοκληρώνεται µε την προσθήκη δύο ακόµη κουµπιών
εντολής εκ των οποίων το πρώτο που φέρει τον τίτλο ΒΟΗΘΗΤΙΚΕΣ ΕΡΓΑΣΙΕΣ ανοίγει την οµώνυµη
φόρµα που επιτρέπει τη συσχέτιση των εγγραφών των πινάκων ΤΑΙΝΙΑ, ΗΘΟΠΟΙΟΣ, ΤΡΑΓΟΥ∆Ι και
∆ΙΑΝΟΜΕΑΣ, ενώ το δεύτερο κουµπί που φέρει τον τίτλο ΕΞΟ∆ΟΣ ΑΠΟ ΤΗΝ ΕΦΑΡΜΟΓΗ τερµατίζει
τη λειτουργία του προγράµµατος. Ο κώδικας που πραγµατοποιεί αυτές τις διαδικασίες θα τοποθετηθεί
όπως και προηγουµένως στην ιδιότητα συµβάντος «Με το κλικ». Αυτός ο κώδικας για το κουµπί
εµφάνισης της φόρµας των βοηθητικών εργασιών θα έχει τη µορφή DoCmd.OpenForm “ΒΟΗΘΗΤΙΚΕΣ
ΕΡΓΑΣΙΕΣ” ενώ για το δεύτερο κουµπί που κλείνει την κεντρική φόρµα δεν έχουµε παρά να γράψουµε
την εντολή DoCmd.Close η οποία γενικά τερµατίζει τη λειτουργία του επιλεγµένου αντικειµένου της
βάσης δεδοµένων.
Στις επόµενες σελίδες παρουσιάζονται οι φόρµες καταχώρησης δεδοµένων για την ΤΑΙΝΙΑ, το
ΤΡΑΓΟΥ∆Ι και το ∆ΙΑΝΟΜΕΑ. Οι φόρµες αυτές µπορούν να κατασκευαστούν πάρα πολύ γρήγορα
χρησιµοποιώντας τον οδηγό φορµών (form wizard) της Microsoft Access. Εναλλακτικά µπορούµε να
κατασκευάσουµε τις φόρµες από µόνοι µας µε τον εξής τρόπο (το παράδειγµα που ακολουθεί αναφέρεται
στη φόρµα καταχώρησης τραγουδιών): από το κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων
µεταφερόµαστε στη σελίδα των φορµών και ξεκινούµε τη διαδικασία δηµιουργίας φόρµας σε προβολή
σχεδίασης – στην περίπτωση αυτή η Microsoft Access θα µας εµφανίσει µία κενή φόρµα. Πάνω στην
επιφάνεια της φόρµας αυτής θα πρέπει να τοποθετήσουµε ένα πλαίσιο κειµένου (edit box) για κάθε ένα
από τα πεδία του πίνακα τραγουδιού. Η τοποθέτηση των πλαισίων κειµένου θα γίνει χρησιµοποιώντας την
εργαλειοθήκη – εάν αυτή είναι κλειστή µπορούµε να την εµφανίσουµε εάν από το κεντρικό menu επιλογών
της Microsoft Access επιλέξουµε «Προβολή» και στη συνέχεια «Εργαλειοθήκη». Επειδή ο πίνακας
ΤΡΑΓΟΥ∆Ι έχει επτά πεδία θα τοποθετήσουµε ισάριθµα πλαίσια κειµένου το ένα κάτω από το άλλο, τα
οποία στη συνέχεια θα στοιχίσουµε κατακόρυφα και σε ίσες αποστάσεις µεταξύ τους χρησιµοποιώντας τις
επιλογές του menu «Μορφή» της κεντρικής γραµµής εργαλείων της εφαρµογής (οι επιλογές αυτές φέρουν
τα ονόµατα ΣΤΟΙΧΙΣΗ, ΜΕΓΕΘΟΣ, ΟΡΙΖΟΝΤΙΑ ΑΠΟΣΤΑΣΗ και ΚΑΤΑΚΟΡΥΦΗ ΑΠΟΣΤΑΣΗ).
Μετά την τοποθέτηση των επτά πεδίων και την στοίχισή τους στην επιφάνεια της φόρµας, θα πρέπει να τα
συσχετίσουµε µε τα αντίστοιχα πεδία του πίνακα ΤΡΑΓΟΥ∆Ι. Για να το κάνουµε αυτό ανοίγουµε το
φύλλο ιδιοτήτων της φόρµας, µεταφερόµαστε στη σελίδα ∆εδοµένα, και στο πεδίο ΠΡΟΕΛΕΥΣΗ
ΕΓΓΡΑΦΩΝ καταχωρούµε τον πίνακα ΤΡΑΓΟΥ∆Ι (τον πίνακα αυτό µπορούµε να τον επιλέξουµε από ένα
πλαίσιο λίστας που εµφανίζει τους πίνακες και τα ερωτήµατα της βάσης δεδοµένων). Έχοντας ορίσει την
πηγή των δεδοµένων προέλευσης για ολόκληρη τη φόρµα µπορούµε να πραγµατοποιήσουµε την ίδια
διαδικασία για κάθε ένα από τα πεδία που τοποθετήσαµε στην επιφάνειά της – στην περίπτωση αυτή το
πλαίσιο λίστας που εµφανίζεται δίπλα από την ιδιότητα «Προέλευση Στοιχείου Ελέγχου» περιέχει τα πεδία
του πίνακα ΤΡΑΓΟΥ∆Ι, και εποµένως για κάθε πεδίο της φόρµας ορίζουµε ως πηγή δεδοµένων
προέλευσης το αντίστοιχο πεδίο του πίνακα ΤΡΑΓΟΥ∆Ι.
Αν και η χρήση του οδηγού επιτρέπει την εύκολη και γρήγορη δηµιουργία φορµών µέσα από το
περιβάλλον της Microsoft Access, εν τούτοις συνίσταται η κατασκευή µερικών φορµών µε το χέρι έτσι
ώστε να εξοικειωθούν µε τη διαδικασία κατασκευής φορµών. Στο επόµενο σχήµα παρουσιάζονται οι
φόρµες καταχώρησης ταινιών και διανοµέων σε προβολή σχεδίασης. Από το σχήµα αυτό δεν είναι
δύσκολο να διαπιστωθεί πως µέσα σε κάθε πλαίσιο κειµένου που βρίσκεται στην επιφάνεια αυτών των
φορµών εµφανίζεται η προέλευση του πλαισίου κειµένου, δηλαδή το πεδίο του πίνακα από όπου το
αντίστοιχο πεδίο της φόρµας ανακτά τα δεδοµένα που εµφανίζει.
Ένα ενδιαφέρον σηµείο που αξίζει να σχολιασθεί είναι η τοποθέτηση των πεδίων που συσχετίζονται µε τον
κωδικό στην ίδια ακριβώς θέση µε κάποιο από τα υπόλοιπα πεδία της φόρµας – τα δύο πεδία επικαλύπτονται
πλήρως. Στην πραγµατικότητα ο κωδικός είναι ένα κρυµµένο πεδίο, δηλαδή δεν εµφανίζεται στην επιφάνεια της
φόρµας κατά τη διάρκεια της χρήσης της (για να συµβεί αυτό θα πρέπει να µεταφερθούµε τη σελίδα «Μορφή»
του φύλλου ιδιοτήτων για αυτό το πεδίο, και στην ιδιότητα «Ορατό» να καταχωρήσουµε την τιµή «Όχι»). Ο
λόγος για τον οποίο λαµβάνει χώρα η χρήση του πεδίου µε τον τρόπο αυτό, είναι ο χαρακτηρισµός του πεδίου
Κωδικός, ως πεδίο αυτόµατης αρίθµησης (κατά τη διάρκεια της σχεδίασης των πινάκων ΤΑΙΝΙΑ και
∆ΙΑΝΟΜΕΑΣ). Αυτό σηµαίνει πως κάθε φορά που ο χρήστης προσθέτει µία νέα εγγραφή σε αυτούς τους
πίνακες, το πεδίο αυτό ενηµερώνεται αυτόµατα από την εφαρµογή λαµβάνοντας είτε συνεχόµενες είτε τυχαίες
τιµές, ανάλογα µε τις ιδιότητές του. Εφ’ όσον λοιπόν ο χρήστης δεν ασχολείται καθόλου µε αυτό το πεδίο δεν
έχουµε λόγο να το εµφανίζουµε στην επιφάνεια της φόρµας και για το λόγο αυτό το κρύβουµε. Σε άλλες βέβαια
περιπτώσεις που το πεδίο αυτό παίρνει εντελώς συγκεκριµένες τιµές – π.χ. αλφαριθµητικές συµβολοσειρές – το
πεδίο αυτό εµφανίζεται κανονικά στην επιφάνεια της φόρµας και χρησιµοποιείται µε τον ίδιο τρόπο µε τα
υπόλοιπα. Οι φόρµες ΤΑΙΝΙΑ και ∆ΙΑΝΟΜΕΑΣ σε προβολή φόρµας, παρουσιάζονται στο επόµενο σχήµα. Από
το σχήµα αυτό διαπιστώνουµε την απουσία του πεδίου ΚΩ∆ΙΚΟΣ από την επιφάνειά τους – το πεδίο αυτό
ωστόσο υπάρχει και η λειτουργικότητά του είναι η ίδια µε εκείνα των υπόλοιπων πεδίων της φόρµας.
Το τελευταίο χαρακτηριστικό των φορµών καταχώρησης δεδοµένων που αξίζει να σχολιασθεί, είναι η ύπαρξη
των τριών κουµπιών εντολής στο κάτω µέρος τους. Από αυτά τα κουµπιά, τα δύο αριστερότερα επιτρέπουν την
αποθήκευση και την αναίρεσης της νέας εγγραφής, ενώ το δεξί κουµπί προκαλεί το κλείσιµο της τρέχουσας
φόρµας, τερµατίζοντας έτσι τη λειτουργία της:
ΑΣΚΗΣΗ 05.03
Μετά την παρουσίαση του τρόπου κατασκευής των βασικών φορµών καταχώρησης δεδοµένων, ας περάσουµε
τώρα στη σχεδίαση και υλοποίηση των βοηθητικών φορµών που χρησιµοποιούνται για τη συσχέτιση των
δεδοµένων των πινάκων της βάσης. Στο παράδειγµα που ακολουθεί θα παρουσιάσουµε αναλυτικά τον τρόπο
κατασκευής της φόρµας ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ που για κάθε ταινία επιτρέπει τον καθορισµό της εταιρείας που
τη διανέµει. Έχοντας κατανοήσει τη διαδικασία κατασκευής αυτής της φόρµας, οι φοιτητές θα πρέπει να είναι σε
θέση να κατασκευάσουν και τις υπόλοιπες φόρµες της εφαρµογής – οι οποίες είναι η ∆ΙΑΝΟΜΗ
ΤΡΑΓΟΥ∆ΙΟΥ, η ΕΠΕΝ∆ΥΣΗ ΤΑΙΝΙΑΣ, η ΕΡΜΗΝΕΙΑ και η ΣΥΜΜΕΤΟΧΗ – καθώς και αυτές
χαρακτηρίζονται από τον ίδιο τρόπο λειτουργίας. Η προεπισκόπηση της φόρµας ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ σε
προβολή φόρµας (form view) παρουσιάζεται στο επόµενο σχήµα:
Είναι προφανές πως υπάρχον πολλοί τρόποι δια της χρήσης των οποίων δύναται να λάβει χώρα η συσχέτιση των
εγγραφών των πινάκων ΤΑΙΝΙΑ και ∆ΙΑΝΟΜΕΑΣ και στην παραπάνω εικόνα δεν απεικονίζεται παρά ένας από
αυτούς. Πιο συγκεκριµένα η φόρµα περιλαµβάνει δύο πλαίσια λίστας τα οποία είναι έτσι διαµορφωµένα ώστε το
ένα να εµφανίζει τον κατάλογο των ταινιών ενώ το άλλο τον κατάλογο των εταιρειών διανοµής που είναι
καταχωρηµένες στη βάση δεδοµένων. Για να συσχετίσουµε µία εταιρεία µε ένα διανοµέα, επιλέγουµε τα
ονόµατά τους στα δύο πλαίσια λίστας, και στη συνέχεια πατώντας το κουµπί «Προσθήκη ∆ιανοµής»
καταχωρούµε τη νέα εγγραφή στον κατάλληλο πίνακα. Ταυτόχρονα η νέα συσχέτιση εµφανίζεται στο πλαίσιο
λίστας που ευρίσκεται στο κάτω µέρος της οθόνης. Στην περίπτωση κατά την οποία θέλουµε να καταργήσουµε
τη συσχέτιση ανάµεσα σε µια ταινία και σε ένα διανοµέα, επιλέγουµε το συνδυασµό τους από το πλαίσιο λίστας
«∆ιανοµή Ταινίας», και πατώντας το κουµπί «∆ιαγραφή ∆ιανοµής» διαγράφουµε την εγγραφή από τον
κατάλληλο πίνακα.
Ας ξεκινήσουµε λοιπόν την περιγραφή της διαδικασίας κατασκευής της παραπάνω φόρµας, παρουσιάζοντας τον
τρόπο δηµιουργίας του πλαισίου λίστας που εµφανίζει τα ονόµατα των ταινιών. Αυτό το πλαίσιο λίστας έχει
κατασκευαστεί µε τέτοιο τρόπο ώστε όταν ο χρήσης επιλέξει µία ταινία από τα περιεχόµενά του, να λάβει χώρα
επιστροφή του κωδικού που αντιστοιχεί στην επιλεγµένη ταινία. Με άλλα λόγια, στη διαδικασία κατασκευής
αυτού του πλαισίου, εµπλέκονται δύο πεδία, που φέρουν τα ονόµατα Κωδικός Ταινίας και Τίτλος Ταινίας, και
εποµένως, ως πηγή των δεδοµένων προέλευσης για αυτό το πλαίσιο θα ορίσουµε ένα ερώτηµα που επιστρέφει τα
δύο αυτά πεδία. Η προεπισκόπησή αυτού του ερωτήµατος – στο οποίο έχουµε δώσει το όνοµα FILM_LIST –
στις τρεις διαφορετικές προβολές στις οποίες αυτό δύναται να βρεθεί, παρουσιάζονται στο επόµενο σχήµα:
Αµέσως µετά την κατασκευή του ερωτήµατος FILM_LIST µπορούµε να κατασκευάσουµε το πλαίσιο λίστας που
θα εµφανίζει τα ονόµατα των ταινιών και θα επιστρέφει τον κωδικό της επιλεγµένης ταινίας. Η κατασκευή αυτού
του στοιχείου ελέγχου µπορεί να γίνει µε τη χρήση του οδηγού στοιχείων ελέγχου, οι διαδοχικές οθόνες του
οποίου παρουσιάζονται στα επόµενα σχήµατα:
Στο πρώτο βήµα της διαδικασίας καθορίζουµε πως τα Στο επόµενο βήµα της διαδικασίας εµφανίζουµε τον
περιεχόµενα του πλαισίου λίστας θα ανακτώνται από κατάλογο των ερωτηµάτων της βάσης και επιλέ-
ί ή ώ ώ FILM LIST
Στο επόµενο βήµα της διαδικασίας διαλέγουµε τα Στην περίπτωση αυτή ο οδηγός της Access εµφανίζει
πεδία του ερωτήµατος που θα χρησιµοποιήσουµε – τα περιεχόµενα αυτών των στηλών σε προβολή φύλ-
δηλαδή τον κωδικό και τον τίτλο ταινίας. λου δεδοµένων.
Επειδή το πλαίσιο λίστας θα εµφανίζει µόνο τους Στο στάδιο αυτό καθορίζουµε τον κωδικό ως το επι-
τίτλους των ταινιών, µηδενίζουµε το πλάτος της στή- στρεφόµενο πεδίο του στοιχείου ελέγχου – αυτό ση-
λης των κωδικών και αυξάνουµε το πλάτος της στή- µαίνει πως κάθε φορά που επιλέγεται µια ταινία θα
λης των τίτλων έτσι ώστε να χωρούν στο πλαίσιο. επιστρέφεται ο κωδικός που αντιστοιχεί σε αυτή.
Ολοκληρώνουµε τη διαδικασία αποδίδοντας στο Τα περιεχόµενα του πλαισίου λίστας που έχει δη-
πλαίσιο λίστας την ετικέτα FILM_LIST µιουργηθεί µε την παραπάνω διαδικασία.
Μετά την ολοκλήρωση της παραπάνω διαδικασίας, το µόνο που έχουµε να κάνουµε είναι να αποδώσουµε
στο νέο πλαίσιο λίστας το κατάλληλο όνοµα – ως τέτοιο όνοµα διαλέγουµε το FILM_LIST – και το
καταχωρούµε ως τιµή στην ιδιότητα «Όνοµα» που βρίσκεται στη σελίδα «Άλλα» του φύλλου ιδιοτήτων
αυτού του στοιχείου ελέγχου. Εφαρµόζοντας την ίδια διαδικασία µπορούµε να κατασκευάσουµε το
πλαίσιο λίστας COMPANY_LIST που εµφανίζει τα ονόµατα των εταιρειών διανοµών ταινιών και
επιστρέφει τον κωδικό του επιλεγµένου διανοµέα.
Μετά την επιλογή του τίτλου της ταινίας και του ονόµατος του διανοµέα, µπορούµε να τα συσχετίσουµε
πατώντας το πλήκτρο «∆ιανοµή Ταινίας». Η διαδικασία αυτή έχει ως αποτέλεσµα την προσθήκη στον
πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ µιας νέας εγγραφής, η οποία περιλαµβάνει τρία πεδία: τον κωδικό της
επιλεγµένης ταινίας (που επιστρέφεται από το πλαίσιο λίστας FILM_LIST), τον κωδικό του επιλεγµένου
διανοµέα (που επιστρέφεται από το πλαίσιο λίστας COMPANY_LIST) καθώς και τον ΚΩ∆ΙΚΟ
∆ΙΑΝΟΜΗΣ που ως πεδίο αυτόµατης αρίθµησης λαµβάνει τιµή αυτόµατα από την Access και για το λόγο
αυτό δεν ασχολούµαστε µαζί του. Η διαδικασία σύνθεσης της νέας εγγραφής από τους κωδικούς των
επιλεγµένων στοιχείων στα δύο πλαίσια λίστας, παρουσιάζεται µε διαγραµµατικό τρόπο στο επόµενο
σχήµα:
Η καταχώρηση της νέας εγγραφής στον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ θα λάβει χώρα χρησιµοποιώντας
την εντολή INSERT INTO της γλώσσας SQL. Η εντολή αυτή θα διαβιβαστεί ως όρισµα στη µέθοδο
RunSQL του αντικειµένου DoCmd της VBA, και θα δεχθεί µε τη σειρά της ως ορίσµατα τις
επιστρεφόµενες τιµές των δύο πλαισίων λίστας. Υπάρχουν δύο τρόποι µε τους οποίους µπορούµε να
ανακτήσουµε αυτές τις τιµές. Ο πρώτος τρόπος περιλαµβάνει τη δήλωση δύο µεταβλητών και την
καταχώρηση σε αυτές των εν λόγω τιµών, ενώ ο δεύτερος τρόπος περιλαµβάνει την απευθείας χρήση των
ονοµάτων των δύο πλαισίων. Ας παρουσιάσουµε αναλυτικά τις δύο αυτές µεθόδους. Σύµφωνα µε την
πρώτη µέθοδο, µπορούµε να ορίσουµε δύο ακέραιες µεταβλητές χρησιµοποιώντας δηλώσεις της µορφής
Dim currentFilm As Integer και Dim currentDistributor As Integer. Εάν στη συνέχεια γράψουµε
currentFilm = FILM_LIST και currentDistributor = COMPANY_LIST τότε οι δύο αυτές µεταβλητές θα
λάβουν τους κωδικούς της επιλεγµένης ταινίας και του επιλεγµένου διανοµέα αντίστοιχα. Στη συνέχεια η
καταχώρηση της νέας εγγραφής στον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ θα λάβει χώρα µε µια εντολή της
µορφής
Η διαδικασία καταχώρησης της νέας εγγραφής µπορεί να απλουστευθεί ακόµη περισσότερο εάν αντί να
χρησιµοποιήσουµε τις βοηθητικές µεταβλητές currentFilm και currentDistributor χρησιµοποιήσουµε στον
κώδικα SQL απευθείας τα ονόµατα των πεδίων, καλέσουµε δηλαδή την εντολή µε τη µορφή
Αυτή η διαδικασία ανάκτησης των επιστρεφόµενων τιµών των δύο πεδίων µπορεί να γενικευθεί για κάθε
τύπο πεδίου που επιστρέφει κάποια τιµή: η χρήση του ονόµατος του πεδίου ως όρισµα στις µεθόδους της
VBA έχει ως αποτέλεσµα τη λήψη της τιµής που επιστρέφεται από αυτό το πεδίο. Η κατάσταση αυτή είναι
εντελώς ανάλογη µε εκείνη που συσχετίζεται µε τη διαδικασία κλήσης µιας συνάρτησης: προκειµένου να
ανακτήσουµε την τιµή που επιστρέφεται από µία συνάρτηση µπορούµε να την καλέσουµε απλά µε το
όνοµά της και χρησιµοποιώντας τις κατάλληλες σε κάθε περίπτωση τιµές ορισµάτων.
Ολοκληρώνοντας την περιγραφή της διαδικασίας καταχώρησης της νέας εγγραφής στον πίνακα
∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ, θα πρέπει να αναφέρουµε πως εφ΄ όσον αυτή η διαδικασία πραγµατοποιείται
πατώντας το κουµπί «Προσθήκη ∆ιανοµής», ο κώδικας που παρουσιάσαµε στην προηγούµενη παράγραφο,
θα πρέπει να τοποθετηθεί στο συµβάν «Με το κλικ» για αυτό το στοιχείο ελέγχου. Το επόµενο σχήµα
παρουσιάζει τον κώδικα εκτέλεσης της εντολής SQL ο οποίος κατά τα γνωστά θα πρέπει να καταχωρηθεί
στο περιβάλλον ανάπτυξης κώδικα της Microsoft Access.
Παρατηρώντας προσεκτικά τον παραπάνω κώδικα δεν είναι δύσκολο να διαπιστώσουµε πως εκτός από τη µέθοδο
RunSQL που προσθέτει τη νέα εγγραφή στον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ υπάρχει και η εντολή
FILM_COMPANY_LIST.Requery. Το όνοµα FILM_COMPANY_LIST αναφέρεται στο µεγάλο πλαίσιο λίστας
που βρίσκεται στο κάτω µέρος της φόρµας και το οποίο εµφανίζει τις συσχετίσεις ταινιών και διανοµέων που
έχουν ήδη πραγµατοποιηθεί. Η εντολή Requery χρησιµοποιείται για την επανεκτέλεση της εντολής που γεµίζει
µε δεδοµένα το πλαίσιο λίστας, και η κλήση της µετά την εκτέλεση της µεθόδου RunSQL είναι αναγκαία έτσι
ώστε το πλαίσιο λίστας να εµφανίσει και την νέα εγγραφή. Είναι προφανές πως τα περιεχόµενα αυτού του
στοιχείου ελέγχου συσχετίζονται άµεσα µε τον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ ο οποίος περιέχει τους κωδικούς
των ταινιών και των διανοµέων από τους οποίους αυτές διανέµονται. Επειδή όµως η πληροφορία που εµφανίζεται
σε αυτό το στοιχείο ελέγχου δεν αφορά τους κωδικούς αλλά τα ονόµατα των ταινιών και των διανοµέων, είναι
προφανές πως η πηγή των δεδοµένων προέλευσης αυτού του στοιχείου είναι ένα ερώτηµα που βασίζεται στους
πίνακες ΤΑΙΝΙΑ, ∆ΙΑΝΟΜΕΑΣ και ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ. Το ερώτηµα αυτό φέρει το όνοµα «ΟΝΟΜΑΤΑ
ΤΑΙΝΙΑΣ ΚΑΙ ∆ΙΑΝΟΜΕΑ» και η προεπισκόπησή του σε προβολή σχεδίασης, προβολή φύλλου δεδοµένων, και
προβολή κώδικα SQL παρουσιάζεται στη συνέχεια:
∆εν είναι δύσκολο να διαπιστώσει κανείς πως το παραπάνω ερώτηµα εµφανίζει τους τίτλους των ταινιών και τα
ονόµατα των διανοµέων για όσα ζεύγη (ταινία, διανοµέας) συσχετίζονται µεταξύ τους, δηλαδή οι κωδικοί τους
ανήκουν στην ίδια εγγραφή του πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ. Το παραπάνω ερώτηµα επιστρέφει επίσης και τον
κωδικό εγγραφής ο οποίος θα χρησιµοποιηθεί στη συνέχεια για τη διαγραφή κάποιας διανοµής. Έχοντας
κατασκευάσει το παραπάνω ερώτηµα ας δούµε τώρα τον τρόπο µε τον οποίο κατασκευάζεται το πλαίσιο λίστας
FILM_COMPANY_LIST δια της χρήσης του οδηγού στοιχείων ελέγχου της Access. Οι διαδοχικές οθόνες αυτού
του οδηγού και το είδος της πληροφορίας που καθορίζουµε σε κάθε µία από αυτές, παρουσιάζονται στα επόµενα
σχήµατα. Σε µια συνοπτική περιγραφή οι διαδικασίες που λαµβάνουν χώρα δια της χρήσης αυτού του οδηγού,
είναι οι εξής:
Χρησιµοποιώντας τις δύο πρώτες οθόνες καθορίζουµε πως η πηγή των δεδοµένων προέλευσης για το νέο πλαίσιο
λίστας, θα είναι το ερώτηµα «ΟΝΟΜΑΤΑ ΤΑΙΝΙΑΣ ΚΑΙ ∆ΙΑΝΟΜΕΑ». Επιλέγουµε και τα τρία πεδία του
ερωτήµατος – καθώς τα χρειαζόµαστε όλα – και κατόπιν ρυθµίζουµε τα πλάτη των στηλών έτσι ώστε να
εµφανίζουν σωστά τις εγγραφές του ερωτήµατος. Η στήλη ΚΩ∆ΙΚΟΣ ∆ΙΑΝΟΜΗΣ δεν επιθυµούµε να
εµφανίζεται στο νέο πλαίσιο λίστας και για το λόγο αυτό µηδενίζουµε το πλάτος της. Ωστόσο αυτή θα πρέπει να
είναι η τιµή που επιστρέφεται από το στοιχείο ελέγχου κάθε φορά που ο χρήστης επιλέγει κάποια εγγραφή σε
αυτό – δηλαδή κάποιο συνδυασµό (τίτλος ταινίας, όνοµα διανοµέα). Την πληροφορία αυτή την καθορίζουµε
χρησιµοποιώντας την πέµπτη οθόνη του οδηγού. Η διαδικασία αυτή ολοκληρώνεται αποδίδοντας στο νέο πλαίσιο
λίστας τη λεζάντα «∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ».
Από την παραπάνω περιγραφή καθίσταται προφανές πως κάθε φορά που ο χρήστης επιλέγει µία εγγραφή
στο πλαίσιο λίστας FILM_COMPANY_LIST αυτό επιστρέφει τον κωδικό διανοµής για την αντίστοιχη
εγγραφή του πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ. Η κατάσταση αυτή παρουσιάζεται µε διαγραµµατικό τρόπο
στο ακόλουθο σχήµα. Στο παράδειγµα του σχήµατος αυτού, ο χρήστης επέλεξε στο σύνθετο πλαίσιο
FILM_COMPANY_LIST το συνδυασµό (Τίτλος Ταινίας, Όνοµα ∆ιανοµέα) = (Prince of Tides, Ήχος).
Από τους πίνακες ΤΑΙΝΙΑ και ∆ΙΑΝΟΜΕΑΣ διαπιστώνουµε πως οι κωδικοί αυτών των δύο εγγραφών
είναι οι αριθµοί 23 και 4 αντίστοιχα. Εποµένως η τιµή που θα επιστρέψει το πλαίσιο λίστας
FILM_COMPANY_LIST είναι ο κωδικός εγγραφής του πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ για το ζεύγος
(Κωδικός Ταινίας, Κωδικός ∆ιανοµέα) = (23, 4) ο οποίος στην προκειµένη περίπτωση, είναι ο αριθµός 26.
Εάν λοιπόν θέλουµε να διαγράψουµε αυτή την εγγραφή – δηλαδή να καταργήσουµε τη διανοµή της ταινίας
PRINCE OF TIDES από την εταιρεία διανοµής ΗΧΟΣ, δεν έχουµε παρά να καλέσουµε τη µέθοδο
RunSQL του αντικειµένου DoCmd µε τη µορφή
Εκτός από τη µέθοδο RunSQL ο παραπάνω κώδικας περιλαµβάνει και την κλήση της µεθόδου Requery για
το πλαίσιο λίστας FILM_COMPANY_LIST. Αυτή η µέθοδος χρειάζεται έτσι ώστε µετά τη διαγραφή της
επιλεγµένης εγγραφής από τον πίνακα ∆ΙΑΝΟΜΗΣ ΤΑΙΝΙΑΣ να επανεκτελεστεί το ερώτηµα
«ΟΝΟΜΑΤΑ ΤΑΙΝΙΑΣ ΚΑΙ ∆ΙΑΝΟΜΕΑ» και να ενηµερωθούν τα περιεχόµενα του πλαισίου λίστας. Ας
αναφερθεί στο σηµείο αυτό, πως αυτή η διαδικασία εφαρµόζεται κάθε φορά που τροποποιούνται τα
περιεχόµενα ενός πίνακα ή ερωτήµατος από το οποίο κάποιο στοιχείο ελέγχου – συνήθως πλαίσιο λίστας
(list box) ή σύνθετο πλαίσιο (combo box) – διαβάζει δεδοµένα.
Η διαγραφή µιας ταινίας από τη βάση δεδοµένων της εφαρµογής λαµβάνει χώρα χρησιµοποιώντας τη
φόρµα του επόµενου σχήµατος. Σε πλήρη αναλογία µε τις προηγούµενες περιπτώσεις, οι τίτλοι των
ταινιών εµφανίζονται σε κατάλληλα διαµορφωµένο πλαίσιο λίστας το οποίο επιστρέφει τον κωδικό της
επιλεγµένης ταινίας µε τη βοήθεια του οποίου λαµβάνει χώρα και η διαγραφή της ταινίας από τον οµώνυµο
πίνακα χρησιµοποιώντας το κατάλληλο κουµπί εντολής.
(α) Να µην χρησιµοποιήσουµε καθόλου τον εν λόγω µηχανισµό (δηλαδή να µην επιλέξουµε το πλαίσιο
επιλογής της παραπάνω φόρµας που φέρει τον τίτλο «Ενεργοποίηση ακεραιότητας αναφορών»). Στην
περίπτωση αυτή µπορούµε να διαγράφουµε όσες εγγραφές θέλουµε και από οποιοδήποτε πίνακα
επιθυµούµε, χωρίς να εξετάζουµε αν υπάρχουν εγγραφές σε άλλους πίνακες που να αναφέρονται στις
εγγραφές προς διαγραφή. Αυτή η επιλογή είναι σχεδόν βέβαιο πως θα οδηγήσει στη δηµιουργία ασυνεπών
δεδοµένων – εκτός εάν οι πίνακες της βάσης δεν συσχετίζονται µεταξύ τους – και θα είναι καλό να
αποφεύγεται.
(β) Να ενεργοποιήσουµε το µηχανισµό ελέγχου ακεραιότητας εγγραφών, αλλά χωρίς να ζητήσουµε από
την Access να προχωρά σε αυτόµατη διαδοχική διαγραφή των σχετικών εγγραφών (αυτό σηµαίνει πως το
οµώνυµο πλαίσιο επιλογής (check box) της παραπάνω φόρµας δεν θα πρέπει να είναι επιλεγµένο). Στην
περίπτωση αυτή και εφ’ όσον η εγγραφή που επιθυµούµε να διαγράψουµε χαρακτηρίζεται από την ύπαρξη
σχετικών εγγραφών άλλων πινάκων της βάσης που αναφέρονται σε αυτή, θα λάβει χώρα εµφάνιση ενός
ενηµερωτικού µηνύµατος από τη Microsoft Access που θα µας γνωστοποιεί πως δεν µπορούµε να
ολοκληρώσουµε αυτή τη διαδικασία, λόγω της ύπαρξης σχετικών εγγραφών σε άλλους πίνακες:
Το παραπάνω µήνυµα σφάλµατος εµφανίζεται όταν ανοίξουµε τον πίνακα ΤΑΙΝΙΑ σε προβολή φύλλου
δεδοµένων και επιχειρήσουµε να διαγράψουµε κάποια ταινία η οποία συσχετίζεται µε κάποιο διανοµέα.
Αντίθετα εάν η διαγραφή της ταινία λάβει χώρα µέσα από τη φόρµα ∆ΙΑΓΡΑΦΗ ΤΑΙΝΙΑΣ θα εµφανισθεί
το επόµενο µήνυµα σφάλµατος που και αυτό µε τη σειρά του θα µας πληροφορεί πως η διαγραφή της
ταινίας δεν είναι επιτρεπτή διότι παραβιάζονται οι κανόνες ακεραιότητας της βάσης δεδοµένων.
Ο λόγος για τον οποίο η Microsoft Access εµφανίζει δύο διαφορετικά µηνύµατα τα οποία ουσιαστικά
αναφέρονται στην ίδια περίπτωση σφάλµατος, είναι πως στην πρώτη περίπτωση η διαγραφή της ταινίας
λαµβάνει χώρα µέσα από προεπισκόπηση πίνακα σε προβολή φύλλου δεδοµένων, ενώ στη δεύτερη
περίπτωση, η πράξη της διαγραφής πραγµατοποιείται δια της εκτέλεσης κάποιου ερωτήµατος ενέργειας.
Στην περίπτωση κατά την οποία δεν επιθυµούµε την ενηµέρωση του χρήστη µε τον τρόπο αυτό, θα πρέπει
να µεταφερθούµε στην οµάδα επιλογών «Εργαλεία» του κεντρικού menu της Access, να ανοίξουµε το
παράθυρο «Επιλογές» και να αποµακρύνουµε τις επιλογές (check marks) από τα στοιχεία «Αλλαγές
εγγραφών», «∆ιαγραφές εγγραφών» και «Ερωτήµατα ενέργειας». Στην περίπτωση αυτή η διαγραφή των
εγγραφών θα γίνεται αυτόµατα από την εφαρµογή και χωρίς την παραµικρή παρέµβαση του χρήστη.
Η άλλη εναλλακτική επιλογή που έχουµε στη διάθεσή µας είναι να µην ενεργοποιήσουµε το µηχανισµό
ελέγχου της ακεραιότητας αναφορών αλλά να διαγράψουµε τις σχετικές εγγραφές µε κώδικα που θα γράψουµε
µόνοι µας. Ας θεωρήσουµε ως παράδειγµα τον πίνακα ∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ µε πεδία τον κωδικό ταινίας και
τον κωδικό διανοµέα. Εάν επιλέξουµε µια εγγραφή στο πλαίσιο λίστας της φόρµας διαγραφής ταινίας – ας
υποθέσουµε πως το όνοµα αυτού του πλαισίου είναι το FILM_LIST – αυτό κατά τα γνωστά θα επιστρέψει τον
κωδικό της ταινίας που επιλέχθηκε. Για να διαγράψουµε λοιπόν όλες τις εγγραφές του πίνακα ∆ΙΑΝΟΜΗ
ΤΑΙΝΙΑΣ που αναφέρονται σε αυτόν τον κωδικό, θα πρέπει να καλέσουµε τη µέθοδο RunSQL του
αντικειµένου DoCmd µε τη µορφή
Εφαρµόζοντας παρόµοια διαδικασία, µπορούµε να διαγράψουµε τις σχετικές εγγραφές στους άλλους πίνακες
της βάσης που αναφέρονται στην ταινία που θέλουµε να διαγράψουµε. Τέλος το µόνο που έχουµε να κάνουµε
είναι να διαγράψουµε και την ίδια την εγγραφή από τον πίνακα ΤΑΙΝΙΑ γράφοντας
Εκτός από τη διαγραφή των σχετικών εγγραφών των άλλων πινάκων της βάσης, η ακεραιότητα των δεδοµένων
διασφαλίζεται αποδίδοντας στο ξένο κλειδί που αναφέρεται στις εγγραφές προς διαγραφή, την τιµή NULL.
Στην περίπτωση αυτή η µέθοδος RunSQL θα κληθεί µε τη µορφή
Η επιλογή της µεθόδου που τελικά θα χρησιµοποιήσουµε εξαρτάται από τις απαιτήσεις που υφίστανται σε
κάθε περίπτωση. Στην συγκεκριµένη εφαρµογή, δεν έχουµε λόγο να διατηρούµε εγγραφές στον πίνακα
[∆ΙΑΝΟΜΗ ΤΑΙΝΙΑΣ] που αναφέρονται σε εγγραφές του πίνακα ΤΑΙΝΙΑ που έχουν διαγραφεί, και για το
λόγο αυτό θα είναι καλό να τις διαγράφουµε και αυτές, είτε χρησιµοποιώντας την αυτόµατη διαδικασία
διαγραφής της Microsoft Access, είτε γράφοντας τον κατάλληλο κώδικα από µόνοι µας.
ΕΡΓΑΣΤΗΡΙΟ 6
Στο έκτο εργαστήριο του µαθήµατος συνεχίζουµε την κατασκευή φορµών της εφαρµογής διαχείρισης
ταινιών video κατασκευάζοντας φόρµα συγκεντρωτικών στοιχείων που εµφανίζει τις εγγραφές του πίνακα
ταινία τη µία κάτω από την άλλη. Επιλέγοντας ο χρήστης κάποια από αυτές τις εγγραφές µπορεί στη
συνέχεια να ανοίξει την καρτέλα της συγκεκριµένης ταινίας που επέλεξε για να τροποποιήσει το
περιεχόµενό της. Επιπλέον έχει τη δυνατότητα χρησιµοποιώντας κατάλληλα κουµπιά εντολής να
καταχωρήσει νέα ταινία στη βάση δεδοµένων, ή να διαγράψει την ταινία που έχει επιλεγεί.
Στο επόµενο βήµα της διαδικασίας θα κατασκευάσουµε φόρµα που θα εµφανίζει τα επώνυµα των
ερµηνευτών της βάσης δεδοµένων σε κατάλληλα διαµορφωµένο πλαίσιο λίστας. Κάθε φορά που θα
επιλέγεται ένας ερµηνευτής, θα ενεργοποιείται µία υποφόρµα η οποία θα εµφανίζει τους τίτλους των
τραγουδιών που έχουν ερµηνευθεί από αυτόν καθώς και την εταιρεία παραγωγής του τραγουδιού. Ο
χρήστης θα έχει τη δυνατότητα να επιλέγει κάποιο από αυτά τα τραγούδια, διαδικασία που θα έχει ως
αποτέλεσµα την πλήρωση ενός πλαισίου λίστας µε τους τίτλους των ταινιών στις οποίες ακούγεται το
συγκεκριµένο τραγούδι.
Η κατασκευή µιας φόρµας συγκεντρωτικών στοιχείων που εµφανίζει τις εγγραφές του πίνακα ΤΑΙΝΙΑ τη
µία κάτω από την άλλη, µπορεί να πραγµατοποιηθεί πάρα πολύ εύκολα, χρησιµοποιώντας τον οδηγό
φορµών (form wizard) της Microsoft Access. Τυπικό παράδειγµα µιας τέτοιας φόρµας παρουσιάζεται στο
επόµενο σχήµα:
∆εν είναι δύσκολο να διαπιστώσει κανείς πως η φόρµα αυτή περιέχει τρία κουµπιά εντολής, δια της
χρήσης των οποίων είναι δυνατή η εισαγωγή, η διαγραφή και η ενηµέρωση των εγγραφών του πίνακα
ΤΑΙΝΙΑ. Στην επόµενη σελίδα θα παρουσιάσουµε αναλυτικά τη διαδικασία κατασκευής αυτής της
φόρµας, χρησιµοποιώντας τον οδηγό φορµών της Microsoft Access.
Ας µεταφερθούµε λοιπόν στο κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων και από τη σελίδα «Φόρµες»
ας επιλέξουµε τη διαδικασία κατασκευής της νέας φόρµας δια της χρήσης του οδηγού. Στην περίπτωση αυτή η
κατασκευή της φόρµας περιλαµβάνει µια διαδικασία τεσσάρων βηµάτων, όπως φαίνεται στα σχήµατα που
ακολουθούν:
Η πιο σηµαντική από τις πληροφορίες που καθορίζουµε χρησιµοποιώντας τον οδηγό κατασκευής φορµών, είναι ο
καθορισµός του είδους της διάταξης της φόρµας ως διάταξη πίνακα. Αυτό το είδος της διάταξης έχει ως
αποτέλεσµα την τοποθέτηση των εγγραφών του πίνακα τη µία κάτω από την άλλη έτσι ώστε να λάβουµε το
επιθυµητό αποτέλεσµα. Η φόρµα συγκεντρωτικών στοιχείων που κατασκευάστηκε χρησιµοποιώντας την
παραπάνω διαδικασία, παρουσιάζεται (σε προβολή φόρµας) στο επόµενο σχήµα:
Από το παραπάνω σχήµα διαπιστώνουµε πως η φόρµα έτσι όπως έχει δηµιουργηθεί επιτρέπει την
προσθήκη, διαγραφή και τροποποίηση εγγραφών, κάτι που στην προκειµένη περίπτωση δεν είναι
επιθυµητό, καθώς η µόνη λειτουργία που επιθυµούµε είναι απλά η προεπισκόπηση των εγγραφών και
τίποτε περισσότερο. Η ύπαρξη επίσης του πεδίου κωδικός δεν είναι αναγκαία, καθώς η χρήση του
συσχετίζεται µε τη δοµή της βάσης δεδοµένων και είναι κάτι που δεν ενδιαφέρει τον τελικό χρήστη.
Ωστόσο το πεδίο αυτό δεν µπορεί να διαγραφεί, καθώς χρειάζεται στη διαδικασία τροποποίησης της
επιλεγµένης εγγραφής. Για το λόγο αυτό µπορούµε να το κάνουµε αόρατο (δηλαδή να αποδώσουµε στην
ιδιότητα «Ορατό» που ευρίσκεται στη σελίδα «Μορφή» του φύλλου ιδιοτήτων του την τιµή «Όχι»), να το
µεταφέρουµε και να το κρύψουµε κάτω από κάποιο άλλο πεδίο (για παράδειγµα το πεδίο «Τίτλος
Ταινίας»), και στη συνέχεια να µικρύνουµε µε το ποντίκι το πλάτος της φόρµας έτσι ώστε το τελευταίο
ορατό από τα δεξιά πεδίο, να είναι η τιµή της ταινίας. Όσον αφορά τη ρύθµιση των άλλων ιδιοτήτων της
φόρµας, αυτές θα πρέπει να λάβουν τις τιµές που απεικονίζονται στο επόµενο σχήµα:
Μετά την κατασκευή της φόρµας των συγκεντρωτικών στοιχείων θα πρέπει να κατασκευάσουµε τα τρία
κουµπιά που ευρίσκονται στην επιφάνειά της. Από αυτά τα κουµπιά εκείνα που επιτρέπουν την εισαγωγή
νέας ταινίας καθώς και την τροποποίηση υπάρχουσας ταινίας, ανοίγουν ουσιαστικά την ίδια φόρµα,
δηλαδή τη φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ. Η διαφορά είναι πως στην πρώτη περίπτωση η φόρµα
ανοίγει σε θέση νέας εγγραφής – και εποµένως όλα τα πεδία της είναι κενά έτσι ώστε να καταχωρηθεί η
νέα εγγραφή – ενώ στη δεύτερη περίπτωση ανοίγει σε κατάσταση προεπισκόπησης δεδοµένων
εµφανίζοντας τα πεδία της εγγραφής πού έχει επιλεγεί από τον κατάλογο των ταινιών της τρέχουσας
φόρµας.
Ας αναφερθεί στο σηµείο αυτό πως η προεπιλεγµένη συµπεριφορά της φόρµας είναι να ανοίγει σε θέση
νέας εγγραφής έτσι ώστε να επιτρέπει την καταχώρηση δεδοµένων (υπενθυµίζουµε πως για να ορίσουµε
αυτόν τον τρόπο συµπεριφοράς θα πρέπει να µεταφερθούµε στη σελίδα «∆εδοµένα» του φύλλου ιδιοτήτων
της τρέχουσας φόρµας και στην ιδιότητα «Καταχώρηση ∆εδοµένων» να αποδώσουµε την τιµή «Ναι»).
Εποµένως το µόνο που έχουµε να κάνουµε για να ανοίξουµε τη φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ σε θέση
νέας εγγραφής, είναι να καλέσουµε τη µέθοδο OpenForm του αντικειµένου DoCmd µε την απλή µορφή
Αυτός ο κώδικας θα πρέπει κατά τα γνωστά να καταχωρηθεί στο συµβάν «Με το κλικ» του κουµπιού
εντολής «Εισαγωγή Ταινίας» και στην πλήρη του µορφή παρουσιάζεται στο επόµενο σχήµα – στο
παράδειγµα του επόµενου σχήµατος το όνοµα του κουµπιού εντολής «Εισαγωγή Ταινίας» είναι το
ADD_MOVIE_RECORD.
Είναι προφανές πως το παραπάνω κουµπί εντολής µπορεί να κατασκευαστεί χρησιµοποιώντας τον οδηγό
στοιχείων ελέγχου (control wizard) της Microsoft Access, διαδικασία που θα οδηγήσει ακριβώς στο ίδιο
αποτέλεσµα. Άλλωστε ο κώδικας που παρουσιάζουµε στο προηγούµενο σχήµα έχει δηµιουργηθεί δια της
χρήσης αυτού του οδηγού και εποµένως οι δύο αυτές µέθοδοι είναι ουσιαστικά ισοδύναµες.
Από την άλλη πλευρά, ο κώδικας του κουµπιού εντολής που ανοίγει τη φόρµα ΚΑΤΑΧΩΡΗΣΗΣ
ΤΑΙΝΙΑΣ σε κατάσταση προεπισκόπησης δεδοµένων, έχει παρόµοια µορφή µε αυτόν της προηγούµενης
περίπτωσης. Ωστόσο, θα πρέπει να εµπλουτισθεί µε δύο επιπλέον στοιχεία. Από τα στοιχεία αυτά το πρώτο
θα γνωστοποιεί στη µέθοδο OpenForm πως η φόρµα δεν θα ανοίξει σε κατάσταση νέας εγγραφής (που
είναι η προεπιλεγµένη κατάσταση) αλλά σε κατάσταση προεπισκόπησης δεδοµένων, ενώ το δεύτερο θα
καθορίζει πως τα στοιχεία που θα εµφανισθούν σε αυτή, θα συσχετίζονται µε την εγγραφή εκείνη η οποία
έχει επιλεγεί από το χρήστη στη συγκεντρωτική φόρµα εµφάνισης εγγραφών. Η κατασκευή αυτού του
κουµπιού εντολής µπορεί να λάβει χώρα δια της χρήσης του οδηγού στοιχείων ελέγχου της Access, και
σύµφωνα µε τις οθόνες που παρουσιάζονται στα επόµενα σχήµατα:
Από τις παραπάνω οθόνες διαπιστώνουµε πως η πιο σηµαντική παράµετρος που θα πρέπει να καθορισθεί είναι το
είδος της συσχέτισης ανάµεσα στις φόρµες ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ και ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ έτσι ώστε η
τελευταία φόρµα να εµφανίζει πάντοτε τα στοιχεία της τρέχουσας επιλεγµένης εγγραφής. Αυτή η συσχέτιση
απαιτεί την ύπαρξη ενός κοινού πεδίου στις δύο φόρµες – αυτό µε άλλα λόγια σηµαίνει πως και οι δύο φόρµες θα
πρέπει να έχουν ένα πεδίο που να συσχετίζεται µε το ίδιο πεδίο του πίνακα ΤΑΙΝΙΑ. Στην προκειµένη περίπτωση
η φόρµα ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ διαθέτει το πεδίο FILM_CODE που ως πηγή δεδοµένων προέλευσης έχει το
πεδίο Κωδικός του πίνακα ΤΑΙΝΙΑ, ενώ η φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ διαθέτει το πεδίο Κωδικός που και
αυτό χαρακτηρίζεται από την ίδια πηγή των δεδοµένων προέλευσης. Εάν τώρα συσχετίσουµε τα δύο αυτά πεδία
υπαγορεύουµε στη µέθοδο OpenForm να εµφανίσει στα πεδία της φόρµας ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ, τα στοιχεία
εκείνης της εγγραφής του πίνακα ΤΑΙΝΙΑ, της οποίας ο κωδικός έχει την ίδια τιµή µε το πεδίο FILM_CODE της
φόρµας ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ. Αλλά η τιµή αυτού του πεδίου δεν είναι άλλη από τον κωδικό της ταινίας που
έχει επιλέξει ο χρήστης στην τελευταία φόρµα. Εποµένως τελικά, η φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ θα
εµφανίσει τα στοιχεία της τρέχουσας επιλεγµένης ταινίας.
Μετά τη δηµιουργία του κουµπιού εντολής, ας περάσουµε στη µελέτη του κώδικα που δηµιούργησε η Access για
να υλοποιήσει τη λειτουργία του. Αυτός ο κώδικας καταγεγραµµένος στο περιβάλλον ανάπτυξης κώδικα της
γλώσσας VBA παρουσιάζεται στο επόµενο σχήµα – στο παράδειγµα του σχήµατος, το όνοµα του κουµπιού
εντολής είναι το EDIT_MOVIE_RECORD:
Από το παραπάνω σχήµα διαπιστώνουµε πως η φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ συσχετίζεται πράγµατι µε τη
φόρµα ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ µέσω των πεδίων Κωδικός και FILM_CODE. Το κριτήριο συσχέτισης στον
παραπάνω κώδικα (που βρίσκεται αποθηκευµένο στη συµβολοσειρά stLinkCriteria) είναι το
Στην παραπάνω σύνταξη η συµβολοσειρά Me αναφέρεται κάθε φορά στην τρέχουσα φόρµα – στην προκειµένη
περίπτωση αυτή η φόρµα είναι η ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ – ενώ η αναφορά στο πεδίο FILM_CODE γίνεται
χρησιµοποιώντας τη γνωστή σύνταξη της Microsoft Access [ΟΝΟΜΑ ΦΟΡΜΑΣ]![ΟΝΟΜΑ ΠΕ∆ΙΟΥ]. Όπως
έχουµε δει και στο προηγούµενο εργαστήριο η χρήση του ονόµατος του πεδίου σε κάποια έκφραση έχει ως
αποτέλεσµα – κατά τη διάρκεια της εκτέλεσης του κώδικα – την αντικατάσταση αυτού του ονόµατος µε την τιµή
που επιστρέφεται από το πεδίο. Εάν για παράδειγµα επιλέξουµε στον κατάλογο ταινιών την ταινία Prince Of
Tides, το πεδίο FILM_CODE θα επιστρέψει τον κωδικό αυτής της ταινίας που είναι το 23, και το κριτήριο
συσχέτισης θα λάβει τη µορφή «Κωδικός=23». Αυτό σηµαίνει πως αν ανοίξουµε τη φόρµα καταχώρησης ταινίας
πατώντας το κουµπί Ενηµέρωση Ταινίας, θα εµφανιστούν οι τιµές των πεδίων της εν λόγω εγγραφής.
Το δεύτερο χαρακτηριστικό που αξίζει να σχολιασθεί στον παραπάνω κώδικα, είναι η χρήση του ορίσµατος
acFormEdit, στην κλήση της µεθόδου OpenForm. Αυτή ακριβώς η παράµετρος είναι που υπαγορεύει στην µέθοδο
OpenForm να µην ανοίξει τη φόρµα ΚΑΤΑΧΩΡΗΣΗ ΤΑΙΝΙΑΣ χρησιµοποιώντας τον προεπιλεγµένο τρόπο
εµφάνισης (δηλαδή σε θέση νέας εγγραφής) αλλά σε κατάσταση προεπισκόπησης εγγραφών των πινάκων της
βάσης.
Τέλος το κουµπί εντολής που φέρει τον τίτλο ∆ΙΑΓΡΑΦΗ ΤΑΙΝΙΑΣ έχει ως αποτέλεσµα τη διαγραφή της ταινίας
που έχει επιλέξει ο χρήστης από τον κατάλογο ταινιών που εµφανίζονται στην τρέχουσα φόρµα. Ο κώδικας VBA
που θα πρέπει να καταχωρηθεί στην ιδιότητα συµβάντος «Με το κλικ» για αυτό το κουµπί, έχει τη µορφή
όπου η µέθοδος Requery καλείται προκειµένου να ανανεώσει τα περιεχόµενα της φόρµας αποµακρύνοντας την
εγγραφή που έχει διαγραφεί (το θέµα αυτό σχολιάζεται στη συνέχεια). Ας σηµειωθεί πως αυτός ο κώδικας
διαγράφει απλά την επιλεγµένη ταινία από τον οµώνυµο πίνακα, χωρίς όµως να προχωρεί και σε διαγραφή των
σχετικών εγγραφών στους άλλους πίνακες της βάσης. Η τροποποίηση του κώδικα µε τρόπο ώστε η ισχύς των
κανόνων ακεραιότητας µετά από κάθε διαδικασία διαγραφής να εξακολουθήσει να υφίσταται, αφήνεται ως
άσκηση στους φοιτητές.
Ολοκληρώνουµε τη διαδικασία κατασκευής της φόρµας εµφάνισης συγκεντρωτικών στοιχείων του πίνακα
ΤΑΙΝΙΑ, κάνοντας την παρατήρηση πως εφ’ όσον οι διαδικασίες της εισαγωγής, διαγραφής, και τροποποίησης
εγγραφών έχουν ως αποτέλεσµα τη µεταβολή των περιεχοµένων της φόρµας ΚΑΤΑΛΟΓΟΣ ΤΑΙΝΙΩΝ, αυτή θα
πρέπει να επανακτήσει τα δεδοµένα που εµφανίζονται σε αυτή, έτσι ώστε να εµφανίζει κάθε φορά τις πιο
πρόσφατες τιµές τους. Η ανανέωση των περιεχοµένων της φόρµας – καθώς και αρκετών στοιχείων ελέγχου όπως
είναι τα πλαίσια λίστας και τα σύνθετα πλαίσια – γίνεται όπως είναι γνωστό δια της χρήσης της µεθόδου Requery.
Αυτή η µέθοδος θα πρέπει να τοποθετηθεί στον κώδικα της ιδιότητας συµβάντος που φέρει το όνοµα «Με την
ενεργοποίηση» και βρίσκεται στη σελίδα «Συµβάν» του φύλλου ιδιοτήτων της φόρµας. Αυτό το συµβάν υφίσταται
κάθε φορά που κλείνει κάποια από τις φόρµες καταχώρησης δεδοµένων και η εστίαση (focus) του συστήµατος
επιστρέφεται στην τρέχουσα φόρµα.
Στο δεύτερο µέρος του εργαστηρίου θα ασχοληθούµε µε την κατασκευή ενός συστήµατος φόρµας –
υποφόρµας που επιτρέπει την προεπισκόπηση των τίτλων των τραγουδιών που έχουν ερµηνευθεί από τους
καλλιτέχνες που βρίσκονται καταχωρηµένοι στη βάση δεδοµένων, καθώς και των τίτλων των ταινιών στις
οποίες αυτά συµµετέχουν. Πιο συγκεκριµένα, η λειτουργία αυτής της φόρµας είναι η εξής: στο πάνω µέρος
της υπάρχει ένα πλαίσιο λίστας που εµφανίζει τα ονοµατεπώνυµα των καλλιτεχνών που είναι
καταχωρηµένοι στον πίνακα ΕΡΜΗΝΕΥΤΗΣ. Επιλέγοντας ο χρήστης κάποιο από αυτά τα ονόµατα
λαµβάνει χώρα πλήρωση µιας υποφόρµας που ευρίσκεται ακριβώς από κάτω, µε τους τίτλους των
τραγουδιών που ερµηνεύονται από τον επιλεγµένο καλλιτέχνη καθώς και µε το όνοµα της εταιρείας
παραγωγής τους. Τέλος εάν ο χρήστης επιλέξει κάποιο από αυτά τα τραγούδια, θα εµφανιστούν σε ένα
άλλο πλαίσιο λίστας οι τίτλοι των ταινιών στις οποίες ακούγεται αυτό το τραγούδι. Τυπικό παράδειγµα
µιας τέτοιας φόρµας που λειτουργεί µε τον τρόπο αυτό, παρουσιάζεται στο επόµενο σχήµα:
Στο παράδειγµα του παραπάνω σχήµατος ο χρήστης επέλεξε το όνοµα Cliff Sherwood από τη λίστα
«Κατάλογος ερµηνευτών», ενέργεια που έχει ως αποτέλεσµα την εµφάνιση στην υποφόρµα που βρίσκεται
ακριβώς από κάτω, των τραγουδιών του εν λόγω καλλιτέχνη. Στην προκειµένη περίπτωση, υπάρχει µόνο
ένα τραγούδι, µε τον τίτλο «Without you», µε εταιρεία παραγωγής τη Virgin. Εάν ο χρήστης επιλέξει αυτό
το τραγούδι, τότε στο δεύτερο πλαίσιο λίστας θα εµφανιστούν οι τίτλοι των ταινιών στις οποίες ακούγεται
το εν λόγω τραγούδι. Οι ταινίες αυτές στην προκειµένη περίπτωση, χαρακτηρίζονται από τους τίτλους
«Prince of Tides», «Το βλέµµα του Οδυσσέα», «Ο κόσµος της Έλενας» και «Ήρεµη δύναµη». Στις σελίδες
που ακολουθούν θα παρουσιάσουµε αναλυτικά τον τρόπο µε τον οποίο δύναται να κατασκευαστεί µια
τέτοια φόρµα.
Στο πρώτο βήµα της διαδικασίας θα πρέπει να µεταφερθούµε στο κεντρικό παράθυρο διαχείρισης της Microsoft Access
και από τη σελίδα «Φόρµες» να επιλέξουµε τη δηµιουργία φόρµας σε προβολή σχεδίασης. Στην περίπτωση αυτή θα
εµφανιστεί στην οθόνη του υπολογιστή µας µια κενή φόρµα την οποία µπορούµε να την αποθηκεύσουµε αποδίδοντάς
της το όνοµα ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Στην επιφάνεια αυτής της φόρµας θα κατασκευάσουµε στη συνέχεια τα
τρία στοιχεία ελέγχου µε τον ακόλουθο τρόπο:
Το πλαίσιο λίστας που εµφανίζεται στο πάνω µέρος της φόρµας έχει το όνοµα ARTIST_LISTκαι είναι έτσι
κατασκευασµένο έτσι ώστε να εµφανίζει το όνοµα και το επώνυµο για τον κάθε ερµηνευτή της βάσης δεδοµένων. Κάθε
φορά που ο χρήστης επιλέγει ένα όνοµα από τη λίστα, το πλαίσιο λίστας επιστρέφει τον κωδικό του επιλεγµένου
ερµηνευτή. Εποµένως η πηγή των δεδοµένων προέλευσης για αυτό το στοιχείο ελέγχου είναι ένα ερώτηµα – ας το
ονοµάσουµε ΚΑΤΑΛΟΓΟΣ ΕΡΜΗΝΕΥΤΩΝ – που όταν εκτελείται επιστρέφει τον κωδικό, το όνοµα και το επώνυµο
για τον κάθε ερµηνευτή που είναι καταχωρηµένο στον οµώνυµο πίνακα.
Στο επόµενο βήµα της διαδικασίας θα πρέπει να κατασκευάσουµε την υποφόρµα που για τον επιλεγµένο ερµηνευτή, θα
εµφανίζει τα τραγούδια που ερµηνεύονται από αυτόν. Αυτή η φόρµα θα κατασκευαστεί ως ξεχωριστή φόρµα και έτσι
ώστε να εµφανίζει τις εγγραφές της τη µία κάτω από την άλλη. Πριν όµως κατασκευάσουµε τη φόρµα αυτή, θα πρέπει
να κατασκευάσουµε το ερώτηµα που θα τροφοδοτεί την εν λόγω φόρµα µε δεδοµένα. Η προεπισκόπηση του
ερωτήµατος αυτού σε προβολή σχεδίασης, προβολή φύλλου δεδοµένων και προβολή κώδικα SQL παρουσιάζεται στη
συνέχεια:
Θα πρέπει να σηµειωθεί ωστόσο πως σε αντίθεση µε τα υπόλοιπα ερωτήµατα που έχουµε δει µέχρι τώρα, αυτό το
ερώτηµα δεν εκτελείται πάντα αλλά µόνο όταν η φόρµα ∆ΙΑΧΕΙΡΙΣΗ ΕΡΜΗΝΕΥΤΩΝ είναι ανοικτή και ο χρήστης
έχει επιλέξει κάποιο ερµηνευτή στο πλαίσιο λίστας ARTIST_LIST. Αυτό συµβαίνει διότι το ερώτηµα επιστρέφει
εκείνες τις εγγραφές, των οποίων ο κωδικός ερµηνευτή είναι εκείνος που επιστρέφεται από το πεδίο
[Forms]![ΤΡΑΓΟΥ∆ΙΑ - ΕΡΜΗΝΕΥΤΕΣ]![ARTIST_LIST]. Για να µπορέσει όµως να λάβει χώρα η επιστροφή της
τιµής αυτού του πεδίου, θα πρέπει η φόρµα [ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ] να είναι ανοικτή έτσι ώστε να µπορέσει
ο χρήστης να χρησιµοποιήσει το πεδίο [ARTIST_LIST] για να επιλέξει κάποιο ερµηνευτή. Για το λόγο αυτό τα
ερωτήµατα αυτού του τύπου που είναι ειδικά σχεδιασµένα για να εκτελούνται µέσα από κάποια φόρµα ή υποφόρµα, δεν
έχει νόηµα να χρησιµοποιούνται απευθείας από το κεντρικό παράθυρο διαχείρισης της βάσης δεδοµένων και από τη
σελίδα «Ερωτήµατα», διότι πολύ απλά δεν πρόκειται να λειτουργήσουν. Πράγµατι εάν επιχειρήσουµε να εκτελέσουµε
το ερώτηµα από αυτό το παράθυρο και ταυτόχρονα η φόρµα [ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ] είναι κλειστή η
Microsoft Access θα εµφανίσει το παράθυρο «Τιµή Παραµέτρου» και θα ζητήσει από το χρήστη να καταχωρήσει την
τιµή εκείνη που είναι αναγκαία για την εκτέλεση του ερωτήµατος,.
Μετά την κατασκευή του ερωτήµατος ας προχωρήσουµε στην κατασκευή της υποφόρµας η οποία θα εµφανίζει τα
τραγούδια του επιλεγµένου ερµηνευτή. Επειδή η επιλογή ενός τραγουδιού σε αυτή τη φόρµα θα έχει ως αποτέλεσµα
την εµφάνιση των ταινιών στις οποίες ακούγεται αυτό το τραγούδι, η χρήση του πεδίου Κωδικός Τραγουδιού είναι
αναγκαία. Η υποφόρµα αυτή θα κατασκευαστεί ως ξεχωριστή φόρµα και θα παρουσιάζει τις εγγραφές που
επιστρέφονται από το παραπάνω ερώτηµα, τη µία κάτω από την άλλη,. Εποµένως θα κατασκευαστεί χρησιµοποιώντας
την ίδια διαδικασία που εφαρµόσαµε για την κατασκευή της φόρµας συγκεντρωτικών στοιχείων του πίνακα ΤΑΙΝΙΑ
που παρουσιάσαµε σε προηγούµενη ενότητα. Τυπικό παράδειγµα µιας τέτοιας υποφόρµας παρουσιάζεται στο επόµενο
σχήµα:
Μετά την κατασκευή της παραπάνω φόρµας, θα πρέπει να την εισάγουµε ως υποφόρµα στην τρέχουσα φόρµα. Αυτή η
διαδικασία µπορεί να πραγµατοποιηθεί χρησιµοποιώντας το κατάλληλο κουµπί εντολών από την εργαλειοθήκη, και
έχοντας ενεργοποιηµένο τον οδηγό της Microsoft Access. Οι διαδοχικές οθόνες του οδηγού που εµφανίζονται κατά τη
διαδικασία δηµιουργίας αυτής της υποφόρµας παρουσιάζονται στη συνέχεια:
Παρατηρούµε πως στην περίπτωση αυτή η χρήση του οδηγού είναι εξαιρετικά απλή, αφού το µόνο που έχουµε να
καθορίσουµε είναι η φόρµα που θα τοποθετηθεί ως υποφόρµα στην επιφάνεια της τρέχουσας φόρµας, καθώς και το
όνοµα µε το οποίο αυτή η υποφόρµα θα είναι γνωστή. Ας σηµειωθεί πως το όνοµα που καθορίζουµε χρησιµοποιώντας
τη δεύτερη οθόνη του οδηγού δεν είναι υποχρεωτικά το ίδιο µε το όνοµα της υποφόρµας, αν και γενικά συνίσταται η
χρήση του ιδίου ονόµατος έτσι ώστε να διευκολύνεται η ανάπτυξη της εφαρµογής – η χρήση πολλών και διαφορετικών
ονοµάτων για το ίδιο ουσιαστικά στοιχείο είναι καλό να αποφεύγεται.
Μετά την ολοκλήρωση της παραπάνω διαδικασίας, η υποφόρµα εµφανίζεται στην επιφάνεια της τρέχουσας φόρµας και
σε προβολή σχεδίασης, ως ένα επιπλέον στοιχείο ελέγχου. Θα πρέπει ωστόσο να σηµειωθεί, πως η µεταβολή των
ιδιοτήτων της, δεν µπορεί να γίνει από το σηµείο αυτό, αλλά µόνο από το κεντρικό παράθυρο διαχείρισης της βάσης
δεδοµένων και από τη σελίδα των φορµών. Ας υποθέσουµε για παράδειγµα πως επιθυµούµε να µεταβάλλουµε το
χρώµα φόντου της επιφάνειας της υποφόρµας. Για να το κάνουµε αυτό, θα πρέπει να µεταφερθούµε στη σελίδα
«Φόρµες» του κεντρικού παραθύρου διαχείριση της βάσης δεδοµένων, να ανοίξουµε τη φόρµα ΥΠΟΦΟΡΜΑ
ΤΡΑΓΟΥ∆ΙΩΝ ΕΡΜΗΝΕΥΤΗ σε προβολή σχεδίασης, και να πραγµατοποιήσουµε τις αλλαγές που θέλουµε. Εάν στη
συνέχεια αποθηκεύσουµε αυτές τις αλλαγές, κλείσουµε τη φόρµα ΥΠΟΦΟΡΜΑ ΤΡΑΓΟΥ∆ΙΩΝ ΕΡΜΗΝΕΥΤΗ και
ανοίξουµε τη φόρµα ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ, θα διαπιστώσουµε πως η υποφόρµα εµφανίζεται πλέον µε τα νέα
χαρακτηριστικά εµφάνισης. Αυτό σηµαίνει πως αν και έχουµε τη δυνατότητα να χρησιµοποιήσουµε µια φόρµα ως
υποφόρµα κάποιας άλλης φόρµας, εν τούτοις, η διαµόρφωση των ιδιοτήτων της θα γίνει θεωρώντας τη ως ξεχωριστό
αυτόνοµο αντικείµενο και όχι ως τµήµα κάποιου άλλου αντικειµένου.
Μετά την κατασκευή της υποφόρµας τραγουδιών ερµηνευτή, θα πρέπει να τη συσχετίσουµε µε το πλαίσιο λίστας
ARTIST_LIST έτσι ώστε κάθε φορά που ο χρήστης θα επιλέγει σε αυτό κάποιον άλλο ερµηνευτή, να ανανεώνονται τα
περιεχόµενα της υποφόρµας και να εµφανίζονται τα νέα δεδοµένα. Αυτή η ανανέωση των περιεχοµένων της υποφόρµας
θα λάβει χώρα δια της κλήσης της µεθόδου Requery, η οποία ως γνωστόν επανεκτελεί το ερώτηµα που τροφοδοτεί την
υποφόρµα µε δεδοµένα, και εµφανίζει τις νέες εγγραφές που επιστρέφονται από αυτό. Επειδή αυτή η διαδικασία θα
πρέπει να γίνεται κάθε φορά που ενηµερώνεται το πλαίσιο λίστας µε τη νέα επιλογή του χρήστη, είναι προφανές πως
αυτός ο κώδικας θα πρέπει να τοποθετηθεί στη διαδικασία συµβάντος «Μετά από ενηµέρωση» αυτού του στοιχείου
ελέγχου:
Με εντελώς ανάλογο τρόπο θα κατασκευάσουµε και το πλαίσιο λίστας που θα εµφανίζει τους τίτλους των ταινιών στις
οποίες ακούγεται το τραγούδι που επέλεξε ο χρήστης στην προηγούµενη υποφόρµα. Και στην περίπτωση αυτή θα
κατασκευάσουµε ένα ερώτηµα το οποίο θα επιστρέφει τους τίτλους των ταινιών των οποίων ο κωδικός µαζί µε τον
κωδικό του τραγουδιού που αντιστοιχεί στην επιλεγµένη εγγραφή της υποφόρµας τραγουδιών ερµηνευτή, ευρίσκονται
στην ίδια εγγραφή του πίνακα ΕΠΕΝ∆ΥΣΗ. Η προεπισκόπηση αυτού του ερωτήµατος σε προβολή σχεδίασης και
κώδικα SQL παρουσιάζεται στο επόµενο σχήµα:
Έχοντας κατασκευάσει το παραπάνω ερώτηµα ας υλοποιήσουµε τώρα το πλαίσιο λίστας που θα εµφανίζει τους τίτλους
των ταινιών που θα επιστρέφονται από αυτό. Η διαδικασία κατασκευής ενός τέτοιου στοιχείου έχει ήδη περιγραφεί
αναλυτικά πολλές φορές στις προηγούµενες σελίδες, και για το λόγο αυτό αφήνεται ως άσκηση στους φοιτητές. Ας
αποδώσουµε στο πλαίσιο αυτό το όνοµα MOVIE_LIST. Μετά τη δηµιουργία του πλαισίου λίστας θα πρέπει να το
συσχετίσουµε µε την υποφόρµα τραγουδιών ερµηνευτή έτσι ώστε κάθε φορά που ο χρήστης επιλέγει σε αυτή ένα νέο
τραγούδι, να ενηµερώνονται τα περιεχόµενα του πλαισίου MOVIE_LIST έτσι ώστε να εµφανίζει τους τίτλους των
τραγουδιών στους οποίους ακούγεται ένα νέο τραγούδι. Για να το κάνουµε αυτό θα πρέπει να χρησιµοποιήσουµε τη
µέθοδο Requery αυτού του πλαισίου. Αυτή η µέθοδος θα πρέπει να τοποθετηθεί στη µέθοδο «Με το κλικ» της
κεντρικής φόρµας η οποία εκτελείται κάθε φορά που ο χρήστης επιλέγει κάποιο τραγούδι από την υποφόρµα
τραγουδιών ερµηνευτή. Ο κώδικας που εκτελείται στην περίπτωση αυτή έχει τη µορφή
ΕΡΓΑΣΤΗΡΙΟ 7
Μετά την κατανόηση και την υλοποίηση της δοµής της βάσης ταινιών video και των φορµών αλληλεπίδρασης µε το
χρήστη, ας περάσουµε τώρα στην παρουσίαση της διαδικασίας δηµιουργίας αναφορών ή εκθέσεων, οι οποίες
επιτρέπουν την προεπισκόπηση και την εκτύπωση των δεδοµένων των πινάκων της βάσης. Στις επόµενες σελίδες θα
δοθούν τυπικά παραδείγµατα δηµιουργίας αναφορών που καλύπτουν όλες τις περιπτώσεις από τις πιο απλές έως τις πιο
δύσκολες έτσι ώστε οι φοιτητές να κατανοήσουν τη διαδικασία δηµιουργίας τους και να είναι σε θέση να
κατασκευάσουν τις δικές τους αναφορές.
Μια αναφορά µπορεί να στηρίζεται τόσο σε ένα πίνακα όσο και σε ένα ερώτηµα. Στην πρώτη περίπτωση που είναι και
η πιο απλή η αναφορά εµφανίζει τις εγγραφές ενός και µοναδικού πίνακα, ενώ στη δεύτερη περίπτωση τα δεδοµένα
που εµφανίζονται ανήκουν – γενικά – σε περισσότερους από έναν πίνακες. Στην περίπτωση αυτή είναι δυνατή η
ταξινόµηση και η οµαδοποίηση των δεδοµένων έτσι ώστε η προεπισκόπησή τους στον υπολογιστή να είναι εύκολη και
γρήγορη.
Η διαδικασία δηµιουργίας αναφορών µπορεί πάρα πολύ εύκολα να πραγµατοποιηθεί δια της χρήσης του οδηγού της
Microsoft Access. Στα επόµενα σχήµατα παρουσιάζονται οι διαδοχικές οθόνες αυτού του οδηγού κατά τη διαδικασία
δηµιουργίας µιας αναφοράς η οποία εµφανίζει τις εγγραφές του πίνακα ΤΑΙΝΙΑ.
Οι πιο σηµαντικές από τις παραπάνω οθόνες είναι η δεύτερη και η τρίτη που καθορίζουν τα χαρακτηριστικά της
ταξινόµησης και της οµαδοποίησης των δεδοµένων, καθώς και η τέταρτη που καθορίζει τη διάταξη των πεδίων και τον
προσανατολισµό της σελίδας. Η αναφορά που κατασκευάστηκε µε τον τρόπο αυτό σε προβολή προεπισκόπησης,
παρουσιάζεται στο επόµενο σχήµα:
Παρατηρούµε πως στο τέλος της σελίδες εµφανίζονται η τρέχουσα ηµέρα, ηµεροµηνία και ώρα (και πιο συγκεκριµένα
οι τιµές αυτών των στοιχείων κατά τη στιγµή εκτύπωσης της αναφοράς), ο τρέχων αριθµός σελίδας, και το συνολικό
πλήθος σελίδων. Εάν µεταφερθούµε στην προβολή σχεδίασης αυτής της αναφοράς, θα διαπιστώσουµε πως οι εντολές
που εµφανίζουν αυτές τις πληροφορίες είναι οι συνάρτηση Now() (για την τρέχουσα ηµεροµηνία και ώρα), και οι
παράµετροι [Page] και [Pages] για την τρέχουσα σελίδα και το συνολικό πλήθος των σελίδων αντίστοιχα. Οι
πληροφορίες αυτές εµφανίζονται στο υποσέλιδο της σελίδας, και εποµένως θα εκτυπώνονται στο τέλος της κάθε
σελίδας. Ας σηµειωθεί πως η εµφάνιση αυτών των παραµέτρων ρυθµίζεται αυτόµατα από την Access και χωρίς την
παρέµβαση του χρήστη.
Ας περάσουµε τώρα σε ένα πιο σύνθετο παράδειγµα κατασκευής µιας αναφοράς, η οποία θα καλείται µέσα από τη
φόρµα ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Αυτή η αναφορά θα εµφανίζει για τον καλλιτέχνη που έχει επιλέξει ο χρήστης
στο πλαίσιο λίστας ARTIST_LIST, τα ονόµατα των τραγουδιών που ερµηνεύει και τους τίτλους των ταινιών στις
οποίες ακούγονται αυτά τα τραγούδια. Οι εγγραφές τις αναφοράς θα εµφανίζονται οµαδοποιηµένες ως προς τον τίτλο
του τραγουδιού και ταξινοµηµένες κατά αύξουσα σειρά ως προς τον τίτλο της σελίδας. Η διαδικασία δηµιουργίας αυτής
της αναφοράς είναι η εξής:
Στο πρώτο βήµα της διαδικασίας, θα κατασκευάσουµε το ερώτηµα από το οποίο η αναφορά θα διαβάζει δεδοµένα
(δηλαδή το ερώτηµα που θα ορισθεί ως η πηγή των δεδοµένων προέλευσης της αναφοράς). Αυτό το ερώτηµα θα
επιστρέφει το όνοµα και το επώνυµο του ερµηνευτή από τον πίνακα ΕΡΜΗΝΕΥΤΗΣ, τον τίτλο του τραγουδιού από τον
πίνακα ΤΡΑΓΟΥ∆Ι και τον τίτλο της ταινίας από τον πίνακα ΤΑΙΝΙΑ. Εκτός από αυτά τα πεδία, στην κατασκευή του
ερωτήµατος θα χρησιµοποιηθεί και το πεδίο Κωδικός Ερµηνευτή από τον πίνακα ΕΡΜΗΝΕΥΤΗΣ. Αυτό το πεδίο αν
και δεν εµφανίζεται στο τελικό αποτέλεσµα, εν τούτοις είναι αναγκαίο για τη σωστή λειτουργία του ερωτήµατος, και
για το λόγο αυτό χρησιµοποιείται. Η προεπισκόπηση του ερωτήµατος αυτού – στο οποίο θα αποδώσουµε το όνοµα
ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ – σε προβολή σχεδίασης, φύλλου δεδοµένων και κώδικα SQL,
παρουσιάζεται στα επόµενα σχήµατα:
∆εν είναι δύσκολο να διαπιστώσουµε πως το κριτήριο που έχουµε θέσει για το πεδίο Κωδικός Ερµηνευτή του
παραπάνω ερωτήµατος, συσχετίζεται µε το πεδίο ARTIST_LIST της φόρµας ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Αυτό
σηµαίνει πως το εν λόγω ερώτηµα θα εκτελεστεί µε επιτυχία όταν το εν λόγω πεδίο έχει κάποια τιµή, δηλαδή όταν η
φόρµα είναι ανοικτή και ο χρήστης έχει επιλέξει κάποιο ερµηνευτή στο πλαίσιο λίστας ARTIST_LIST. Αυτό είναι
ακόµη ένα παράδειγµα ερωτήµατος που δεν έχει νόηµα να εκτελεστεί από την κεντρική σελίδα διαχείρισης της βάσης
δεδοµένων και από τη σελίδα των ερωτηµάτων, αφού η λειτουργία του αποτελεί τµήµα της λειτουργίας κάποιας από τις
φόρµες της εφαρµογής.
Μετά την κατασκευή του ερωτήµατος από το οποίο η αναφορά θα παίρνει δεδοµένα, ας περάσουµε τώρα στην
κατασκευή της ίδιας της αναφοράς, χρησιµοποιώντας τον οδηγό αναφορών της Microsoft Access. Η διαδικασία αυτή
είναι παρόµοια µε την προηγούµενη και οι οθόνες του οδηγού που χρησιµοποιούνται για τον καθορισµό των ιδιοτήτων
της αναφοράς, παρουσιάζονται στα επόµενα σχήµατα:
Στην πρώτη οθόνη του οδηγού επιλέγουµε κατά τα γνωστά τον πίνακα ή το ερώτηµα από το οποίο η αναφορά παίρνει
δεδοµένα, και µεταφέρουµε τα πεδία που θέλουµε να χρησιµοποιήσουµε στο δεξιό πλαίσιο λίστας του πλαισίου
διαλόγου. Στην προκειµένη περίπτωση επιλέγουµε το ερώτηµα ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ και
δηλώνουµε πως θέλουµε να χρησιµοποιήσουµε όλα τα πεδία του. Στη συνέχεια ορίζουµε τα επίπεδα οµαδοποίησης,
δηλαδή το πλήθος και το είδος των πεδίων ως προς τα οποία θα λάβει χώρα η οµαδοποίηση των δεδοµένων. Εδώ η
οµαδοποίηση γίνεται πρώτα ως προς το επώνυµο και το όνοµα του καλλιτέχνη, και στη συνέχεια ως προς τον τίτλο του
τραγουδιού που ερµηνεύεται από αυτόν. Το µόνο πεδίο που αποµένει µετά από αυτή τη διαδικασία, είναι το πεδίο
Τίτλος Ταινίας. Το πεδίο αυτό χρησιµοποιείται για την ταξινόµηση των εγγραφών. Στο παράδειγµά µας επιλέγουµε την
αύξουσα ταξινόµηση, και εποµένως οι εγγραφές θα εµφανίζονται κατά αύξουσα σειρά ως προς τον τίτλο της ταινίας.
Οι τελευταίες παράµετροι που θα πρέπει να ορίσουµε, αφορούν το είδος της διάταξης των πεδίων στην επιφάνεια της
αναφοράς, και το style εµφάνισης της τελευταίας. Η διαδικασία κατασκευής της αναφοράς ολοκληρώνεται µε την
απόδοση σε αυτή ενός τίτλου ο οποίος θα εµφανίζεται στο επάνω µέρος της κατά τη διαδικασία προεπισκόπησης και
εκτύπωσης του περιεχοµένου της.
Μετά την ολοκλήρωση της διαδικασίας µπορούµε να ανοίξουµε την αναφορά σε προβολή προεπισκόπησης και στη
συνέχεια να εκτυπώσουµε το περιεχόµενό της στον προεπιλεγµένο εκτυπωτή του συστήµατος. Εάν διαπιστώσουµε πως
κάποιες ετικέτες δεν εµφανίζονται ολόκληρες, είτε γιατί χρησιµοποιείται πολύ µεγάλο µέγεθος γραµµατοσειράς είτε
γιατί το κείµενο της ετικέτας είναι αρκετά µεγάλο, µπορούµε να επεξεργαστούµε τα χαρακτηριστικά εµφάνισης της
αναφοράς έτσι ώστε αυτή να εµφανίζεται σωστά. Στην προκειµένη περίπτωση διαπιστώνουµε πως ο τίτλος της
αναφοράς δεν χωρά στο πλάτος της σελίδας, ενώ κάποιες ετικέτες δεν εµφανίζονται ολόκληρες. Για το λόγο αυτό
εµφανίζουµε την αναφορά σε προβολή σχεδίασης και διορθώνουµε τις ατέλειες που χαρακτηρίζουν την εµφάνισή της.
Το τελικό αποτέλεσµα που προκύπτει µετά την πραγµατοποίηση όλων αυτών των διαδικασιών, παρουσιάζεται στο
επόµενο σχήµα:
Από το παραπάνω σχήµα διαπιστώνουµε πως τα χαρακτηριστικά εµφάνισης της αναφοράς είναι εκείνα που είχαµε
καθορίσει κατά το στάδιο της σχεδίασής της: τα δεδοµένα οµαδοποιούνται ως προς το ονοµατεπώνυµο του καλλιτέχνη
και ως προς τον τίτλο του τραγουδιού, ενώ οι εγγραφές χαρακτηρίζονται από αύξουσα ταξινόµηση ως προς τον τίτλο
της ταινίας. Βέβαια στην προκειµένη περίπτωση η αναφορά εµφανίζει µόνο τα τραγούδια του καλλιτέχνη που έχει
επιλεγεί από το χρήστη στο πλαίσιο λίστας ARTIST_LIST της φόρµας ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Εάν όµως
τροποποιήσουµε το ερώτηµα ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ αφαιρώντας το κριτήριο από το πεδίο
κωδικός ερµηνευτή και ανοίξουµε εκ νέου την αναφορά, θα διαπιστώσουµε πως στην προκειµένη περίπτωση εµφανίζει
τα τραγούδια όλων των ερµηνευτών, οµαδοποιηµένα ως προς το επώνυµο και το όνοµα του εκάστοτε ερµηνευτή.
Από το παραπάνω σχήµα παρατηρούµε πως η τρέχουσα ηµεροµηνία – ώρα καθώς και ο τρέχων αριθµός σελίδας,
εµφανίζονται στο τέλος της κάθε σελίδας της αναφοράς. Αυτό συµβαίνει επειδή οι εν λόγω πληροφορίες έχουν
τοποθετηθεί στο υποσέλιδο της σελίδας. Μιλώντας γενικά, εάν κάποια πληροφορία θέλουµε να εµφανίζεται στην αρχή
και στο τέλος της κάθε σελίδας, θα την τοποθετήσουµε στην κεφαλίδα και στο υποσέλιδο της σελίδας, αντίστοιχα.
Αντίθετα, εάν η πληροφορία θέλουµε να εµφανίζεται µόνο µια φορά στην αρχή ή στο τέλος της αναφοράς θα την
τοποθετήσουµε στην κεφαλίδα ή στο υποσέλιδο της αναφοράς. Εάν για παράδειγµα η αναφορά εµφανίζει στήλες µε
αριθµητικές τιµές οι οποίες εκτείνονται σε περισσότερες από µία σελίδες, µπορούµε να τοποθετήσουµε στο υποσέλιδο
της σελίδας ένα πεδίο που να εµφανίζει το άθροισµα των τιµών που εκτυπώνονται στη συγκεκριµένη σελίδα, και στο
υποσέλιδο της αναφοράς ένα πεδίο που να εκτυπώνει το άθροισµα όλων των τιµών της αναφοράς. Η προεπισκόπηση
της τρέχουσας αναφοράς σε προβολή σχεδίασης, παρουσιάζεται στο επόµενο σχήµα:
Από το σχήµα αυτό διαπιστώνουµε πως ο τίτλος της αναφοράς ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ
περιλαµβάνεται στην κεφαλίδα της αναφοράς και για το λόγο αυτό εµφανίζεται µία και µοναδική φορά στο πάνω µέρος
της. Αντίθετα η συνάρτηση Now() και οι παράµετροι [Page] και [Pages] περιλαµβάνονται στο υποσέλιδο της σελίδας,
και για το λόγο αυτό η τρέχουσα ηµεροµηνία – ώρα και ο τρέχων αριθµός σελίδας εµφανίζονται στο τέλος της κάθε
σελίδας. Παρατηρούµε ακόµη πως για κάθε επίπεδο οµαδοποίησης υπάρχει και µία ξεχωριστή κεφαλίδα στην οποία
αναγράφεται το κατάλληλο σε κάθε περίπτωση κείµενο. Στην προκειµένη περίπτωση υπάρχουν τρεις τέτοιες κεφαλίδες
που αναφέρονται στο επώνυµο του ερµηνευτή, στο όνοµα του ερµηνευτή και στον τίτλο του τραγουδιού. Αντίθετα τα
πεδία τα οποία εµφανίζονται ταξινοµηµένα, περιλαµβάνονται στην ενότητα της αναφοράς που φέρει το όνοµα
«Λεπτοµέρεια». Στην προκειµένη περίπτωση υπάρχει µόνο ένα τέτοιο πεδίο, που κατά την προεπισκόπηση της
αναφοράς εµφανίζει τον τίτλο της ταινίας, για όσες ταινίες περιέχουν το κάθε τραγούδι και για τον κάθε ερµηνευτή.
Ολοκληρώνουµε την παρουσίαση της κατασκευής της τρέχουσας αναφοράς µε την περιγραφή της διαδικασίας
προσθήκης ενός κουµπιού εντολής στην επιφάνεια της φόρµας ΤΡΑΓΟΥ∆ΙΑ – ΕΡΜΗΝΕΥΤΕΣ. Αυτό το κουµπί
εντολής θα ανοίγει σε προεπισκόπηση εκτύπωσης την αναφορά που κατασκευάσαµε, η οποία θα εµφανίζει τους τίτλους
των τραγουδιών και των ταινιών που επιστρέφονται από το ερώτηµα ΕΡΜΗΝΕΥΤΕΣ – ΤΡΑΓΟΥ∆ΙΑ – ΤΑΙΝΙΕΣ για
τον καλλιτέχνη που έχει επιλέξει ο χρήστης στο πλαίσιο λίστας ARTIST_LIST. Η κατασκευή αυτού του κουµπιού
εντολής γίνεται δια της χρήσης του οδηγού στοιχείων ελέγχου της Access, οι διαδοχικές οθόνες του οποίου
παρουσιάζονται στα επόµενα σχήµατα.
Να κατασκευάσετε αναφορά που για κάθε διανοµέα να εµφανίζει το πλήθος των ταινιών που
ΑΣΚΗΣΗ 07.02 διανέµονται από αυτόν και το µέσο όρο του αποθέµατος VHS, του αποθέµατος BETA και της
τιµής για αυτές τις ταινίες.
Να κατασκευάσετε φόρµα που να εµφανίζει ένα πλαίσιο λίστας το οποίο θα περιέχει τους
τίτλους των ταινιών που είναι καταχωρηµένοι στον πίνακα ΤΑΙΝΙΑ. Στη συνέχεια να
κατασκευάσετε ένα κουµπί εντολής που όταν χρησιµοποιείται από το χρήστη θα εµφανίζει τους
ΑΣΚΗΣΗ 07.03 τίτλους των τραγουδιών που ακούγονται στην ταινία που έχει επιλέξει ο χρήστης καθώς και τα
ονόµατα των καλλιτεχνών που ερµήνευσαν αυτά τα τραγούδια. Τα στοιχεία αυτά θα
εµφανίζονται στην επιφάνεια της αναφοράς οµαδοποιηµένα ως προς τα ονόµατα των
τραγουδιών και ταξινοµηµένα κατά αύξουσα σειρά ως προς το επώνυµο του ερµηνευτή.
ΕΡΓΑΣΤΗΡΙΟ 8
Το εργαστήριο αυτό είναι το τελευταίο της σειράς των εργαστηριακών µαθηµάτων που αφορούν τη χρήση
και λειτουργία της Microsoft Access. Στα επόµενα δύο εργαστήρια θα περάσουµε στη µελέτη του SQL
Server ο οποίος ως εφαρµογή προσφέρει περισσότερες δυνατότητες σε σχέση µε την Access τόσο ως προς
τον όγκο των δεδοµένων που βρίσκονται αποθηκευµένα στη βάση, όσο και ως προς την ταχύτητα
προσπέλασής τους.
Το αντικείµενο αυτού του εργαστηρίου είναι η µελέτη µερικών χαρακτηριστικών λειτουργιών της
Microsoft Access όπως είναι η ασφάλεια της βάσης δεδοµένων και η τεκµηρίωση του περιεχοµένου της.
Αυτές οι λειτουργίες επιτρέπουν την καλύτερη διαχείριση της βάσης και της πληροφορίας που βρίσκεται
αποθηκευµένη σε αυτή. Η συνοπτική περιγραφή αυτών των διαδικασιών αποτελούν το αντικείµενο των
σελίδων που ακολουθούν.
Αυτό το εργαλείο της Microsoft Access επιτρέπει την ανάλυση και τεκµηρίωση της βάσης δεδοµένων
βοηθώντας έτσι τον προγραµµατιστή να βελτιστοποιήσει τη δοµή της και να δηµιουργήσει εύκολα και
γρήγορα αναφορές τεκµηρίωσης που περιγράφουν τα χαρακτηριστικά των αντικειµένων που
περιλαµβάνονται σε αυτή. Σε µια πιο λεπτοµερή περιγραφή, η λειτουργία αυτή, επιτρέπει την
πραγµατοποίηση τριών διαφορετικών διαδικασιών: (α) τη διάσπαση των πινάκων της βάσης σε
µικρότερους πίνακες – όπου και όταν είναι αναγκαίο – µε τέτοιο τρόπο ώστε να αποµακρυνθεί κάθε
πιθανότητα καταχώρησης διπλοεγγραφών, οι οποίες όπως έχουµε αναφέρει οδηγεί στη δηµιουργία
ασυνεπών δεδοµένων. (β) την ανάλυση της απόδοσης της βάσης και την υπόδειξη πιθανών τρόπων
βελτιστοποίησης οι οποίοι θα αυξήσουν την αποδοτικότητά της και (γ) τη δηµιουργία αναφορών
τεκµηρίωσης για τα αντικείµενα της βάσης δεδοµένων, αναφορές οι οποίες περιγράφουν τη φύση και τα
χαρακτηριστικά της κάθε ιδιότητας αυτών των αντικειµένων. Οι τρεις βασικές λειτουργίες του εργαλείου
ανάλυσης της Microsoft Access, παρουσιάζονται στο επόµενο σχήµα:
Ο οδηγός ανάλυσης πινάκων δεν χρειάζεται να χρησιµοποιηθεί στη συγκεκριµένη βάση δεδοµένων, γιατί η
βάση έχει σχεδιαστεί µε τέτοιο τρόπο ώστε να µην είναι δυνατή η ύπαρξη διπλοεγγραφών στους πίνακες
που περιλαµβάνονται σε αυτή. Ωστόσο σε περιπτώσεις βάσεων η σχεδίαση των οποίων είναι
προβληµατική, η Microsoft Access έχει τη δυνατότητα βελτιστοποίησης της δοµής της βάσης. Ας
θεωρήσουµε για παράδειγµα τον πίνακα ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ του 2ου εργαστηρίου ο οποίος
περιλαµβάνει τόσο τα στοιχεία των ταινιών όσο και των ηθοποιών που συµµετέχουν σε αυτές:
∆εν είναι δύσκολο να διαπιστώσει κανείς πως η περίπτωση αυτή χαρακτηρίζεται από την ύπαρξη
επαναλαµβανόµενων πεδίων, κάτι που οφείλεται στο γεγονός πως στον πίνακα αυτό υπάρχουν πεδία που
ανήκουν σε δύο διαφορετικές οντότητες – την ΤΑΙΝΙΑ και τον ΗΘΟΠΟΙΟ. Αυτό σηµαίνει πως θα πρέπει
να λάβει χώρα διάσπαση των πινάκων σε µικρότερους πίνακες. Αν και το είδος της διάσπασης που θα
πραγµατοποιηθεί στην περίπτωση αυτή είναι προφανές, ας δούµε πώς αυτή η διαδικασία µπορεί να
πραγµατοποιηθεί χρησιµοποιώντας τον οδηγό βελτιστοποίησης της Microsoft Access. Ας µεταφερθούµε
λοιπόν στο κεντρικό menu επιλογών της εφαρµογής, και από τη γραµµή «Εργαλεία» ας επιλέξουµε
«Ανάλυση» και στη συνέχεια «Πίνακας». Στην περίπτωση αυτή θα λάβει χώρα η ενεργοποίηση του
οδηγού βελτιστοποίησης πινάκων της Microsoft Access, οι διαδοχικές οθόνες του οποίου παρουσιάζονται
στη συνέχεια:
Από τις οκτώ οθόνες που εµφανίζονται δια της χρήσης του παραπάνω οδηγού, οι δύο πρώτες δεν εµφανίζουν παρά
ενηµερωτικές πληροφορίες σχετικά µε τη λειτουργία που πρόκειται να πραγµατοποιηθεί και τα προβλήµατα που
πρόκειται να επιλύσει, και για το λόγο αυτό δεν σχολιάζονται καθόλου. Η τρίτη οθόνη εµφανίζει ένα κατάλογο µε τους
πίνακες της βάσης, από όπου ο χρήστης επιλέγει τον πίνακα που επιθυµεί να βελτιστοποιήσει. Στο παράδειγµα αυτό ο
πίνακας που θα χρησιµοποιήσουµε φέρει το όνοµα ΤΑΙΝΙΑ&ΣΥΜΜΕΤΟΧΗ. Ακολουθεί στη συνέχεια ο καθορισµός
του τρόπου µε τον οποίο θα λάβει χώρα ο διαχωρισµός του επιλεγµένου πίνακα. Υπάρχουν δύο εναλλακτικές λύσεις
που µπορούµε να χρησιµοποιήσουµε: η πρώτη λύση είναι να προχωρήσουµε µόνοι µας στο διαχωρισµό των πινάκων,
ενώ η δεύτερη λύση είναι να αφήσουµε τον οδηγό της Access να πραγµατοποιήσει αυτό το διαχωρισµό.
Επιλέγοντας την πραγµατοποίηση του διαχωρισµού δια της χρήσης του οδηγού, εµφανίζεται η πέµπτη οθόνη στην
οποία η εφαρµογή µας προτείνει ένα τρόπο διάσπασης του πίνακα. Παρατηρούµε πως η Access έχει χωρίσει τον πίνακα
σε δύο µικρότερους πίνακες εκ των οποίων ο ένας περιέχει µόνο τα πεδία που αφορούν τις ταινίες, ενώ ο δεύτερος
περιέχει τα υπόλοιπα πεδία που αφορούν τους ηθοποιούς. Οι δύο αυτοί πίνακες συνδέονται µε ένα κοινό πεδίο, δια της
χρήσης του οποίου είναι δυνατή η πραγµατοποίηση της πράξης της σύζευξης ανάµεσά τους. Στην τρέχουσα έκδοσή
τους, οι πίνακες φέρουν τα ονόµατα Πίνακας 1 και Πίνακας 2, αλλά µπορούµε να αποδώσουµε τα δικά µας ονόµατα
εάν κάνουµε double click µε το ποντίκι πάνω στη γραµµή τίτλου του κάθε πίνακα και καταχωρήσουµε το νέο όνοµα
του πίνακα στο πλαίσιο διαλόγου που εµφανίζεται. Εάν δεν υπάρχει κάποιο πεδίο που να χαρακτηρίζεται από την
ύπαρξη µοναδικών τιµών για κάθε εγγραφή, ο οδηγός µπορεί να προσθέσει ένα τεχνητό µοναδικό αναγνωριστικό που
χρησιµοποιείται ως το πρωτεύον κλειδί του πίνακα, ενώ στην αντίθετη περίπτωση ορίζουµε κάποιο από τα υπάρχοντα
πεδία του.
Οι τελευταίες δύο οθόνες χρησιµοποιούνται για τη βελτιστοποίηση του περιεχοµένου των πινάκων. Η πρώτη από
αυτές εµφανίζει τον κατάλογο των εγγραφών που έχουν παρόµοιες τιµές – εάν φυσικά υπάρχουν τέτοιες εγγραφές – και
ζητά από το χρήστη να κάνει τις κατάλληλες σε κάθε περίπτωση διορθώσεις, ενώ η επόµενη επιτρέπει την προαιρετική
κατασκευή ενός ερωτήµατος το οποίο θα εµφανίζει τα περιεχόµενα του αρχικού πίνακα έτσι ώστε να εξακολουθούµε
να χρησιµοποιούνται τα δεδοµένα όπως και πρώτα, παρά το γεγονός ότι πλέον βρίσκονται αποθηκευµένα σε δύο
διαφορετικούς πίνακες.
Το δεύτερο εργαλείο της ανάλυσης της βάσης δεδοµένων που υποστηρίζεται από τη Microsoft Access
αφορά την ανάλυση της απόδοσης της βάσης σύµφωνα µε την τρέχουσα δοµή της, και την εµφάνιση
προτάσεων που αν υλοποιηθούν θα οδηγήσουν σε αύξηση της απόδοσης της βάσης δεδοµένων. Για να
χρησιµοποιήσουµε αυτό το εργαλείο, θα πρέπει να µεταφερθούµε στο κεντρικό menu επιλογών της
εφαρµογής και από τη γραµµή «Εργαλεία» να επιλέξουµε «Ανάλυση» και στη συνέχεια «Απόδοση». Στην
περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο διαλόγου:
Αυτό το πλαίσιο διαλόγου περιλαµβάνει ένα πλήθος σελίδων κάθε µία από τις οποίες αναφέρεται και σε
ένα ξεχωριστό τύπο αντικειµένου. Για κάθε έναν από αυτούς τους τύπους η εφαρµογή εµφανίζει ένα
κατάλογο µε τα αντικείµενα που ανήκουν σε αυτόν, δίδοντας έτσι τη δυνατότητα στο χρήστη να επιλέξει
τα αντικείµενα που θα χρησιµοποιηθούν στην ανάλυση της απόδοσης. Στο παράδειγµα του παραπάνω
σχήµατος η ανάλυση αυτή θα πραγµατοποιηθεί πάνω σε όλα τα αντικείµενα της βάσης. Αν και έχουµε τη
δυνατότητα να ανοίξουµε µια – µια τις σελίδες του παραπάνω διαλόγου και σε κάθε µια από αυτές να
επιλέξουµε όλα τα αντικείµενα, µπορούµε να το κάνουµε πολύ πιο απλά, εµφανίζοντας τη σελίδα µε τίτλο
«Όλοι οι τύποι αντικειµένων», και χρησιµοποιώντας το κουµπί «Επιλογή όλων». Η πραγµατοποίηση αυτής
της διαδικασίας ολοκληρώνεται πατώντας το κουµπί OK.
Στο επόµενο βήµα της διαδικασίας η Microsoft Access προχωρεί στην ανάλυση της βάσης δεδοµένων, και
µετά από ένα µικρό ή µεγάλο χρονικό διάστηµα που εξαρτάται από την πολυπλοκότητα και τη δοµή της
βάσης, εµφανίζει το επόµενο πλαίσιο διαλόγου που περιλαµβάνει τα αποτελέσµατα της ανάλυσης που
πραγµατοποιήθηκε στο προηγούµενο στάδιο.
Από το παραπάνω σχήµα δεν είναι δύσκολο να γίνει αντιληπτό πως τα αποτελέσµατα της ανάλυσης
εµφανίζονται σε τρεις διαφορετικές µορφές: Σύσταση, Εισήγηση και Ιδέα. Επιλέγοντας µε το ποντίκι
κάποιο από αυτά τα αποτελέσµατα στο πλαίσιο «Σηµειώσεις Ανάλυσης» που βρίσκεται ακριβώς από κάτω,
εµφανίζονται πληροφορίες σχετικά µε την προτεινόµενη βελτιστοποίηση. Ας αναφερθεί στο σηµείο αυτό,
πως οι βελτιστοποιήσεις εισήγησης χαρακτηρίζονται από ορισµένα µειονεκτήµατα τα οποία θα πρέπει να
ληφθούν υπ’ όψιν πριν προχωρήσουµε στην πραγµατοποίησή της. Τα µειονεκτήµατα αυτά παρουσιάζονται
στο πλαίσιο «Σηµειώσεις Ανάλυσης». Οι βελτιστοποιήσεις σύστασης και εισήγησης πραγµατοποιούνται
αυτόµατα από την Access, ενώ οι βελτιστοποιήσεις ιδέας πραγµατοποιούνται από το χρήστη και
ακολουθώντας τις οδηγίες που αντιστοιχούν σε αυτές τις προτάσεις. Για το λόγο αυτό, το κουµπί εντολής
που φέρει τον τίτλο «Βελτιστοποίηση» είναι απενεργοποιηµένο (disabled) κάθε φορά που ο χρήστης
επιλέγει κάποια από τις βελτιστοποιήσεις ιδέας.
Η τελευταία επιλογή του περιλαµβάνεται στα εργαλεία ανάλυσης της Microsoft Access είναι η
τεκµηρίωση της βάσης δεδοµένων. Αυτή η λειτουργία πραγµατοποιείται από την οµώνυµη επιλογή του
menu της ανάλυσης και συνίσταται στη δηµιουργία αναφορών που περιέχουν την αναλυτική περιγραφή
του κάθε ενός από τα αντικείµενα της βάσης δεδοµένων. Η επιλογή των αντικειµένων για τα οποία θα
λάβει χώρα η δηµιουργία της τεκµηρίωσης, πραγµατοποιείται από το ίδιο πλαίσιο διαλόγου από το οποίο
επιλέγουµε τα αντικείµενα των οποίων την απόδοση επιθυµούµε να αναλύσουµε. Όσον αφορά το είδος της
τεκµηρίωσης και το βαθµό λεπτοµέρειας στον οποίο αυτή θα πραγµατοποιηθεί, αυτό καθορίζεται από το
κουµπί εντολής που φέρει τον τίτλο «Επιλογές» και ευρίσκεται στο κάτω µέρος του πλαισίου διαλόγου.
Πιο συγκεκριµένα, οι πληροφορίες που µπορούµε να συλλέξουµε για τους πίνακες αφορούν τις ιδιότητές
τους, τις συσχετίσεις που υφίστανται ανάµεσά τους και τα δικαιώµατα πρόσβασης των χρηστών της βάσης
σε αυτούς, για τα πεδία των πινάκων µπορούµε να καταγράψουµε το όνοµά τους, τον τύπο των δεδοµένων
τους, το µέγεθος και τις ιδιότητές τους, ενώ παρόµοια στοιχεία µπορούν να αποθηκευτούν και για τα
ευρετήρια που µπορούµε να κατασκευάσουµε για τα διάφορα πεδία των πινάκων της βάσης, και κάθε φορά
που αυτό είναι αναγκαίο.
Να δηµιουργήσετε αναφορές τεκµηρίωσης της Microsoft Access για όλους τους πίνακες της
βάσης δεδοµένων. Η τεκµηρίωση να αναπτυχθεί στην πλήρη της µορφή περιλαµβάνοντας για
ΑΣΚΗΣΗ 08.03 κάθε πίνακα τις ιδιότητές του, τις συσχετίσεις του µε τους άλλους πίνακες της βάσης και τα
δικαιώµατα χρηστών και οµάδων, και για κάθε πεδίο πίνακα τα ονόµατα, τους τύπους
δεδοµένων, τα µεγέθη τους και τις ιδιότητές τους.
Η δεύτερη οµάδα λειτουργιών που µπορούν να χρησιµοποιηθούν για τη διαχείριση της βάσης δεδοµένων µέσα από το
περιβάλλον της Microsoft Access, συσχετίζεται µε την ασφάλεια της βάσης, δηλαδή µε την προστασία της από
προσπελάσεις µη εξουσιοδοτηµένων χρηστών. Στις επόµενες σελίδες θα µελετήσουµε αναλυτικά τις πιο
χαρακτηριστικές από τις δυνατότητες που µας προσφέρει η εφαρµογή και θα τις εφαρµόσουµε στην τρέχουσα βάση
δεδοµένων έτσι ώστε να κατανοήσουµε τον τρόπο χρήσης τους.
Η πιο χαρακτηριστική από τις ενέργειες που µπορούµε να κάνουµε για να προστατέψουµε τη βάση δεδοµένων, είναι να
ορίσουµε ένα κωδικό πρόσβασης δια της χρήσης του οποίου θα είναι δυνατό το άνοιγµα του αρχείου µέσα από τη
Microsoft Access. Για να ορίσουµε ένα τέτοιο κωδικό θα πρέπει να µεταφερθούµε στο κεντρικό menu επιλογών της
εφαρµογής και από το menu «Εργαλεία» να επιλέξουµε «Ασφάλεια» και στη συνέχεια «Ορισµός κωδικού πρόσβασης
στη βάση δεδοµένων…». Στην περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το επόµενο πλαίσιο
διαλόγου:
Ας σηµειωθεί πως για να είναι δυνατός ο καθορισµός κωδικού πρόσβασης θα πρέπει η βάση να ανοίξει σε κατάσταση
αποκλειστικής χρήσης – στην αντίθετη περίπτωση, θα εµφανιστεί το επόµενο µήνυµα σφάλµατος:
Σύµφωνα µε το παραπάνω µήνυµα για να ανοίξουµε τη βάση σε κατάσταση αποκλειστικής χρήσης θα πρέπει να την
κλείσουµε και στη συνέχεια να την ξανανοίξουµε χρησιµοποιώντας την εντολή «Άνοιγµα» από το menu «Αρχείο».
Στην περίπτωση αυτή θα εµφανιστεί στην οθόνη του υπολογιστή µας το οµώνυµο πλαίσιο διαλόγου στο οποίο θα
επιλέξουµε το όνοµα της βάσης και στη συνέχεια θα καθορίσουµε ότι θέλουµε να την ανοίξουµε για αποκλειστική
χρήση χρησιµοποιώντας αυτή την επιλογή από το πλαίσιο λίστας που εµφανίζεται δίπλα από το κουµπί «Άνοιγµα» του
πλαισίου διαλόγου:
Σχόλιο: Το άνοιγµα µιας βάσης δεδοµένων σε κατάσταση αποκλειστικής χρήσης προστατεύει τα δεδοµένα µιας
κοινόχρηστης βάσης δεδοµένων η οποία µπορεί να προσπελαστεί µέσω ενός δικτύου: όταν ανοίγει µια βάση σε αυτή
την κατάσταση δεν είναι δυνατή η προσπέλαση των δεδοµένων της από τους υπόλοιπους χρήστες του δικτύου αλλά
µόνο από το χρήστη που την άνοιξε.
Για να ακυρώσουµε τον κωδικό πρόσβασης που έχουµε ορίσει για την τρέχουσα βάση δεδοµένων θα πρέπει να
µεταφερθούµε ξανά στο κεντρικό menu επιλογών και από το menu «Εργαλεία» να επιλέξουµε «Ασφάλεια» και στη
συνέχεια όπως και πρώτα «Ορισµός κωδικού πρόσβασης στη βάση δεδοµένων…». Στην περίπτωση αυτή η Access θα
εµφανίσει το πλαίσιο διαλόγου που απεικονίζεται στο δεξί µέρος του παραπάνω σχήµατος, στο οποίο δίδουµε τον
κωδικό πρόσβασης της βάσης, ο οποίος ακυρώνεται. Είναι προφανές πως η ακύρωση του κωδικού πρόσβασης είναι
δυνατή µόνο όταν ο εν λόγω κωδικός είναι γνωστός στο χρήστη της εφαρµογής.
Η δεύτερη µέθοδος ασφάλειας µιας βάσης δεδοµένων της Microsoft Access, είναι η ασφάλειά της σε
επίπεδο χρήστη, οι βασικές αρχές της οποίας ταυτίζονται µε τις αρχές ασφαλείας που χρησιµοποιούνται σε
ένα δίκτυο υπολογιστών. Οι βασικοί στόχοι αυτής της µεθόδου είναι: (α) η προστασία των αντικειµένων
της βάσης (πίνακες, φόρµες, ερωτήµατα, αναφορές και µακροεντολές) από απόπειρες µη
εξουσιοδοτηµένης προσπέλασης και τροποποίησης του περιεχοµένου τους και (β) η προστασία των
ευαίσθητων δεδοµένων της εφαρµογής.
Η χρήση αυτής της µεθόδου προστασίας περιλαµβάνει τη δηµιουργία και διαχείριση χρηστών και οµάδων
χρηστών. Υπάρχουν δύο βασικές οµάδες αυτού του είδους – αυτές φέρουν τα ονόµατα «∆ιαχειριστές» και
«Χρήστες». Είναι προφανές πως τα µέλη της πρώτης οµάδας έχουν πολύ περισσότερα δικαιώµατα
πρόσβασης σε σχέση µε τα µέλη της δεύτερης οµάδας. Εάν οι δύο αυτές οµάδες δεν είναι αρκετές,
µπορούµε να κατασκευάσουµε όσες οµάδες θέλουµε, να αποδώσουµε σε αυτές τα κατάλληλα δικαιώµατα
πρόσβασης, και στη συνέχεια να καταχωρήσουµε σε αυτή τους χρήστες που επιθυµούµε. Ο κάθε χρήστης
κατά την είσοδό του στο σύστηµα θα πρέπει να καταχωρήσει το όνοµα και τον κωδικό του. Στη συνέχεια η
αλληλεπίδρασή του µε τη βάση θα πραγµατοποιηθεί σύµφωνα µε τα δικαιώµατα πρόσβασης που του έχουν
αποδοθεί.
Ας περάσουµε τώρα στην αναλυτική περιγραφή της διαδικασίας καθορισµού χρηστών και οµάδων
χρηστών έτσι όπως αυτή πραγµατοποιείται µέσα από τη Microsoft Access. Προκειµένου να ορίσουµε
αυτές τις πληροφορίες θα πρέπει να µεταφερθούµε στο κεντρικό menu επιλογών της εφαρµογής και από
εκεί να επιλέξουµε «Εργαλεία», «Ασφάλεια» και «Λογαριασµοί χρηστών και οµάδων…». Στην
περίπτωση αυτή εµφανίζεται στην οθόνη µας ένα φύλλο ιδιοτήτων, οι πιο σηµαντικές σελίδες του οποίου
παρουσιάζονται στη συνέχεια:
Από το παραπάνω σχήµα είναι προφανές πως αυτές οι δύο σελίδες επιτρέπουν την προσθήκη και διαγραφή
χρηστών και οµάδων χρηστών καθώς και την τοποθέτηση των χρηστών στις κατάλληλες σε κάθε
περίπτωση οµάδες. Η δηµιουργία ενός χρήστη ή µιας νέας οµάδας γίνεται χρησιµοποιώντας το οµώνυµο
κουµπί εντολής από την κατάλληλη σελίδα ιδιοτήτων και καταχωρώντας στο επόµενο πλαίσιο διαλόγου το
όνοµα και το προσωπικό αναγνωριστικό (PID) του χρήστη ή της οµάδας.
Η τρίτη σελίδα του φύλλου ιδιοτήτων «Λογαριασµοί χρηστών και οµάδων» επιτρέπει την αλλαγή του κωδικού
πρόσβασης του επιλεγµένου χρήστη – δηλαδή αυτού που εµφανίζεται στο πλαίσιο λίστας «Όνοµα χρήστη» της σελίδας
των χρηστών. Όπως συµβαίνει σε όλες τις εφαρµογές αυτού του είδους, ο χρήστης θα πρέπει να καταχωρήσει τον
παλαιό κωδικό πρόσβασης και στη συνέχεια δύο φορές το νέο κωδικό πρόσβασης, έτσι ώστε να αποκλεισθεί κάθε
πιθανότητα εσφαλµένης πληκτρολόγησης.
Η τελευταία διαδικασία µε την οποία θα ασχοληθούµε σε αυτό το εργαστήριο, αφορά την απόδοση των κατάλληλων
δικαιωµάτων πρόσβασης στους χρήστες του συστήµατος. Αυτή η λειτουργία επιτυγχάνεται από την κεντρική γραµµή
εργαλείων της εφαρµογής, εάν µεταφερθούµε στο menu «Εργαλεία» και στη συνέχεια επιλέξουµε «Ασφάλεια» και
«∆ικαιώµατα χρηστών και οµάδων…». Στην περίπτωση αυτή εµφανίζεται στην οθόνη του υπολογιστή µας το φύλλο
ιδιοτήτων µε τον οµώνυµο τίτλο, οι δύο σελίδες του οποίου παρουσιάζονται στη συνέχεια:
Ας µελετήσουµε τη λειτουργία αυτού του πλαισίου ξεκινώντας από την πρώτη σελίδα του. Στο πάνω µέρος του
πλαισίου διαλόγου εµφανίζονται δύο πλαίσια λίστας εκ των οποίων το αριστερό πλαίσιο περιλαµβάνει τα ονόµατα των
χρηστών του συστήµατος – αυτά που είχαν δηµιουργηθεί χρησιµοποιώντας την προηγούµενη διαδικασία – ενώ το δεξί
πλαίσιο εµφανίζει ένα κατάλογο των αντικειµένων της βάσης. Επιλέγοντας κάποιο χρήστη και κάποιο αντικείµενο,
µπορούµε στη συνέχεια χρησιµοποιώντας τα κατάλληλα πλαίσια επιλογής (check boxes) να ορίσουµε τα κατάλληλα
δικαιώµατα πρόσβασης που θα έχει ο επιλεγµένος χρήστης πάνω στο επιλεγµένο αντικείµενο. Αυτά τα δικαιώµατα
χαρακτηρίζονται από τα ονόµατα «Άνοιγµα / Εκτέλεση», «Ανάγνωση σχεδίασης», «Τροποποίηση σχεδίασης»,
«∆ιαχείριση», «Ανάγνωση δεδοµένων», «Ενηµέρωση δεδοµένων», «Εισαγωγή δεδοµένων» και «∆ιαγραφή
δεδοµένων». Στο παράδειγµα του προηγούµενου σχήµατος, ο χρήστης mcFunny, έχει πάνω στον πίνακα ΕΠΕΝ∆ΥΣΗ
τα δικαιώµατα της ανάγνωσης σχεδίασης, της ανάγνωσης δεδοµένων και της εισαγωγής δεδοµένων, ενώ δεν µπορεί να
πραγµατοποιήσει άλλες διαδικασίες, για παράδειγµα να διαγράψει ή να τροποποιήσει τις εγγραφές του συγκεκριµένου
πίνακα.
Με εντελώς ανάλογο τρόπο λαµβάνει χώρα και η απόδοση δικαιωµάτων στις οµάδες χρηστών. Είναι προφανές πως τα
δικαιώµατα πρόσβασης που καθορίζονται για µια οµάδα, µεταφέρονται αυτόµατα σε όλους τους χρήστες που ανήκουν
σε αυτή την οµάδα.
Η δεύτερη σελίδα ιδιοτήτων του παραπάνω πλαισίου διαλόγου επιτρέπει την αλλαγή του κατόχου για τα διάφορα
αντικείµενα της βάσης. Αυτή η διαδικασία είναι πολύ εύκολο να πραγµατοποιηθεί, καθώς το µόνο που έχουµε να
κάνουµε είναι να επιλέξουµε το αντικείµενο από τον κατάλληλο σε κάθε περίπτωση κατάλογο αντικειµένων, και στη
συνέχεια να ορίσουµε το νέο κάτοχο του αντικειµένου χρησιµοποιώντας το οµώνυµο πλαίσιο λίστας. Σε πλήρη
αναλογία µε ανάλογα περιβάλλοντα διαχείρισης πολλών χρηστών, ο κάτοχος του αντικειµένου (owner) ορίζεται ως ο
χρήστης που δηµιούργησε αυτό το αντικείµενο και έχει πλήρη δικαιώµατα πάνω σε αυτό. Είναι προφανές πως εάν τα
δικαιώµατα του κατόχου ενός αντικειµένου µεταβιβαστούν σε κάποιο άλλο χρήστη, αυτός θα έχει πλήρη πρόσβαση
πάνω στο αντικείµενο αυτό, και θα µπορεί να προχωρήσει σε τροποποίηση της δοµής του και του περιεχοµένου του, ή
ακόµη και στη διαγραφή του από τη βάση δεδοµένων της εφαρµογής. Για το λόγο αυτό η διαδικασία µεταβίβασης
δικαιωµάτων των αντικειµένων της βάσης, θα πρέπει να γίνεται µε πολύ µεγάλη προσοχή.
επειδή το νέο πεδίο συσχετίστηκε µε το πεδίο Title του πίνακα BOOK µπορούµε ως
λεζάντα για το νέο πεδίο τη φράση «Τίτλος Βιβλίου».
ΣΗΜΕΙΩΣΗ: Η µετακίνηση των πεδίων µιας φόρµας µπορεί να γίνει και δια της
χρήσης του πληκτρολογίου. Για να το κάνουµε αυτό επιλέγουµε το πεδίο µε το
ποντίκι και στη συνέχεια το µετακινούµε προς τα πάνω, προς τα κάτω, προς τα
αριστερά ή προς τα δεξιά, χρησιµοποιώντας τα αντίστοιχα πλήκτρα του
πληκτρολογίου (δηλαδή τα ↑, ↓, ←, →) και κρατώντας ταυτόχρονα πατηµένο το
πλήκτρο Ctrl. Αυτός ο τρόπος της µετακίνησης είναι ιδιαίτερα χρήσιµος σε
περιπτώσεις κατά τις οποίες επιθυµούµε να µετακινήσουµε το αντικείµενο σε πάρα
πολύ µικρή απόσταση σε σχέση µε την αρχική του θέση. Σε κάθε περίπτωση
µπορούµε να ορίσουµε πλήρως τη θέση του αντικειµένου επί της επιφάνειας της
φόρµας, χρησιµοποιώντας τη σελίδα Μορφή του φύλλου ιδιοτήτων του
αντικειµένου και αποδίδοντας τις κατάλληλες τιµές στα πεδία Αριστερά (Left)
και Πάνω (Top).
Από την άλλη πλευρά, η µεταβολή του µεγέθους του αντικειµένου δια της
χρήσης του πληκτρολογίου, γίνεται χρησιµοποιώντας τα πλήκτρα κίνησης του
δροµέα (δηλαδή τα ↑, ↓, ←, →) και κρατώντας πατηµένο το πλήκτρο Shift.
Ανάλογα µε το πλήκτρο που χρησιµοποιούµε, µπορούµε να µεγαλώσουµε ή να
συρρικνώσουµε το επιλεγµένο σε κάθε περίπτωση αντικείµενο, τόσο κατά την
οριζόντια όσο και κατά την κατακόρυφη διεύθυνση. Τέλος, ο καθορισµός του
µεγέθους του αντικειµένου µπορεί να πραγµατοποιηθεί καταχωρώντας τις
κατάλληλες τιµές στα πεδία «Πλάτος» και «Ύψος» που βρίσκονται στη σελίδα
«Μορφή (Layout)» του φύλλου ιδιοτήτων του αντικειµένου.
Από το παραπάνω σχήµα είναι προφανές πως η στοίχιση των πεδίων µπορεί
να γίνει προς τα αριστερά, προς τα δεξιά, προς τα πάνω ή προς τα κάτω.
Επιπλέον, εάν έχουµε ενεργοποιήσει την επιλογή «Συγκράτηση στο πλέγµα (Snap
to Grid)» που βρίσκεται στο ίδιο menu επιλογών, έχουµε τη δυνατότητα στοίχισης
των αντικειµένων της φόρµας χρησιµοποιώντας το πλέγµα που ορίζεται πάνω στην
επιφάνειά της.
DoCmd.Close
ενώ ο κώδικας που θα τοποθετηθεί στο κουµπί που θα αποθηκεύει την τρέχουσα
εγγραφή θα είναι ο