• Nenhum resultado encontrado

Ανάπτυξη βάσης δεδομένων με τεχνολογία ADO

N/A
N/A
Protected

Academic year: 2023

Share "Ανάπτυξη βάσης δεδομένων με τεχνολογία ADO"

Copied!
46
0
0

Texto

(1)

Πτυχιακή εργασία

Ανάπτυξη Βάσης Δεδομένων με τεχνολογία ADO

ΦΡΑΓΚΟΣ ΚΥΡΙΑΚΟΣ ΑΕΜ: 2317

ΣΤΑΥΡΟΣ ΜΑΚΗΣ ΑΕΜ:1704

ΕΠΙΒΛΕΠΟΥΣΑ ΚΑΘΗΓΗΤΡΙΑ

ΜΗΤΣΑ ΑΙΚΑΤΕΡΙΝΗ

(2)

ΠΡΟΛΟΓΟΣ

Η τεχνολογία ADO μας παρέχει την δυνατότητα να έχουμε πρόσβαση σε βάσεις δεδομένων μέσα από τις ιστοσελίδες μας. Η ADO είναι ένα προγραμματιστικό Interface όπου μπορούμε να έχουμε πρόσβαση στα δεδομένα μιας βάσης δεδομένων.

Σε αυτή την πτυχιακή ασχοληθήκαμε με την ενσωμάτωση των βάσεων σε μια εφαρμογή γραμμένη σε C, μέσω της περιγραφής της τεχνολογίας ΑDΟ, την οποία χρησιμοποιήσαμε. Επίσης περιγράψαμε τα UDL αρχεία. Στο τέλος της παρούσας, υπάρχουν φωτογραφίες και περιγραφή της εφαρμογής μας.

(3)

ΠΕΡΙΕΧΟΜΕΝΑ

ΕΙΣΑΓΩΓΗ 4

ΤΕΧΝΟΛΟΓΙΑ ADO 5 i) ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΤΕΧΝΟΛΟΓΙΑ ADO

ii) ΤΙ ΕΙΝΑΙ Η ADO iii) ADO ΚΑΙ OLE DB iv) ΕΚΔΟΣΕΙΣ ΤΟΥ ADO

OLEDB 6

ΤΟ ADO ΕΝΑΝΤΙ ΤΟΥ BDE 8

i) ΠΛΕΟΝΕΚΤΗΜΑΤΑ ADO ΕΝΑΝΤΙ BDE

ΠΡΟΣΒΑΣΗ ΣΕ ΜΙΑ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ ΑΠΟ ΜΙΑ ΣΕΛΙΔΑ ASP 9

ΣΥΝΔΕΣΗ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ (DATABASE CONNECTION) 9

ΔΗΜΙΟΥΡΓΙΑ ΜΙΑΣ ODBC DATABASE CONNECTION 10

ΤΟ ΑΝΤΙΚΕΙΜΕΝΟ ADO CONNECTION 11

i) ΜΕΘΟΔΟΙ (METHODS) ii) ΙΔΙΟΤΗΤΕΣ (PROPERTIES) iii) ΤΟ ADO RECORDSET

iv) ΔΗΜΙΟΥΡΓΙΑ ΕΝΟΣ ADO TABLE RECORDSET v) ΕΞΑΓΩΓΗ ΔΕΔΟΜΕΝΩΝ ΑΠΟ ΕΝΑ RECORDSET vi) ΕΜΦΑΝΙΣΗ ADO

vii) ΕΜΦΑΝΙΣΗ ΕΓΓΡΑΦΩΝ ΑΠΟ ΜΙΑ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ viii) ADO ΚΑΙ SQL

ix) ΠΡΟΣΘΗΚΗ ΕΓΓΡΑΦΩΝ ΣΕ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ

x) ΕΜΦΑΝΙΣΗ, ΑΛΛΑΓΗ, ΥΠΟΒΟΛΗ ΚΑΙ ΔΙΑΓΡΑΦΗ ΕΓΓΡΑΦΩΝ

ΔΗΜΙΟΥΡΓΙΑ UDL ΑΡΧΕΙΩΝ 25

ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΗΣΕΩΝ (ΜΟΣ) 28

ΕΠΕΞΗΓΗΣΗ ΚΥΡΙΟΥ ΚΩΔΙΚΑ 29

MANUAL ΕΦΑΡΜΟΓΗΣ 34

ΣΥΜΠΕΡΑΣΜΑΤΑ –ΔΥΣΚΟΛΙΕΣ 49

ΒΙΒΛΙΟΓΡΑΦΙΑ 50

(4)

ΕΙΣΑΓΩΓΗ

Έχοντας μια εφαρμογή η οποία χρειάζεται να έχει πρόσβαση στα δεδομένα τα οποία καταχωρεί ένα DBMS τότε πρέπει η εφαρμογή αυτή να είναι σε θέση να δημιουργεί κώδικα σε SQL ο οποίος ανακτά τα ζητούμενα. Σε αυτή την περίπτωση είναι φυσικό να μην είναι εκ των προτέρων προβλέψιμο ακριβώς ποιες εντολές SQL είναι αυτές οι οποίες θα πρέπει να εκτελούνται ακόμα και αν αυτές οι οποίες θα πρέπει να εκτελούνται ακόμα και αν υπάρχει ένας αλγόριθμος με τον οποίο η εφαρμογή θα πρέπει να συντάσσει τον αναγκαίο κώδικα SQL μόλις διατυπώνεται η αντίστοιχη επιθυμία/ανάγκη του χρήστη. Το πρότυπο SQL που αντιμετωπίζει τέτοιου είδους καταστάσεις ονομάζεται δυναμική SQL.

