Professional Documents
Culture Documents
ΒΟΗΘΗΜΑ ΓΙΑ ΤΗΝ ACCESS PDF
ΒΟΗΘΗΜΑ ΓΙΑ ΤΗΝ ACCESS PDF
Εισαγωγή
Στο κεφάλαιο αυτό παρουσιάζεται µια συνοπτική εισαγωγή
στη θεωρία των βάσεων δεδοµένων και των συστηµάτων
διαχείρισης βάσεων δεδοµένων, προκειµένου ο αναγνώστης
να κατανοήσει τις βασικές αρχές λειτουργίας τους και τους
λόγους για τους οποίους αυτά χρησιµοποιούνται
Όπως είναι σε όλους µας γνωστό, ο άνθρωπος κατά τη διάρκεια της ζωής του
βρίσκεται σε µια συνεχή επικοινωνία µε το περιβάλλον του. Η επικοινωνία αυτή
µπορεί να γίνει µε πολλούς τρόπους, όπως είναι η οµιλία, ο γραπτός λόγος και κυρίως
τα αισθητήρια όργανά του. Το κύριο χαρακτηριστικό αυτής της επικοινωνίας, είναι η
ανταλλαγή πληροφοριών που λαµβάνει χώρα ανάµεσα στον κάθε άνθρωπο και το
χώρο µέσα στον οποίο ζει και κινείται. Ο άνθρωπος είναι τόσο ποµπός όσο και
αποδέκτης της πληροφορίας, δηλαδή, µπορεί τόσο να µεταδώσει, όσο και να λάβει
πληροφορίες. Οι πληροφορίες αυτές µπορεί να είναι οποιασδήποτε µορφής, και να
αφορούν σκέψεις, περιγραφές, ή ακόµη και συναισθήµατα. Μπορούν να παραµένουν
οι ίδιες ή να αλλάζουν µε την πάροδο του χρόνου. Σε όλες όµως τις περιπτώσεις
έχουν ένα κοινό χαρακτηριστικό: µεταφέρουν κάποιο περιεχόµενο. Το περιεχόµενο
αυτό, εξαρτάται άµεσα από το φυσικό σύστηµα στο οποίο αναφέρεται: µπορεί να
είναι η αξία κάποιας µετοχής στο χρηµατιστήριο, το αποτέλεσµα µιας ποδοσφαιρικής
αναµέτρησης, η θερµοκρασία ενός καταψύκτη, αλλά και το όνοµα κάποιου φίλου
µας, ο αριθµός της τηλεφωνικής µας σύνδεσης, και η χωρητικότητα του σκληρού
δίσκου που βρίσκεται στον υπολογιστή µας.
Όνοµα ΑΣΘΕΝΗΣ
Επώνυµο Όνοµα
Επώνυµο
Ηλικία Ηλικία
Κωδικός
Κωδικός
ΒΑΣΕΙΣ ∆Ε∆ΟΜΕΝΩΝ
πρώτο και προφανές πρόβληµα, είναι ότι σπαταλούµε άσκοπα αποθηκευτικό χώρο
στο σκληρό δίσκο, αφού την ίδια πληροφορία την αποθηκεύουµε δύο φορές. Το
δεύτερο και σοβαρότερο πρόβληµα, είναι ότι υπάρχει ο κίνδυνος δηµιουργίας
ασυνεπών δεδοµένων (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» της τρέχουσας βά-
σης δεδοµένων.