Κλάση clsDataManager Ver 1.2 

Μία πολύτιμη κλάση για την πρόσβαση και διαχείριση των εγγραφών μίας Access database. Παρέχει, δηλαδή, τις ιδιότητες και μεθόδους για το άνοιγμα ενός Recordset , την εισαγωγή, διόρθωση, διαγραφή εγγραφών, την εκτέλεση ερωτημάτων ενημέρωσης και διαγραφής (update/delete queries) κ.α. Δημιουργεί, αυτομάτως, όλα τα απαραίτητα ADO.NET αντικείμενα (Connection, DataAdapter, CommandBuilder, DataSet, DataView κλπ).

 

Η λειτουργικότητά της είναι παρόμοια με αυτή του ADO NET Data Control. Το τελευταίο είναι πιο σύνθετο και κατάλληλο για data-binding των controls μίας φόρμας. Ενώ, η κλάση μπορεί να χρησιμοποιηθεί απευθείας στον κώδικα.

 

Χρήστος Μουρατίδης,  Μάρτιος 2006

 

Τι νέο υπάρχει στην έκδοση 1.1

Διορθώσεις στην έκδοση 1.2

 

Αποσυμπιέσετε με ένα πρόγραμμα συμπίεσης πχ. WinZip τα περιεχόμενα του αρχείου clsDataManager.zip σε κάποιο φάκελο στο δίσκο. Θα δείτε να δημιουργούνται δύο φάκελοι : Ένας με όνομα  clsDataManager που περιέχει τον κώδικα της κλάσης (και το solution αρχείο), κι ένας με όνομα clsDataManager Test ο οποίος περιέχει ένα project δείγματος χρήσης της κλάσης.

Επίσης, περιλαμβάνει και το παρόν readme αρχείο.

Λίγα λόγια για την κλάση clsDataManager

Η κλάση αυτή δημιουργεί αυτόματα όλα εκείνα τα απαραίτητα ADO.NET αντικείμενα που θα χρειαζόταν να ένας προγραμματιστής στον κώδικά του για την πρόσβαση και διαχείριση μίας ΒΔ.  To βασικό εσωτερικό αντικείμενο που χρησιμοποιεί είναι ένα DataView.

 

Παράδειγμα : Άνοιγμα του πίνακα ΜΑΘΗΤΕΣ της Access database με όνομα ΜΑΘΗΤΕΣ.mdb  με την μέθοδο Open :

 

Dim strConn$ = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=ΜΑΘΗΤΕΣ.MDB" 

Dim DatMaqhtes As New clsDataManager.clsDataManager()

 

DatMaqhtes.Open(strConn, "Select * from ΜΑΘΗΤΕΣ order by ΕΠΩΝΥΜΟ,ΟΝΟΜΑ", CommandType.Text)

 

Mετά την μέθοδο Open έχουν δημιουργηθεί όλα τα απαραίτητα αντικείμενα μεταξύ των οποίων και το objDataView.

 

Παράδειγμα : Τυπώνοντας τα πεδία ID, ΕΠΩΝΥΜΟ, ΟΝΟΜΑ και ΕΤΟΣ_ΓΕΝΝΗΣΗΣ όλων των εγγραφών του objDataView :

 

Dim strListLines$ =””

Dim nbrRows% = DatMaqhtes.RsCount

With DatMaqhtes.objDataView

            For i = 0 To nbrRows - 1

                strListLines += .Item(i)("ID") & " " & .Item(i)("ΕΠΩΝΥΜΟ") & " " & .Item(i)("ΟΝΟΜΑ") & " " & .Item(i)("ΕΤΟΣ_ΓΕΝΝΗΣΗΣ")

            Next

        End With

Msgbox(strListLines)

 

Παράδειγμα : Εισάγει μία νέα εγγραφή στο objDataView :

 

  Dim newID% = DatMaqhtes.RsGetMaxValue("ID") + 1

 

                'Βάλε τη νέα γραμμη (τη βάζει στο objDataView).

                Dim r As DataRowView = DatMaqhtes.RsAddNewRow

 

                'Συμπλήρωσε τα πεδία της νέας γραμμής.

                r("ID") = newID :  r("ΕΠΩΝΥΜΟ") = “ΣΤΑΜΑΤΙΟΥ” : r("ΟΝΟΜΑ") = “ΘΕΟΔΩΡΑ” : r("ΕΤΟΣ_ΓΕΝΝΗΣΗΣ") = 1980

                r.EndEdit()

 

                'αποθήκευση στη Βάση.

                DatMaqhtes.RsUpdate()

 