(Ramakrishnan and Gehrke)

(5)

ΤΕΧΝΟΛΟΓΙΑ ADO

I. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΤΕΧΝΟΛΟΓΙΑ ADO

Μπορούμε να χρησιμοποιήσουμε την τεχνολογία ADO για να έχουμε πρόσβαση σε βάσεις δεδομένων μέσα από τις ιστοσελίδες μας.

II. ΤΙ ΕΙΝΑΙ Η ADO

Η ADO είναι μια τεχνολογία της Microsoft.

Τα αρχικά της ADO σημαίνουν ActiveX Data Objects.

Η ADO είναι ένα συστατικό Active-X της Microsoft.

Η ADO εγκαθίσταται αυτόματα με το πρόγραμμα Microsoft IIS.

Η ADO είναι ένα προγραμματιστικό interface για να έχουμε πρόσβαση στα δεδομένα μιας βάσης δεδομένων.

Μπορούμε να έχουμε πρόσβαση στην ADO μέσα από την τεχνολογία ASP (Active Server Pages).

III. ADO ΚΑΙ OLE DB

To OLE DB αποτέλεσε την βάση για την άφιξη του ActiveX Data Objects -ADO. To ADO πήρε τις βασικές έννοιες της πρόσβασης δεδομένων και τις παρουσίασε σε ένα μοντέλο αντικειμένων που ήταν απλούστερο από το DAO και RDO και το οποίο είχε την ευελιξία να έχει πρόσβαση σχεδόν σε κάθε τύπο δεδομένων. Τώρα μπορούμε να έχουμε πρόσβαση σχεδόν σε κάθε τύπο σχεσιακής βάσης δεδομένων και μη σχεσιακής. Αν και αρχικά απλό, δίνοντας μας μόνο τα βασικά για την πρόσβαση στα δεδομένα μας, το ADO αναπτύχθηκε τα δύο τελευταία χρόνια ωριμάζοντας και επεκτείνοντας τις ικανότητες του.

Με το ADO 2.0 τα δεδομένα μπορούν τώρα να προσπελαθούν χρησιμοποιώντας μια μεθοδολογία σελιδοποίησης (paging), που είναι εξαιρετική για ανάπτυξη δικτυακών εφαρμογών. Μπορούμε να αποσυνδέσουμε σύνολα εγγραφών από την αρχική πηγή δεδομένων και να συνεχίσουμε να τα χειριζόμαστε στον client.

(6)

IV. ΕΚΔΟΣΕΙΣ ΤΟΥ ADO

Υπάρχουν τέσσερις διαφορετικές βιβλιοθήκες:

ADODB (Microsoft ActiveX Data Objects library): περιέχει Command, Correction, Error(s), Field(s), Parameters, Properties, Property και Recordset.

ADOR (Microsoft ActiveX Data Objects Recordset Library ) περιέχει Field(s), Parameters, Properties, Property και Recordset.

RDS (Microsoft Remote Data Services library): περιέχει DataControl και DataSp ace

RDSServer (Microsoft Remote Data Services Server library): περιέχει DataFactory.

OLEDB

To ADO είναι μια διεπαφή υψηλού επιπέδου η οποία βασίζεται σε μία άλλη διεπαφή το ΟLΕDΒ.Ουσιαστικά το ADO βασίζεται στο OLEDB παρουσιάζοντας τις ικανότητες και κρύβοντας τις πολυπλοκότητες (μειονεκτήματα) του OLEDB. To OLEDB, είναι μια διεπαφή με χαμηλό επίπεδο προγραμματισμού που παρέχει πρόσβαση σε δεδομένα.

Παρέχει όλες τις ικανότητες (λειτουργίες) του ODBC καθιστώντας το ως έναν από τους τρόπους πρόσβασης σε δεδομένα. Επίσης το OLEDB υπερβαίνει το ODBC παρέχοντας πρόσβαση υψηλής απόδοσης σε όλα τα είδη δεδομένων σχεσιακά και μη σχεσιακά.

Πρέπει να σημειωθεί ότι το OLEDB δεν προορίστηκε για να αντικαταστήσει το ODBC.

Το OLEDB έχει δύο κύρια εξαρτήματα για να συνδέεται με τα δεδομένα : καταναλωτές (clients) και παροχείς (servers). Καταναλωτές όπως client-server ή web εφαρμογές χρησιμοποιούν δεδομένα. Οι παροχείς είναι τα εξαρτήματα που επικοινωνούν με τα δεδομένα μεταφράζοντας την πληροφορία και παρουσιάζοντας μια κοινή διεπαφή για κάθε τύπο καταναλωτή. Ο χρήστης δεν χρειάζεται να ξέρει τον τρόπο πρόσβασης των δεδομένων. Αυτή η ικανότητα είναι ενσωματωμένη στο OLEDB μέσω του παρόχου.

Αυτή την στιγμή υπάρχουν οδηγοί OLE DB μόνο για κάποια συστήματα βάσεων δεδομένων : για την Access , Microsoft SQL Server και Oracle .Τα συστήματα που δεν χρησιμοποιούν ακόμη οδηγούς OLE DB έχουν έναν οδηγό ODBC που σημαίνει ότι επικοινωνούν με την βάση δεδομένων χρησιμοποιώντας τρία επίπεδα : Σύστημα βάσης δεδομένων ODBC OLE DB.

To OLEDB είναι σχεδιασμένο για όλους τους τύπους αποθήκευσης δεδομένων, περιλαμβάνοντας σχεσιακές βάσεις δεδομένων και μη σχεσιακές πηγές δεδομένων όπως το ηλεκτρονικό ταχυδρομείο ή συστήματα αρχείων. To OLEDB περιλαμβάνει επιπρόσθετα στοιχεία (συναρτήσεις στην πραγματικότητα) που δεν έχουν δεδομένα αλλά

(7)

ενσωματώνουν κάποιες υπηρεσίες παράγοντας και χρησιμοποιώντας δεδομένα. Ένα στοιχείο αυτών των υπηρεσιών είναι ο επεξεργαστής ερωτημάτων που επιτρέπει την σύνδεση μεταξύ ετερογενών πηγών δεδομένων ή μεταξύ δεδομένων από πίνακες διαφορετικού τύπου. Ο επεξεργαστής ερωτημάτων δρα ως καταναλωτής- client παίρνοντας γραμμές από κάθε πίνακα . Από την άλλη δρα ως παροχέας- serverδημιουργώντας ένα σύνολο δεδομένων και από τις δύο πηγές επιστρέφοντας στον καταναλωτή ένα σύνολο έγγραφων.

(8)

ΤΟ ADO ΕΝΑΝΤΙ ΤΟΥ BDE

Το BDE (Borland Database Engine ) είναι ένας δημοφιλής τρόπος προσπέλασης δεδομένων μέσω του C++Builder και είναι ένα ανεξάρτητο επίπεδο γλώσσα προγραμματισμού ακριβώς κάτω από την βιβλιοθήκη του VCL .

Πάντα υπήρχε μια αγορά για τη χρήση μη ΒDE συστατικών με βασιζόμενα στη VCL σε προγράμματα της Delphi και του C++Builder. Επίσης το BDE θεωρείται ότι είναι αργό για ορισμένες εφαρμογές, ανεξάρτητα από το εάν αυτό ισχύει πραγματικά ή όχι .Κατά δεύτερον, οι απαιτήσεις του BDE σε χώρο δίσκου και μνήμης θεωρούνται υπερβολικές από ορισμένους. Είναι δύσκολη η εγκατάσταση του BDE στην εφαρμογή του τελικού χρήστη. Ακόμη και με εργαλεία εγκατάστασης όπως το Wise και Install Shield, τα οποία μειώνουν την πολυπλοκότητα της διαδικασίας εγκατάστασης σε BDE, το να διασφαλίσει κανείς μια ασφαλή εγκατάσταση ή αναβάθμιση του BDE παραμένει δύσκολη υπόθεση, κυρίως για τις εκδόσεις του BDE που παρουσιάζονται μεταξύ διαδοχικών εκδόσεων του εργαλείου εγκατάστασης.

Πριν από το ADO, οι περισσότερες ομάδες συστατικών επικοινωνίας με βάσεις δεδομένων απευθύνονταν είτε σε συγκεκριμένα συστήματα DBMS όπως η dBase, InterBase είτε σε τεχνολογίες βάσεων δεδομένων όπως το πρότυπο ODBC.

Άλλες ομάδες συστατικών υλοποιούσαν δικά τους υποκατάστατα για το BDE. Ωστόσο, όλες αυτές οι προσεγγίσεις είχαν πρόβλημα –τα συστατικά διέθεταν διεπαφή διαφορετική από αυτή παρείχαν τα συστατικά που ήταν προσανατολισμένα στο BDE. Το γεγονός αυτό καθιστούσε πιο δύσκολη την επαναφορά μιας εφαρμογής στα πλαίσια του BDE εάν αυτό ήταν επιθυμητό. Δυστυχώς το ίδιο ακριβώς μειονέκτημα έχουν και τα συστατικά ADO.

Το ADO έχει αρκετά αλλά μειονεκτήματα συγκριτικά με το BDE. Πρώτα απ’ όλα απαιτεί ένα συγκεκριμένο αλφαριθμητικό σύνδεσης το οποίο θα κατονομάζει έναν πάροχο, έναν server και μία βάση δεδομένων. Αυτό καθιστά πολύ πιο δύσκολη την αλλαγή της εφαρμογής ώστε να υποστηρίζει άλλες βάσεις δεδομένων ή συστήματα DBMS χωρίς να απαιτούνται αλλαγές στον κώδικα. Κατά δεύτερον, σε αντίθεση με το BDE, η SQL στα συστατικά ADO δεν μπορεί να χρησιμοποιείται για ετερογενείς ενώσεις πινάκων από διαφορετικές βάσεις δεδομένων του ίδιου ή διαφορετικών DBMS .

Ένα σημείο προσοχής είναι ότι με τα συστατικά ADO θα πρέπει να ανησυχεί ο χρήστης για τις πιθανές αναθεωρήσεις των υποκείμενων βιβλιοθηκών. Όπως για παράδειγμα η βιβλιοθήκη jetτων αντικειμένων ADO που απαιτείται από την access για την σύνδεσή της με άλλες εφαρμογές.

(9)

I. ΠΛΕΟΝΕΚΤΗΜΑΤΑ ADO ΕΝΑΝΤΙ BDE

Μεγάλο μέρος του λογισμικού που απαιτείται για την υποστήριξη τους παρέχεται μαζί με το λειτουργικό σύστημα, οπότε δεν χρειάζεται να κάνει κάτι ειδικό ο χρήστης για την εγκατάσταση .

Λόγω του ότι η εξέλιξη των προγραμμάτων οδήγησης για το BDE είναι βραδύτερη απ’

ότι στις προηγούμενες εκδόσεις το ADO είναι ο μοναδικός τρόπος για την προσπέλαση ασυνήθιστων ή προηγμένων τεχνολογιών δεδομένων όπως η XML.