Η μέθοδος RsGetMaxValue("fieldname") δέχεται το όνομα ενός πεδίου (αριθμητικό) και επιστρέφει τη μέγιστη τιμή τύπου Long (χρήσιμο για manual primary keys). Η μέθοδος RsAddNewRow επιστρέφει μία νέα κενή γραμμή, τύπου DataRowView. H μέθοδος RsUpdate ενημερώνει τις αλλαγές στη Βάση.

 

Παράδειγμα : Εύρεση μίας εγγραφής στο objDataView. Επιστρέφει το index της γραμμής που βρέθηκε :

 

DatMaqhtes.MatchCaseForString = False

       DatMaqhtes.FindTypeForString = FindTypeForStringEnum.StartsWith

       Dim pos% = DatMaqhtes.RsFind(“ΕΠΩΝΥΜΟ”, “ΣΤΑΜ”, “ΟΝΟΜΑ”,”ΘΕΟΔΩΡΑ”)

 

Θα βρει την πρώτη εγγραφή που το επώνυμο ξεκινάει με ΣΤΑΜ και το όνομα ξεκινάει με ΘΕΟΔΩΡΑ.

 

Παράδειγμα : Φιλτράρισμα  εγγραφών στο objDataView.

 

DatMaqhtes.RsFilter("ΕΤΟΣ_ΓΕΝΝΗΣΗΣ>=1990")

 

DatMaqhtes.RsFilter("")  ‘απενεργοποίηση φίτρου.

 

Παράδειγμα : Εύρεση διπλών τιμών ενός πεδίου (duplicates).  Π.χ. έλεγχο διπλών επωνύμων :

 

            Dim DoubleEpwnyma() As Object

       DoubleEpwnyma = DatMaqhtes.RsFindDuplicates("ΕΠΩΝΥΜΟ")

 

Ο πίνακας DoubleEpwnyma θα περιλαμβάνει τα επώνυμα που βρέθηκαν δύο ή περισσότερες φορές στο recordset. (π.χ. αν βρέθηκαν δύο ή παραπάνω φορές τα “ΔΙΑΜΑΝΤΗΣ” και “ΙΩΑΝΝΟΥ” στον πίνακα, τότε θα βρίσκονται στις θέσεις DoubleEpwnyma(0) και DoubleEpwnyma(1), αντίστοιχα)

 

Παράδειγμα : Στατιστική πληροφόρηση.

 

     'Στατιστική πληροφορία με τη μέθοδο ExecuteScalar. Εδώ επιστρέφει το πλήθος των μαθητών.

      Dim plithos% = CInt(DatMaqhtes.ExecuteScalar("Select Count(*) from  ΜΑΘΗΤΕΣ"))

 

Παράδειγμα : Ερώτημα ενημέρωσης

 

    Eρώτημα Ενημέρωσης (UPDATE - DELETE SQL statements)

    Dim strUpdateSQL$ = "Update ΜΑΘΗΤΕΣ set ΕΤΟΣ_ΓΕΝΝΗΣΗΣ=1970  where ΕΤΟΣ_ΓΕΝΝΗΣΗΣ=1990"

    DatMaqhtes.ExecuteCommand(strUpdateSQL)

    DatMaqhtes.RsRefresh()

           

Η μέθοδος ExecuteCommand εκτελεί το ερώτημα απ’ευθείας στη Βάση. Για να ανανεωθούν τα αντικείμενα DataSet και DataView με τις τυχόν αλλαγές καλούμε τη μέθοδο RsRefresh

 

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

 

Η κλάση παρέχει πρόσβαση σε πίνακες/queries σε Access Database κάνοντας χρήση του OLEDB Provider και της μηχανής Jet 4.0 (Για Access 2000, 2002, 2003).

 

Παρακάτω παρουσιάζονται οι ιδιότητες, μέθοδοι και τα γεγονότα της κλάσης.

Ιδιότητες                                 

1)       AllowAdd          : Επιτρέπει ή όχι την εισαγωγή νέων εγγραφών

2)       AllowEdit         : Επιτρέπει ή όχι την τροποποίηση των εγγραφών