Τα συστατικά ADO μπορούν να διευκολύνουν την μετάβαση μεταξύ διαφορετικών

γλωσσών όπως για παράδειγμα από Visual

C++ της Microsoft στην C++ Builder της Borland.

Τα συστατικά ADOQuery είναι πάντα επεξεργάσιμα, χωρίς να καταφεύγουν σε αποθηκευμένες ενημερώσεις, Update SQL, ή στις πολύπλοκες συνθήκες που καθιστούν επιτυχή μια αίτηση για ανάκτηση δεδομένων (Request Live). Τα συστατικά ADO επιτρέπουν την ασύγχρονη εκτέλεση κώδικα SQL και την παρακολούθηση της προόδου εκτέλεσης εντολών μέσω χειριστών συμβάντων.

ΠΡΟΣΒΑΣΗ ΣΕ ΜΙΑ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ ΑΠΟ ΜΙΑ ΣΕΛΙΔΑ ASP

Ο κανονικός τρόπος για να έχουμε πρόσβαση σε μια βάση δεδομένων μέσα από μια σελίδα ASP είναι ο εξής :

1. Δημιουργία μιας σύνδεσης ADO με μια βάση δεδομένων.

2. Άνοιγμα της σύνδεσης της βάσης δεδομένων (database connection).

3. Δημιουργία ενός ADO recordset.

4. Άνοιγμα του recordset.

5. Εξαγωγή των δεδομένων που θέλουμε από το recordset.

6. Κλείσιμο του recordset.

7. Κλείσιμο της σύνδεσης.

ΣΥΝΔΕΣΗ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ (DATABASE CONNECTION)

Πριν μπορέσουμε να έχουμε πρόσβαση σε μια βάση δεδομένων μέσα από μια ιστοσελίδα, πρέπει πρώτα να δημιουργήσουμε μια σύνδεση βάσης δεδομένων (database connection).

O πιο εύκολος τρόπος να συνδέσουμε μια βάση είναι να χρησιμοποιούμε a DSN-less σύνδεση η οποία μπορεί να χρησιμοποιηθεί ενάντια της Microsoft Access στο web site.

(10)

Εάν η βάση είναι για παράδειγμα η "northwind.mdb" η οποία βρίσκεται στο web directory "c:/webdata/", μπορείτε να συνδέσετε την βάση με τον ακόλουθο ASP κώδικα:

<%

set conn=Server.CreateObject("ADODB.Connection") conn.Provider="Microsoft.Jet.OLEDB.4.0"

conn.Open "c:/webdata/northwind.mdb"

%>

ΔΗΜΙΟΥΡΓΙΑ ΜΙΑΣ ODBC DATABASE CONNECTION

Αν έχουμε μια ODBC βάση δεδομένων με όνομα northwind, μπορούμε να συνδεθούμε στη βάση δεδομένων με τον εξής ASP κώδικα :

<%

set conn = Server.CreateObject("ADODB.Connection") conn.Open "northwind"

%>

Με μια ODBC σύνδεση, μπορούμε να συνδεθούμε με μια οποιαδήποτε βάση δεδομένων και σ’ οποιονδήποτε υπολογιστή στο δίκτυο για όσο καιρό είναι διαθέσιμη μια σύνδεση ODBC.

ΤΟ ΑΝΤΙΚΕΙΜΕΝΟ ADO CONNECTION

Το αντικείμενο ADO Connection χρησιμοποιείται για να καθιερώσουμε μια σύνδεση βάσης δεδομένων (database connection).

Σύνταξη :

(11)

conn.method conn.property

Οι πιο κοινές Μέθοδοι και Ιδιότητες : I. ΜΕΘΟΔΟΙ (METHODS)

Close, κλείνει μια σύνδεση.

Execute, εκτελεί ένα ερώτημα (query), εντολή ή διαδικασία.

Open, ανοίγει μια σύνδεση.

II. ΙΔΙΟΤΗΤΕΣ (PROPERTIES)

Mode, ορίζει ή επιστρέφει την άδεια πρόσβασης του provider.

Provider, ορίζει ή επιστρέφει το όνομα του provider.

State, επιστρέφει μια τιμή που περιγράφει αν η σύνδεση είναι ανοικτή ή κλειστή.

Version, Επιστρέφει τον αριθμό έκδοσης (version) της ADO.

III. ΤΟ ADO RECORDSET

Για να μπορέσουμε να διαβάσουμε τα δεδομένα μιας βάσης δεδομένων, πρέπει αυτά πρώτα να φορτωθούν σ’ ένα recordset.

IV. ΔΗΜΙΟΥΡΓΙΑ ΕΝΟΣ ADO TABLE RECORDSET

Αφού έχουμε δημιουργήσει μια σύνδεση βάσης δεδομένων ADO, μπορούμε να

δημιουργήσουμε ένα ADO Recordset. Για παράδειγμα, αν έχουμε μια βάση δεδομένων με όνομα Northwind, μπορούμε να έχουμε πρόσβαση στον πίνακα Customers που ανήκει στη βάση δεδομένων με τις εξής εντολές :

<%

(12)

set conn = Server.CreateObject("ADODB.Connection") conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.Open "c:/webdata/northwind.mdb"

set rs = Server.CreateObject("ADODB.recordset") rs.Open "Customers", conn

%>

V. ΕΞΑΓΩΓΗ ΔΕΔΟΜΕΝΩΝ ΑΠΟ ΕΝΑ RECORDSET