3)       AllowDelete       : Επιτρέπει ή όχι την εισαγωγή νέων εγγραφών

4)       SortText          : Το αλφαριθμητικό Sort, όπως έχει τεθεί στη μέθοδο RsSort (readOnly)

5)       FilterText        : Το αλφαριθμητικό Filter, όπως έχει τεθεί στη μέθοδο RsFilter (readΟnly)

6)       FindTypeForString    : Για string πεδία. Ο τύπος αναζήτησης, τύπου FindTypeForStringEnum, που θα χρησιμοποιηθεί στη μέθοδο RsFind.

7)     MatchCaseForString   : Για string πεδία. Αν θα κάνει ταίριασμα κεφαλαίων/πεζών στην αναζήτηση με τη μέθοδο (RsFind)  

8)       ConnectionString     : Επιστρέφει το ConnectionString, όπως έχει καθοριστεί κατά τη μέθοδο Open. (read-only)

9)       HasChanges           : Επιστρέφει True αν έχουν γίνει αλλαγές στο Dataset μετά την τελευταία ενημέρωση της BΔ. (read-only)

Μέθοδοι

1)    Open            : Ανοίγει ένα RecordSet (DataView) από τη ΒΔ (πίνακα ή query). Δέχεται ένα ConnectionString και

την SQL πρόταση επιλογής εγγραφών ή το όνομα ενός πίνακα/query (Εσωτερικά, δημιουργεί τα σχετικά ADO.NET αντικείμενα).

2)    Close           : Κλείνει το RecodSet και τη σύνδεση.

3)    RsRefresh       : Ξαναφέρνει τις εγγραφές από τη ΒΔ (κι επαναδημιουργεί το RecordSet και τα σχετικά ADO.NET

   αντικείμενα.  

4)    RsEmpty         : Ελέγχει αν το Recordset είναι άδειο.

5)    RsCount         : Επιστρέφει το πλήθος των εγγραφών του Recordset.     

6)    RsFind          : Αναζητά μία εγγραφή στο Recordset με βάση μία ή περισσότερες τιμές κριτηρίων. 

7)    RsSort          : Ταξινομεί το Recordset με βάση ένα ή περισσότερα πεδία.

8)    RsFilter        : Φιλτράρει τις εγγραφές του Recordset σύμφωνα με ένα αλφαριθμητικό φιλτραρίσματος (π.χ.

ΠΟΛΗ=’ΑΘΗΝΑ’”).

9)    RsFindDuplicates: Βρίσκει τις διπλές καταχωρημένες τιμές ενός πεδίου (π.χ. διπλοί κωδικοί). (νέο στην έκδοση 1.1)

10)RsAddNewRow     : Προσθέτει μία νέα εγγραφή. Επιστρέφει ένα αντικείμενο DataRowView.

11)RsGetRow           : Επιστρέφει μία εγγραφή – γραμμή του objDataView με βάση το index της γραμμής. Χρήσιμο για edit.

12)RsDelete        : Διαγράφει την εγγραφή – γραμμή του objDataView με βάση το index της γραμμής.

13)RsUpdate        : Ενημερώνει άμεσα στη ΒΔ την εγγραφή /εγγραφές (DataSet à Βάση). 

14)RsCancelUpdate  : Ακυρώνει την εισαγωγή/ διόρθωση / διαγραφή της εγγραφής /εγγραφών.

15)ExecuteCommand  :  Εκτελεί ένα ερώτημα ενημέρωσης / διαγραφής (Update / Delete SQL statement). Μπορεί να χρησιμοποιείται η

    τρέχουσα σύνδεση ή μία άλλη.

16)ExecuteScalar   : Επιστρέφει μία τιμή που είναι αποτέλεσμα ενός στατιστικού ερωτήματος επιλογής (Aggregate SQL statement).

Π.χ. “Select Count(*) from ΜΑΘΗΤΕΣ”  θα επιστρέψει το πλήθος των μαθητών. Μπορεί να χρησιμοποιείται η  

τρέχουσα σύνδεση ή μία άλλη.

17)ExecuteReader    : Επιστρέφει ένα αντικείμενο DataReader με βάση ένα Select SQL statement. Χρησιμοποιείται η τρέχουσα σύνδεση ή

    μία άλλη.

Γεγονότα

 