Αφού ανοίξουμε ένα recordset, μπορούμε να εξάγουμε δεδομένα απ’ αυτό. Αν υποθέσουμε ότι έχουμε μια βάση δεδομένων με όνομα Northwind, τότε μπορούμε να έχουμε πρόσβαση στον πίνακα Customers της βάσης δεδομένων με τις εξής εντολές :

<%

set conn = Server.CreateObject("ADODB.Connection") conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.Open "c:/webdata/northwind.mdb"

set rs = Server.CreateObject("ADODB.recordset") rs.Open "Select * from Customers", conn

for each x in rs.fields response.write(x.name) response.write(" = ") response.write(x.value)

(13)

next

%>

VI. ΕΜΦΑΝΙΣΗ ADO

Ο πιο κοινός τρόπος για να εμφανίσουμε τα δεδομένα ενός recordset, είναι να τα εμφανίσουμε σ’ έναν html πίνακα.

Παραδείγματα Εμφάνιση Εγγραφών

Αυτό το παράδειγμα δείχνει πώς να δημιουργήσουμε πρώτα μια σύνδεση βάσης

δεδομένων (database connection), μετά ένα recordset και τέλος πώς να εμφανίσουμε τα δεδομένα σε μια σελίδα HTML.

<body>

<%

set conn = Server.CreateObject("ADODB.Connection") conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.Open(Server.Mappath("northwind.mdb")) set rs = Server.CreateObject("ADODB.recordset") rs.Open "Select * from Customers", conn

do until rs.EOF for each x in rs.Fields Response.Write(x.name) Response.Write(" = ")

(14)

Response.Write(x.value & "<br />") next

Response.Write("<br />") rs.MoveNext

loop rs.close conn.close

%>

</body>

</html>

VII. ΕΜΦΑΝΙΣΗ ΕΓΓΡΑΦΩΝ ΑΠΟ ΜΙΑ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ

Αφού ανοιχθεί ένα recordset, μπορούμε να εμφανίσουμε τα δεδομένα του recordset σε μια HTML σελίδα.

<html>

<body>

<%

set conn = Server.CreateObject("ADODB.Connection") conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.Open(Server.Mappath("northwind.mdb")) set rs = Server.CreateObject("ADODB.recordset")

(15)

sql = "SELECT Companyname, Contactname FROM Customers"

rs.Open sql, conn

%>

<table border="1" width="100%">

<tr>

<%for each x in rs.Fields

response.write("<th>" & x.name & "</th>") next%>

</tr>

<%do until rs.EOF%>

<tr>

<%for each x in rs.Fields%>

<td><%Response.Write(x.value)%></td>

<%next

rs.MoveNext%>

</tr>

<%loop rs.close conn.close

(16)

%>

</table>

</body>

</html>

Αν υποθέσουμε ότι έχουμε μια βάση δεδομένων με όνομα Northwind, μπορούμε να εμφανίσουμε τα δεδομένα του πίνακα Customers με τις εξής εντολές :

<%

set conn = Server.CreateObject("ADODB.Connection") conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.Open "c:/webdata/northwind.mdb"

set rs = Server.CreateObject("ADODB.recordset") rs.Open "Select * from Customers", conn

do until rs.EOF for each x in rs.Fields Response.Write(x.name) Response.Write(" = ")

Response.Write(x.value & "<br />") next

rs.MoveNext loop

rs.close

(17)

conn.close

%>

VIII. ADO ΚΑΙ SQL

Με την SQL, τα δεδομένα που πρέπει να εμφανισθούν σε μια HTML σελίδα μπορούν να φιλτραριστούν και να ταξινομηθούν.

Παραδείγματα

Εμφάνιση μόνο Επιλεγμένων Εγγραφών

Αυτό το παράδειγμα δείχνει πώς να εμφανίσουμε δεδομένα που ικανοποιούν ένα συγκεκριμένο κριτήριο.

<html>

<body>

<%

set conn = Server.CreateObject("ADODB.Connection") conn.Provider="Microsoft.Jet.OLEDB.4.0"

conn.Open(Server.Mappath("northwind.mdb")) set rs = Server.CreateObject("ADODB.recordset") sql = "SELECT Companyname, Contactname FROM Customers WHERE CompanyName LIKE 'A%'"

rs.Open sql, conn

%>

(18)

<table border="1" width="100%">

<tr>

<%for each x in rs.Fields

response.write("<th>" & x.name & "</th>") next%>

</tr>

<%do until rs.EOF%>

<tr>

<%for each x in rs.Fields%>

<td><%Response.Write(x.value)%></td>

<%next

rs.MoveNext%>

</tr>

<%loop rs.close conn.close

%>

</table>

</body>

</html>

(19)

IX. Ταξινόμηση των Εγγραφών με Βάση ένα Συγκεκριμένο Πεδίο Αυτό το παράδειγμα δείχνει πώς να ταξινομήσουμε τα δεδομένα με βάση ένα συγκεκριμένο πεδίο.

<html>

<body>

<%

set conn = Server.CreateObject("ADODB.Connection") conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.Open(Server.Mappath("northwind.mdb")) set rs = Server.CreateObject("ADODB.recordset") sql = "SELECT Companyname, Contactname FROM Customers ORDER BY CompanyName"

rs.Open sql, conn

%>

<table border="1" width="100%">

<tr>

<%for each x in rs.Fields

response.write("<th>" & x.name & "</th>") next%>

</tr>

<%do until rs.EOF%>

(20)

<tr>

<%for each x in rs.Fields%>

<td><%Response.Write(x.value)%></td>

<%next

rs.MoveNext%>

</tr>

<%loop rs.close conn.close

%>

</table>