1)    OnDataError()     : Ενεργοποιείται όταν συμβεί κάποιο σφάλμα δεδομένων. Η παράμετρος ErrorMsg περιέχει το μήνημα

λάθους.

 

Public Αντικείμενα

 

2)    objConnection  : Το αντικείμενο OleDbConnection για τη σύνδεση με τη ΒΔ.

3)    objDataAdapter : Το αντικείμενο OleDbDataAdapter για την επικοινωνία DataSet και ΒΔ.

4)    objCommBuilder : Το αντικείμενο OleDbCommandBuilder για την αυτόματη δημιουργία των INSERT,UPDATE,DELETE εντολών

                     του DataAdapter.

5)    objDataSet     : Το αντικείμενο DataSet.

6)    objDataView    : Το αντικείμενο DataView, το οποίο περιέχει τις εγγραφές του RecordSet.

7)     Απαρίθμηση FindTypeForStringEnum για καθορισμό του τύπου Αναζήτησης (Find) για string πεδία. Περιλαμβάνει τα:

       Equal       : Για να βρούμε αν η τιμή του πεδίου ισούται με τη συγκεκριμένη τιμή αναζήτησης.

StartsWith  : Για να βρούμε αν η τιμή του πεδίου ξεκινάει με τη συγκεκριμένη τιμή αναζήτησης.

EndsWith    : Για να βρούμε αν η τιμή του πεδίου τελειώνει με τη συγκεκριμένη τιμή αναζήτησης.

Contains    : Για να βρούμε αν η τιμή του πεδίου περιέχει τη συγκεκριμένη τιμή αναζήτησης. 

Παρατηρήσεις

Χρησιμοποιήστε ελεύθερα την κλάση στις εφαρμογές σας. Ο κώδικας είναι ανοικτός. Μπορείτε να κάνετε τις βελτιώσεις που θέλετε. Θα ήμουν ευγνώμων να με ενημερώσετε για τυχόν βελτιώσεις.

Το assembly αρχείο clsDataManager.dll θα το βρείτε στο φάκελο bin.

 

ΠΡΟΒΛΗΜΑ ΜΕ ΤΟ PROJECT ΔΕΙΓΜΑΤΟΣ ΧΡΗΣΗΣ - ΛΥΣΗ.

 

Αν στα References του project δείγματος χρήσης εμφανίζει με κίτρινο θαυμαστικό την κλάση τότε πρέπει να ενημερώσετε τα Reference Path του project ώστε να ψάχνει στο φάκελο που έχετε βάλει το dll της κλάσης.

 

1) Στο Solution Explorer κάντε δεξί κλικ στο prοject και επιλέξτε Properties.

2) Στο παράθυρο ιδιοτήτων του project που ανοίγει, πηγαίνετε στο τμήμα Common Properties και Reference Path.

3) Δεξιά, πατήστε το browse button (...) για να βρείτε το Folder όπου βρίσκεται το καθένα assembly dll  στον δικό σας υπολογιστή.

4) Πατήστε το button Update. Σώστε το project, κλείστε το και ξανανοίξτε το. Τώρα, πρέπει να εμφανίζονται όλα κανονικά.  

 

Επικοινωνία

Για οποιεσδήποτε παρατηρήσεις στείλτε e-mail στην παρακάτω διεύθυνση.

 

mouratx@yahoo.com

 

 

Τι νέο υπάρχει στην έκδοση 1.1

 

Νέα μέθοδος :

 

  1. RsFindDuplicates :  Βρίσκει τις διπλές καταχωρημένες τιμές ενός πεδίου στο recordset. Η μέθοδος δέχεται το όνομα του πεδίου και

επιστρέφει έναν πίνακα, τύπου Object, που περιλαμβάνει τις διπλές τιμές που βρέθηκαν. Χρήσιμο για έλεγχο μοναδικότητας (πχ. κλειδιού) ή για κάθε περίπτωση που επιθυμούμε πληροφόρηση διπλών τιμών σε κάποιο πεδίο. Φυσικά, αν σε μία εγγραφή δεν υπάρχει καταχωρημένη τιμή (DbNull.Value) αγνοείται.

                           Δείτε τον κώδικα της υποδειγματικής εφαρμογής για τη χρήση της.

 

Διορθώσεις στην έκδοση 1.2

 

Διορθώθηκε ένα bug που υπήρχε στην μέθοδο RsFind.