</body>

</html>

X. ΠΡΟΣΘΗΚΗ ΕΓΓΡΑΦΩΝ ΣΕ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ

<html>

<head>

<title> Προσθήκη σε Βάση Δεδομένων </title>

</head>

<body>

<%

(21)

set conn = Server.CreateObject("ADODB.Connection") conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.Open(Server.mappath("database.mdb")) set rs = Server.CreateObject("ADODB.Recordset") rs.Open "select * from tblGuestBook", conn

%>

<h2> Προσθήκη Εγγραφών </h2>

<form method="post" action="demo_db_new.asp">

<table>

<%

for each x in rs.Fields

if x.name <> "no" and x.name <> "dateadded" then%>

<tr>

<td><%=x.name%></td>

<td><input name="<%=x.name%>"

value="N/A"></td>

<%

end if next rs.close

(22)

conn.close

%>

</tr></table>

<p><input type="submit" name="action"

value="Add Record"> </p>

</form>

<p><a href="showcode.asp?source=demo_db_add.asp">

View source code on how to create input fields based on the fields in the database table</a>. </p>

<p><b> Note : </b> If you click on "Add Record" you will be taken to a new page. On that page you will be able to look at the source code on how to add a new record to a database table.

</p>

<p><a href="ado_demo.asp"> Επιστροφή στην προηγούμενη σελίδα</a></p>

</body>

</html>

(23)

XI. ΕΜΦΑΝΙΣΗ, ΑΛΛΑΓΗ, ΥΠΟΒΟΛΗ ΚΑΙ ΔΙΑΓΡΑΦΗ ΕΓΓΡΑΦΩΝ

<html>

<head><title> List Database </title></head>

<body>

<%

set conn = Server.CreateObject("ADODB.Connection") conn.provider = "Microsoft.Jet.OLEDB.4.0"

conn.open(server.mappath("database.mdb")) set rs = Server.CreateObject("ADODB.Recordset") rs.open "Select * from tblGuestBook" , conn

%>

<h2> List Database (click on button to edit) </h2>

<table border="1" width="100%">

<tr>

<%

for each x in rs.Fields

response.write("<th>" & x.name & "</th>") next

(24)

%>

</tr>

<%do until rs.EOF%>

<tr>

<%

for each x in rs.Fields if x.name = "no" then%>

<form method="post" action =

"demo_db_edit.asp">

<td><input type="submit" name="no"

value="<%=x.value%>"></td>

</form>

<%else%>

<td><%Response.Write(x.value)%></td>

<%end if next

rs.MoveNext

%>

</tr>

<%

(25)

loop rs.close

set rs = nothing conn.close

set conn = nothing

%>

</table>

<p><a href="showcode.asp?source=demo_db_list.asp">

View source code on how to list a database table in an HTML table </a></p>

<p><b> Note : </b> If you click on the numbers in the "no" column you will be taken to a new page. On that page you will be able to look at the source code on how to create input fields based on the fields from one record in the database table. </p>

<p><a href="ado_demo.asp"> Επιστροφή στην προηγούμενη σελίδα</a></p>

</body>

</html>

ΔΗΜΙΟΥΡΓΙΑ UDL ΑΡΧΕΙΩΝ

Η ODBC περιλαμβάνει τη δυνατότητα να αποθηκεύσετε τις πληροφορίες ονόματος προέλευσης δεδομένων (DSN) (η οποία βασικά ποσά σε μόνιμη σύνδεση συμβολοσειρές)

σε ένα απλό αρχείο και όχι στο μητρώο.

ActiveX Data Objects (ADO) παρέχει λειτουργικότητα παρόμοια με τη μορφή ενός αρχείου σύνδεσης δεδομένων (*.udl).

(26)

Βήμα 1

Βήμα 2

Βήμα 3

(27)

Βήμα 4

Βήμα 5

(28)

ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΗΣΕΩΝ (ΜΟΣ)

(29)

Επεξήγηση Κυρίου κώδικα

//---

#ifndef Unit2H

#define Unit2H //---

#include <System.Classes.hpp>

#include <Data.DB.hpp>

#include <Data.Win.ADODB.hpp>

//--- class TDM : public TDataModule

{ __published: // IDE-managed Components TADOConnection *ADOC; TADOQuery *SelFPA; TAutoIncField *SelFPAId; TStringField *SelFPAKod; TIntegerField *SelFPAVal; TStringField *SelFPAKGL; TDataSource *DataSource1; TADOTable *TTF; TDataSource *DSTTF; TAutoIncField *TTFId; TStringField *TTFTMet; TStringField *TTFParast; TIntegerField *TTFFPA; TADOQuery *SelCompany; TADOQuery *UpdCompany; TAutoIncField *SelCompanyId; TStringField *SelCompanyName; TStringField *SelCompanyAFM; TStringField *SelCompanyDOY; TStringField *SelCompanyAddr; TStringField *SelCompanyCity; TStringField *SelCompanyWr; TStringField *SelCompanyTel1; TStringField *SelCompanyTel2; TADOTable *ARE; TADOTable *REG; TDataSource *DSARE; TDataSource *DSREG; TADOQuery *SelAllOwn; TADOQuery *SelAllDrv; TAutoIncField *SelAllOwnId; TStringField *SelAllOwnName; TAutoIncField *SelAllDrvId; TStringField *SelAllDrvName; TDataSource *DSSAO; TDataSource *DSSAD; TADOQuery *SelAuto; TAutoIncField *SelAutoId; TStringField *SelAutoArK; TDateTimeField *SelAutoYfK; TBCDField *SelAutoMf; TBCDField *SelAutoKf; TIntegerField *SelAutoOwn;

TIntegerField *SelAutoDrv;

TDataSource *DSSA;

TADOQuery *InsAuto;

TADOQuery *UpdAuto;

TADOQuery *DelAuto;

TADOQuery *SelOwn;

TADOQuery *InsOwn;

TADOQuery *UpdOwn;

TADOQuery *DelOwn;

TDataSource *DSSO;

private: // User declarations

public: __fastcall TDM(TComponent* Owner); // User declarations

}; //--- extern PACKAGE TDM *DM;

//---

#endif

//--- #pragma hdrstop #include "Unit2.h"

//---

#pragma package(smart_init)

#pragma classgroup "System.Classes.TPersistent"

#pragma resource "*.dfm"

TDM *DM;

//---

__fastcall TDM::TDM(TComponent* Owner) : TDataModule(Owner)

{ } //---

ΚΩΔΙΚΑΣ 1:

Ο παραπάνω κώδικας συμπεριλαμβάνει- συγκεντρώνει όλα τα στοιχειά της βάσης(data module). Eχει όλους τους πίνακες (Components) ώστε να προσπελασθούν από τον εκάστοτε πίνακα.

//--- #ifndef Unit1H

#define Unit1H //---

#include <System.Classes.hpp>

#include <Vcl.Controls.hpp>

#include <Vcl.StdCtrls.hpp>

#include <Vcl.Forms.hpp>

#include <Vcl.Ribbon.hpp>

#include <Vcl.RibbonLunaStyleActnCtrls.hpp>

#include "AdvOfficeStatusBar.hpp"

#include "bsribbon.hpp"

#include "bsSkinCtrls.hpp"

#include "bsDialogs.hpp"

#include "bsMessages.hpp"

#include "bsPngImageList.hpp"

#include "bsSkinData.hpp"

#include "bsSkinHint.hpp"

#include "bsSkinMenus.hpp"

#include "BusinessSkinForm.hpp"

#include <Vcl.ImgList.hpp>

#include <Vcl.Menus.hpp>

#include "RzStatus.hpp"

//--- class TForm1 : public TForm

{ __published: // IDE-managed Components TbsRibbon *bsRibbon1; TbsPngImageList *bsPngImageList1; TbsSkinMessage *SM; TbsSelectSkinDialog *bsSelectSkinDialog1; TbsBusinessSkinForm *bsBusinessSkinForm1; TbsSkinData *bsSkinData1; TbsCompressedSkinList *bsCompressedSkinList1; TbsResourceStrData *bsResourceStrData1; TbsSkinHint *bsSkinHint1; TbsSkinStatusBar *bsSkinStatusBar1; TRzClockStatus *RzClockStatus1; TRzKeyStatus *RzKeyStatus1; TRzKeyStatus *RzKeyStatus2; TRzKeyStatus *RzKeyStatus3; TbsSkinPopupMenu *rz; TMenuItem *N12; TMenuItem *N13; TbsRibbonPage *bsRibbonPage1; TbsRibbonPage *bsRibbonPage2; TbsRibbonPage *bsRibbonPage3; TbsRibbonGroup *bsRibbonGroup1; TbsRibbonGroup *bsRibbonGroup2; TbsRibbonGroup *bsRibbonGroup3; TbsRibbonGroup *bsRibbonGroup4; TbsRibbonGroup *bsRibbonGroup5; TMenuItem *N1; TMenuItem *N2; TMenuItem *N3; TMenuItem *N4; TMenuItem *N5; TMenuItem *N6; TbsSkinFrame *bsSkinFrame1; TbsSkinSpeedButton *bsSkinSpeedButton1; TbsSkinSpeedButton *bsSkinSpeedButton2; TbsSkinSpeedButton *bsSkinSpeedButton3; TbsSkinSpeedButton *bsSkinSpeedButton4; TbsRibbonDivider *bsRibbonDivider1; void __fastcall N13Click(TObject *Sender); void __fastcall FormShow(TObject *Sender); void __fastcall N2Click(TObject *Sender); void __fastcall N3Click(TObject *Sender); void __fastcall N6Click(TObject *Sender); void __fastcall N4Click(TObject *Sender); void __fastcall bsSkinSpeedButton1Click(TObject *Sender); void __fastcall bsSkinSpeedButton2Click(TObject *Sender);

private: // User declarations

public: __fastcall TForm1(TComponent* Owner); // User declarations

}; //--- extern PACKAGE TForm1 *Form1;

//---

#endif

//--- #include <vcl.h>

#pragma hdrstop #include "Unit1.h"

#include "Unit2.h"

#include "FpaUnit.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit7.h"

#include "Unit11.h"

//---

#pragma package(smart_init)

#pragma link "AdvOfficeStatusBar"

#pragma link "bsribbon"

#pragma link "bsSkinCtrls"

#pragma link "bsDialogs"

#pragma link "bsMessages"

#pragma link "bsPngImageList"

#pragma link "bsSkinData"

#pragma link "bsSkinHint"

#pragma link "bsSkinMenus"

#pragma link "BusinessSkinForm"

#pragma link "RzStatus"

#pragma resource "*.dfm"

TForm1 *Form1;

String root;

//---

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

{ } //--- void __fastcall TForm1::N13Click(TObject *Sender) { Application->Terminate();

} //--- void __fastcall TForm1::FormShow(TObject *Sender) { WindowState=wsMaximized;

DM->ADOC->Connected=False;

root= ExtractFilePath(ParamStr(0));

DM->ADOC->ConnectionString="File Name=.\\server.udl";

DM->ADOC->Connected=True;

} //--- void __fastcall TForm1::N2Click(TObject *Sender) { FPAForm->ShowModal();

} //--- void __fastcall TForm1::N3Click(TObject *Sender) { MTypeForm->ShowModal();

} //--- void __fastcall TForm1::N6Click(TObject *Sender) { CompForm->ShowModal();

} //--- void __fastcall TForm1::N4Click(TObject *Sender) { AreaForm->ShowModal();

} //--- void __fastcall TForm1::bsSkinSpeedButton1Click(TObject *Sender) { AutoLForm->ShowModal();

} //--- void __fastcall TForm1::bsSkinSpeedButton2Click(TObject *Sender) { OwnLForm->ShowModal();

} //---

ΚΩΔΙΚΑΣ 2:

Ο παραπάνω κώδικας δημιουργεί τον πίνακα των ιδιοκτητών, περιέχει τα στοιχεία –πεδία του πίνακα των ιδιοκτήτων και εξηγεί τη σύσταση των πεδίο του

MANUAL ΕΦΑΡΜΟΓΗΣ

(30)

Εικόνα 1: Αρχική οθόνη εφαρμογής

Εικόνα 2: Επεξεργασία αυτοκίνητων

(31)

Εικόνα 3 : Καταχώρηση νέου αυτοκινήτου

Εικόνα 4 : Μεταβολή-επεξεργασία υπάρχουσας καταχώρησης αυτοκινήτου

(32)

Εικόνα 5 : Αναζήτηση (φίλτρο) αυτοκινήτου

Εικόνα 6 :Διαγραφή αυτοκινήτου

(33)

Εικόνα 7 : Επεξεργασία Πελατών

Εικόνα 8 : Καταχώρηση νέου πελάτη

(34)

Εικόνα 9 : Μεταβολή πελάτη

Εικόνα 10 : Αναζήτηση πελάτη

(35)

Εικόνα 11: Διαγραφή πελάτη

Εικόνα 12: Εισαγωγή νέου ιδιοκτήτη

(36)

Εικόνα 13: Μεταβολή ιδιοκτήτη

Εικόνα 14: Αναζήτηση ιδιοκτήτη

(37)

Εικόνα 15: Διαγραφή ιδιοκτήτη

Εικόνα 16: Καταχώρηση νέου οδηγού

(38)

Εικόνα 17: Μεταβολή οδηγού

Εικόνα 18: Αναζήτηση οδηγού

(39)

Εικόνα 19: Διαγραφή καταχώρησης οδηγού

Εικόνα 20: Καταχώρηση νέας κίνηση φορτωτικής

(40)

Εικόνα 21: Μεταβολή κίνησης φορτωτικής

Εικόνα 22: Αναζήτηση κίνησης φορτωτικής

(41)

Εικόνα 23: Διαγραφή κίνησης φορτωτικής

Εικόνα 24: Οργάνωση εφαρμογής ΦΠΑ

(42)

Εικόνα 25: Οργάνωση εφαρμογής ΠΙΝΑΚΑΣ ΤΥΠΟΥ ΜΕΤΑΦΟΡΩΝ

Εικόνα 26: Οργάνωση εφαρμογής ΠΕΡΙΟΧΕΣ ΚΑΛΗΨΗΣ ΜΕΤΑΦΟΡΙΚΗΣ

(43)

Εικόνα 27: Οργάνωση εφαρμογής ΣΤΟΙΧΕΙΑ ΕΤΑΙΕΙΑΣ

Εικόνα 28: Εκτυπώσεις - Σχεδιαζόμενες εκτυπώσεις

(44)

Εικόνα 29: Εκτυπώσεις - ΕΚΑΘΑΡΗΣΗ ΑΝΑ ΠΕΛΑΤΗ

Εικόνα 30: Εκτυπώσεις - ΕΚΑΘΑΡΗΣΗ ΑΝΑ ΑΥΤΟΚΙΝΗΤΟ

(45)

ΣΥΜΠΕΡΑΣΜΑΤΑ – ΔΥΣΚΟΛΙΕΣ

Η εμπειρία μας με τους υπαλλήλους της εταιρείας ήταν εποικοδομητική, ενώ η αλληλεπίδραση μεταξύ μας έπαιξε σημαντικό ρόλο στην διεκπεραίωση της εργασίας.

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

Με την Εφαρμογή την οποία δημιουργήσαμε καταφέραμε κάτι πολύ σημαντικό για την επιχείρηση, ήτοι να μειώσουμε τον χρόνο ο οποίος ήταν απαραίτητος-πολύτιμος για τη διεκπεραίωση της εργασίας κάνοντας την πιο εύκολη. Αυτό το πετύχαμε με την δυνατότητα της εφαρμογής μας όπου μπορούν να εκτυπώνουν τις καταχωρήσεις τους και να τα κρατάνε στο αρχείο τους

(46)

ΒΙΒΛΙΟΓΡΑΦΙΑ

1. http://dide.flo.sch.gr/Plinet/Tutorials/Tutorials-ADO.html 2. http://www.w3schools.com/ado/ado_connect.asp

3. http://msdn.microsoft.com/en-us/library/h43ks021.aspx

4. Συστήματα διαχείρισης βάσεων δεδομένων, Raghu Ramakrinshan and Johannes Gehrke, Tόμος Α,Εκδόσεις Τζιόλα.

5. http://support.microsoft.com/kb/189680

6. http://anamorfosi.teicm.gr/ekp_yliko/e-notes/Data/database/main.htm 7. http://support.microsoft.com/kb/189680

Referências

Documentos relacionados

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