• Nenhum resultado encontrado

A Gas Fire

2. QUERIES

Η ομάδα κουμπιών ‘Queries’ περιέχει εντολές οι οποίες εκτελούν ένα ερώτημα στην βάση δεδομένων έπειτα από αίτηση του χρήστη. Οι εντολές είναι:

a. Ταξινόμηση Κατά Διεύθυνση b. Εμφάνιση Πεδίων

a. Ότα\’ εκτελεστεί η ‘Ταξινόμηση Κατά Διεύθυνση’ το πρόγραμμα εκτελεί μια κρυφή ενέργεια, κατά τΐ)ν οποία αναγκάζει στην επόμενη προβολή των στοιχείων τα στοιχεία να εμφανιστούν ταξινομημένα ως προς την διεύθυνση τους, με σειρά προτεραιότητας, την οδό, την περιοχή και τον αριθμό. Στο τέλος θα εμφανιστεί το μήνυμα που ενημερώνει ότι η διαδικασία ολοκληρώθηκε.

= 2 2

b. Κατά την ε,αέλεση της εντολής Εμφάνιση Πεδίων’, το Gas Fire εκτελεί ένα ερώτημα στην βάση δεδομένων το οποίο επιστρέφει όλες τις εγγραφές του ενεργού πίνακα, στον οποίον γίνεται το ερώτημα, και εμφανάζονται στην προβολή δεδομένων.

3. ΕΥΡΕΣΗ E r r P A 0 Q S

Αυτή η ομάδα κουμπιών εκτείχί εντολές κατά τις οποίες αναζητείται κάποια πμή σε κάποιο συγκεκριμέΐ'ο πεδίο. Όταν ολοκληρωθεί η αναζήτηση, το πρόγραμμα θα προβά>^χι της εγγραφές που ταιριάζουν με αυτή που δόθηκε για αναζήτηση.

Υπάρχου\· τέσσερα πεδία στα οποία υπάρχει η δυνατότητα αναζήτησης πατώντας το αντίστοιχο κουμπί. Είναι:

a. Κωδικός Έργου (Α/Α) b. Οδός & Αριθμός C. Connection Point

d. Serial Number (S/N), μόνο για τον πίνακα Meters

bv Κωδικό (Α/Α) Προς Εύρεση

a. Κατά την αναζήτηση του πεδίου ‘Κωδικός Έργου’ εμφανίζετε μια φόρμα διαλόγου, όπου ζητείτε ο κωδικός τον οποίο ψάχνει ο χρήστης. Πατώντας το κουμπί ΟΚ εμφανίζεται, αν υπάρχει, η εγγραφή

που ψάχνεται. Κατά την αναζήτηση η μηχανή αναζήτησης ταιριάζει την σειρά χαρακτήρων που αναζητείται, και με

όσες εγγραφές περιέχουν την σειρά αυτή. Έτσι θα εμφανιστούν όλες οι εγγραφές που ξεκινούν με τιιν σειρά χαρακτήριον που αναζητείται. Για παράδειγμα αν αναζητείται την σειρά χαρακτήρων J0125, θα εμφανιστούν οι εγγραφές J01251, J01255, J01257 κ.λ.π.

b. Αντίστοιχα δουλεύει και η αναζήτηση του κουμπιού ‘Οδός & Αριθμός’. Η διαφορά είναι ότι αναζητά πρώτα πς οδούς που ταιριάζουν, και μετά τον αριθμό.

Όταν ενεργοποιηθεί, θα εμφανιστεί μια φόρμα διαλόγου, (αντίστοιχη με την αναζήτηση κατά Κωδικό Έργου), όπου θα ζητηθεί η οδός προς εύρεση. Στην συνέχεια θα εμφανιστεί μια νέα φόρμα η οποία θα ζητά τιμή για τον αριθμό. Αν μείνει κενή θα εμφανίσει όλες τις εγγραφές που περιέχουν την διεύθυνση αναζήτησης με όλους τους αριθμούς που υπάρχουν. Αν γραφτεί κάποιος αριθμός θα εμφανίσει

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

Πρέττει να επισημανθεί, ότι η αναζήτηση της οδού γίνεται δυναμικά. Αυτό σημαίνει κατά την αναζήτηση μιας σειράς χαρακτήρων, θα εμφανιστούν όλες οι εγγραφές που στο πεδίο Όδός’ περιέχουν αυτό τον ορμαθό χαρακτήρων. Για τιαράδειγμα. αν αναζητηθεί η σειρά «ΑΡΗ», θα εμφανιστούν οι εγγραφές με οδό ΜΠΟΤΣΑΡΗ, ΚΑΝΑΡΗ και ΒΟΥΑΓΑΡΗ.

C. d. Τα κουμπιά ‘Connection Point’ και ‘Serial Number’ εκτελούν αναζήτηση στα ομότιτλοι πεδία και λειτουργούν ακριβώς όπως το κουμπί ‘ΚωδικόςΈργου’.

4. ΛΕΙΤΟΥΡΓΙΚΑ ΚΟΥΜΠΙΑ

Τα κουμπιά αυτά εκτελούν εργασίες οι οποίες κάνουν πιο λειτουργικό το πρόγραμμα, επιτρέποττας το να λειτουργήσει ομαλότερα. Έχουν να κάνουν με τον τερματισμό του προγράμματος και με την φόρτωση της φόρμας των ρυθμίσεων. Αυτά είναι τα κουμπιά

• Ρυθμίσεις

• Έξοδος

a. Το κουμπί ‘Ρυθμίσεις’ φορτώνει το μενού κατά το οποίο μπορεί ο χρήστης να κάνει τις ετημέρους ρυθμίσεις του προγράμματος.

b. Το κουμπί Έξοδος’ τερματίζει το πρόγραμμα, σβήνοντας τυχών προσωρινά αρχεία που έχουν μείνει ανοιχτά.

Tunuu ΰιουη/ονι,Η lT'j/ιακή En-/amn

ΠΡΟΒΟΛΗ ΔΕΔΟΜΕΝΩΝ

Η φόρμα αυτή κα>χίται από κάποια ενέργεια που συμβαίνει στο κεντρικό μενού, σιχγκεκριμέι α όταν ζητείται να εμφανιστούν εγγραφές. Οι διαδικασίες που την κα?αιύν είναι, η εμφάνιση πεδίων, ο έ>χγχος διπλοεγγραφών και η αναζήτηση κάποιου στοιχείου.

Η φόρμα περιέχει ένα πλέγμα από δεδομένα (Datagrid) που αποτελείτε από 12 η 14 στήλες, ανάλογα με ποιον πίνακα δουλεύει ο χρήστης.

Εκεί εμφανίζονται τα όποια δεδομένα έχουν ζητήθεί. Σε αυτά δεν γίνεται απευθείας καμιά αλλαγή. Οποιαδήποτε τροποποίηση γίνεται όταν ενεργοποιηθεί κάποιο από τα κουμπιά-εντολές της φόρμας. Αυτά είναι τα:

a. Νέα Εγγραφή b. Τροποποίησί]

C. Διαγραφή d. Επιστροφή

Σημειώνεται ότι το κουμπί ‘Νέα Εγγραφή’ εμφανίζεται μόνο αν γίνει κλήση από την εντολή ‘εμφάνιση πεδίων', ενώ το κουμπί ‘Τροποποίηση’ δεν εμφανίζεται αν γίνει κλήση από την εντολή ·Έλεγχος Διπλοεγγραφών’. Οι άλλες δύο εντολές υπάρχουν σε κάθε περίπτωση. Παρακάτω αναλύεται η λειτουργία κάθε εντολής.

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

a. Νέα Εγγραφή

Η διαδικασία αυτή, επιτρέπει να γίνει εισαγωγή μίας μεμονωμένης εγγραφής Κατά την διαδικασία αυτή, στο πλέγμα Δώσε Τιμή Γιο Τον ΓΙεβίο Α/Α 1 1

Cancai |

ί

Tunua Biounyr

δεδομένων ,po|i0)Jx,a, η ,ε)εο,„ί„ ^ φ ά , ε μ φ < ^ „α , ένα ελαίο,ο διαλόγου, OJIOU ζητείται να πληκιρολογηβεί μια πμή για την στήλη «ου αναφέρει. Διαδοχικό, μετά την εισαγοητή της τιμής, ζητείται η ίδια διαδικασία και για τα υπόλοιπα πεδία.

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

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

b. Τροποποίηση

Η ενεργοποίηση του κουμπιού ‘Τροποποίηση’, επιτρέπει την μεταβολή της τιμής ενός κελιού, οποιοσδήποτε

εγγραφής στο π>,έγμα. Πατώντας το κουμπί θα εμφανιστεί ένα πλαίσιο διαλόγου εισαγωγής δεδομένων, το

οποίο θα έχει προεπιλεγμένη την τιμή, του κελιού το οποίο είναι επιλεγμένο. Ο χρήστης μπορεί να μεταβάλει αυτή την τιμή, η οποία θα τοποθετηθεί στο κελί.

Ολοκληριίη'οντας η εντολή θα εμφανίσει το αλλαγμένο κελί.

C. Διαγραφή

Η εντολή αυτή, επιτρέπει να διαγράψεί μια εγγραφή που έχει επιλέγει από την βάση δεδομένωι’. Η διαγραφή γίνεται μετά από αίτηση του χρήστη. Κάθε φορά γίνεται επιβεβαίιοση. για το αν ο χρήστης θέλει να προχωρήσει στην διαγραφή, έτσι ώστε να αποφευχθεί τυχαία ενεργοποίηση της εντολής. Με αυτό τον τρόπο εξασφαλίζεται, εν μέρει την ασφάλεια των εγγραφών.

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

etXcTt No Δογράψεπ Την Σαρά;

πατηθεί το κουμπί ‘NO’ τότε θα ακυρωθεί η διαδικασία. Αν επιλεγεί το YES τότε το πρόγραμμα θα αναζητήσει την εγγραφή στην βάση δεδομένων και θα την διαγράψει. Στην συνέχεια θα ανανεώσει το πλέγμα δεδομένων και θα αφαιρεθεί η διαγραμμένη εγγραφή, εμφανίζοντας το μήνυμα «Η διαγραφή έγινε».

Σε 7ΐερίπτο)ση που δεν εμφανιστεί αυτό το μήνυμα, είναι πιθανό η διαγραφή να αποτύχει. Το πρόγραμμα ξεχωρίζει μια εγγραφή από τα πεδία TD’ και ‘Α/Α’. Αν κάποιο από τα δύο είναι κενό, τότε η διαγραφή του δεν θα ολοκ>,ηρωθεί.

d. Επιστροφή

Το κουμπί αυτό κλείνα την φόρμα ‘Προβολή Δεδομένων’ και ετηστρέφει το πρόγραμμα στο κεντρικό μενού. Παράλληλα, διαγράφει όλους τους προσωρινούς πίνακες που έχει δημιουργήσει το Gas Fire για να εμφανίσει τα δεδομένα.

Αναφέρεται ότι και το κουμπί εξόδου του παραθύρου Μ κάνει σχεδόν την ίδια δου>χιά με το κουμπί επιστροφή. Προτείνεται όμως να χρησιμοποιείται το κουμπί Επιστροφή'.

ImuuJJmiriYaviKnc Π,ηοοω,,ηι, ,γ^

Διαδρομή Αρχείου

ΡΥΘΜΙΣΕΙΣ

Η φόρμα αυτή, περιέχει όλες ης επιλογές που μπορούν να

«ραμετροποιηθουν. Στην συγκεκριμένη έκδοι^ του Gas Fire, μπορεί να αλλαχθεί μόνο η διαδρομή του αρχείου, της

βάσης δεδομένων που

χρησιμοποιεί το πρόγραμμα.

Επιπρόσθετα υπάρχουν εντολές που φορτώνουν την βοήθεια για το

|e:\AYanr»ieva\Wofk\JlTuxiani\AE Π.Α\Δ.Ε.ΠΑ.ηι*

|r~Brw^ I

— 1

I Help I About [

OK

αρχείο, καθώς και τις πληροφορίες του προγράμματος.

Η φόρμα αποτελείται από ένα πλαίσιο κειμένου, το οποίο εμφανίζει την διαδρομή, την βάσης δεδομένων που είναι φορτωμένη. Οποιαδήποτε αλλαγή στο πλαίσιο δεν θα επηρεάσει καθόλου το πρόγραμμα. Υπάρχουν πέντε κουμπιά τα οποία είνα ι;

a. Browse b. OK c. Cancel d. Help e. About

Oi εντολές αυτές, κάνουν ότι λέει η περιγραφή τους.

a. Η εντολή Browse ανοίγει την φόρμα Επιλογή Αρχείου’ όπου μπορεί να καθορίστε! το αρχείο της βάσης δεδομένων που φορτώνει το πρόγραμμα.

b. Η εντολή ΟΚ κλείνει την φόρμα και ενημερώνει το Gas Fire για την βάση δεδομένων.

C. Η εντολή Cancel επιστρέφει το πρόγραμμα στο κεντρικό μενού χωρίς να προχωρήσει σε καμία ενέργεια.

d. Η εντολή Help φορτώνει το αρχείο βοήθειας του Gas Fire

e. Η εντολή About φορτώνει την φόρμα ‘About GasFire’, η οποία περιέχει πληροφορίες για το πρόγραμμα.

TLuhiLklUo m m yiKii^ H'-'l

ΕΠΙΛΟΓ Η ΑΡΧΕΙΟΥ

Η φόρμα αυτή εμφανίζεται όποτε ζητείται από το πρόγραμμα να φορτώσει :αποιο αρχείο βάσης δεδομένοιν. ΓΙρακιικά μετά την πρώτη εκτέλεση του Gas Fire, όπου θα φορτωθεί η ρυθμισμένη βάση δεδομένων, δεν θα χρειαστεί να ξανακαθοριστεί η διαδρομή, εκτός από εξαιρέσεις. Μία είναι αν για κάποιο λόγο χαθεί το αρχείο στο οποίο αποθηκεύεται η διαδρομή. Αλλη είναι αν θέλει ο χρήστης να φορτώσει άλλο αρχείο, το οποίο όμως είναι ρυθμισμέ\Ό όπως έχει αναφερθεί. (Βλέπε Ρύθμιση Βάσης Δεδομένων σελ. 69)

Τα στοιχεία που αποτελούν την φόρμα είναι ένα πλαίσιο που εμφανίζει τον οδηγό (Δίσκος, CD-ROM) ο οποίος είναι ενεργός, ένα πλαίσιο που εμφανίζει τους καταλόγους (Directories) μαρκάροντας τον ενεργό και ένα πλαίσιο το οποίο εμφανίζει τα αρχεία του υπάρχουν μέσα στον επιλεγμένο κατάλογο. Για την ακρίβεια, εμφανίζονται με τα αρχεία που έχουν κατάληξη *.mbd, δηλαδή αρχείου τύπου βάσεων δεδομένων της Microsoft (αρχεία που δημιουργεί η Microsoft Access).

Υπάρχουν και δύο κουμπιά-εντολές τα ;

a. OK

b. Cancel

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

Το κουμπί Cancel αποφορτώνει την ‘Επιλογή Αρχείου’ και επιστρέφει στην φόρμα 'Ρυθμίσεις'.

ABOUT GAS FIRE

Είναι μια φόρμα η οποία προβάλει πληροφορίες για το Gas Fire. Αναφέρει τους συντελεστές της εφαρμογής, για ποίον και πώς έγινε.

Υπάρχουν δύο κουμπιά. Το πρώτο είναι το ΌΚ’ που κλείνει την καρτέλα και επιστρέφει το

πρόγραμμα στην φόρμα ‘Pυθμίσε^^ Το δεύτερο είναι το ‘System Info’ και όπως αναφέρει το όνομα του, εμφανίζει της πληροφορίες του συστήματος (Υπολογιστή).

TROI BLESHOOTING

Το Gas Fire κατά την διάρκεια που εκτελεί της εργασίες που εττιλέγει ο χρήστης, πολλχς φορές δημιουργεί και σβήνει προσωρινούς πίνακες και στήλες. Οι επεμβάσεις αυτές δεν επηρεάζουν την λειτουργία της βάσης, γιατί το πρόγραμμα δεν σβήνει ούτε τροποποιεί, τα δεδομένα των κεντρικών πινάκων.

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

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

Γενικά σε οποιαδήποτε αστάθεια που μπορεί να προκόψει για άγνωστο λόγω, ο χρήστης δεν πρέπει να ανησυχεί για τα δεδομένα του. Σε κάθε επανεκκίνηση το πρόγραμμα θα διορθώσει μόνο του το σφάλμα. Για οποιαδήποτε διαφορετικό πρόβλημα μπορεί να απευθυνθεί στον κατασκευαστή του προγράμματος στο e-mail.

cromometal@otenet.gr

Ένας Πίνακας Έχο Σβηστεί

g ;

ΦΟΡΜΑ MENU VWWWWWWWWWWWWWWWWWWWWWWW \ , ,

\\ΜΠΑΚΙΡΤΖΟΓΛΟΥ ΣΤΑΥΡΟΙ

WniYXIAKH ΕΡΓΑΣΙΑ - ΕΦΑΡΜΟΓΗ ΓΙΑ ΤΗΝ Ε.Δ.Α.

\\Το πρόγραμμα έχει σαν στόχο την ετιεςεργασία δύο αρχείων μορφής βάσεων

\\δεδομένων τύπου Microsoft Database(*.mdb_). To κεντρικό μενού χωρίζεται σε

\\δύο σελίδες ενός TAB control, όπου η κάθε μία εκτελεί εργασίες για κάθε αρχείο.

WH επεξεργασία μπορεί να γίνει για αρχεία που έχουν συγκεκριμένες προδιαγραφές

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\m^^

Ό ι μεταβλητές δη>Λ)νονται καθολικές γιατί χρησιμοποιούνται από όλα τα μενού του προγράμματος. Οι SqlCode.OrderBy χρησιμοποιούνται για να φτιάξουν την SQL εντολή για να ανοιχθούν οι πίνακες, από το DATAGRiD. Η text εμφανίζει το ανάλογο μήνυμα, όταν κάνουμε αναζήτηση. Τέλος Paths είναι η μεταβλητή η οποία κρατάει το directory στο οποίο βρίσκεται το αρχείο που επεξεργαζόμαστε Option Explicit

Public SqlCode As String, OrderBy As String, text As String, Paths As String, ftime As Integer

Ή διαδικασία εκτελείται όταν ενεργοποιηθεί το κουμπί ΈΞΟΔΟΣ" και τερματίζει το πρόγραμμα

Private Sub Exit_Click() End End Sub

Ή διαδικασία εκτε>χίται κατά την εκκίνηση του προγράμματος και όποτε ξαναφορτώι'εται το κεντρικό μενού. Αρχικά ελέγχει αν υπάρχει το αρχείο όπου αποθηκεύουμε την διαδρομή του αρχείου που επεξεργαζόμαστε. Αν όχι φορτώνει το μενού με την διαχείρισιι δίσκου, για να το επιλεξουμε. Αν δεν επιλεγεί αρχείο τερματίζεται το πρόγραμμα. ΙΌ αρχείο που περιέχει τιιν πληροφορία είναι το path.dat και βρίσκεται στο φάκελο του προγράμματος.

Public Sub Form_LoadO ftime = ftime + 1 If(ftim e= l)Then

Load Splash

TiauaBiounYaviKnr

Splash.Show Menu.Hide Call Pause! 1) End If

Dim fso As New FileSystemObject, ts As TextStream App.HelpFile = App.Path & "/E.H.A.HLP"

Έλέγχουμί; αν υπάρχει το αρχείο

If (fso.FileExistsfApp.Path & "\path.dat") = True) Then

‘Αν υπάρχει ανοίγουμε ένα ρεύμα για ανάγνωση και διαβάζουμε την πρώτη γραμμή.

Set ts = fso.OpenTextFile(App.Path & "\path.dat", ForReading) Paths = ts.ReadLine Την αποθηκεύουμε στην μεταβλητή Paths If (fso.FileExists(Paths) = True) Then

Ελέγχουμε αν είναι σωστή η διαδρομή και εμφανίζουμε αντίστοιχο μήχτιμα If (ftime ο 1) Then MsgBox ("Ανοίγετε την Βάση Δεδομένων

" + (Chr(13) & Chr(lO)) + CStr(Paths))

Ά ν η διαδρομή που είχε το αρχείο είναι >χινθασμένη καλούμε το μενού OPTION Else; MsgBox ("Η Διαδρομή Της Βάσης Δεδομένων Έχει Χαθεί." &

(Chr(13) & Chr(lO)) & "Παρακαλώ Επιλέξτε Την Κατάλληλη Διαδρομή") Load Path

Path. Show Me.Enabled = False Me.Hide End If

Else; Άν το αρχείο path.dat δεν βρίσκεται τότε καλούμε το μενού OPTION MsgBox ("Η Διαδρομή Της Βάσης Δεδομένων Έχει Χαθεί." &

(Chr( 13) & Chr( 10)) & "Παρακαλώ Επιλέξτε Την KατάUηλη Διαδρομή") Load Path

Path.Show Me.Enabled = False Me.Hide End If End Sub

Ttm a B i m r m m n m m p m n ^ iw n a K r ,

■H δ«ώ,κ„„,„ εκ,ϋ^άα, „ε „ p t a .„ , „ „

σρήνε, tov προοωρινό ,ίν„κ„ DouWeV^I„es ο.ό βάση δεδομένων Private Sub Form_Unload(Cance) As Integer)

On Error GoTo CheckError

Call CreateDelTableCDoubleValues", "DELETE") Exit Sub

CheckError:

Resume Next Debug.Print ("Error 20") End Sub

Ενεργοποιι;ίται όταν πατήσουμε το κουμπί Έλεγχός Διπλοεγγραφών. Μας ζητά να επιλεξουμε την μέθοδο αναζήτησης, κατά κο)δικό η κατά διεύθυνση και καλεί το μενού DATA εμφανίζο\τας της διπ/.οεγγραφές

Private Sub DeleteDouble_Click()

Dim state As String ’Αποθηκεύεται η κατάσταση από το MsgBox Dim Count As Integer 'Κρατάει τον αριθμό τω\’ διπλότυπων Data.enter = 0

state = MsgBoxt'Tia Αναζήτηση Βάση Κωδικού Πατήστε 'Ναι'." & (Chr(13)

& Chr( 10)) & "Για Αναζήτηση Βάση Διεύθυνσης Πατήστε Όχι'.", 3) 'Ανάλογα με την επιλογή τερματίζεται η διαδικασία ή εκτελείται η αντίστοιχη συνάρτηση

If (state = vbCancel) Then Exit Sub Else

Me.MousePointer = 11

If (state = vbYes) Then Count = CountDoubleCode() 'κατά κωδικό If (state = vbNo) Then Count = ΟουηΐΟουόΙοΑάάτεεεΟ'κατά διεύθυνση Me.MousePointer = 0

MsgBox ("Βρέθηκαν " + CStr(Count) + " διπλοεγγραφές")

If (Count <> 0) Then

Άν υπάρχουν διπλότυπα προχωρούμε στην εμφάνιση τους Load Data

Tunua B iQ u n rm m Π'ηοοψο\Μύ^]ΐτυν,α^ή Fpvn„in

Data.Show Menu.Enabled = False Menu.Hide

Else: Call CreateDelTableC'DoubleValues", "DELETE") AiJ.ioK σβήνουμε τα προσίορινά στοιχεία End If

If (state = vbYes) Then Call AddField("DELETE", "temp") End If

End Sub

'Είναι συμβά\· του κουμτηού "Εισαγωγή Νέων Δεδομένων". Όταν ενεργοποιείται προσθέτει νέες εγγραφές στο αντίστοιχο πίνακα που είναι επιλεγμένος από το TAB.

Private Sub NewData_Click() Dim confirm

confirm = MsgBo.x( "Θέλετε να εισάγεται νέα δεδομένα από τον προσωρινό πίνακα;", vbOKCancel)

If (confirm = vbOK) Then Me.MousePointer = 11

Dim db As Database, rst As Recordset, Count, ID As Long Dim dbl As Database, rstl As Recordset

'Ανοίγουμε δύο ρεύματα από τη\· ίδια βάση δεδομένων όπου καθένα επεξεργάζεται άλλο πίνακα

Set db = OpenDatabase(Paths) Set rst = db.OpenRecordset(STab.Caption) Ό τελικός πίνακας(Μεΐετ8 ή Assets) Set dbl = OpenDatabase(Paths)

Set rstl = dbl.OpenRecordsetC'NewData" + STab.Caption) Ό πίνακας που έχει τα νέα στοιχεία (NewMeters ή NewAssets) If (rst.EOF = False) Then rst.MoveLast

Άν 01 πίνακες δεν είναι κενοί πάνε στην πρώτη εγγραφή If (rstl.EOF = False) Then

rstl.MoveFirst Else: Me.MousePointer = Θ

MsgBo.x ("Δεν υπάρχουν εγγραφές για εισαγωγή")

T m ua B m n r m K n i

Exit Sub End If

Do While Not irstI.EOF) εγγραφοΛ' δεν' έφτασε στο τέ/.ο: cr,

Για όσο ο τήνακας των νέων ι>αψε την νέα εγγραφή στο κύριο πίνακα

ηιιςησε τον μετρητή a προχώρα στην επόμενη vt

+ CStr(Count) + " Εγγραφές") 'Κλείσε τα ρεύματα

ί έγγραφη Call CopyFieldtrstl, rst)

Count = Count + 1 rstl.MoveNext Loop

IdNumber (STab.Caption) Me.MousePointer = 0 MsgBox ("Προστέθηκαν"

rst I.Close rst.Close dbl.Close db.Close End If End Sub

'Ενεργοποιείται όταν πατηθεί το κουμπί ' Ταξινόμηση κατά διεύθυνση" και αλλάζει την καθολική μεταβλητι) OrderBy έτσι ώστε όταν καλέσουμε την εμφάνιση των πεδίων να τα εμφάνιση ταξινομημένα κατά διεύθυνση.

Private Sub OrderAddress_Click()

OrderBy = " ORDER BY [ΟΔΟΣ] ASC,[ΠΕΡΙΟΧΗ] ASC,[ΑΡΙΘΜΟΣ] ASC"

MsgBox ("Τα δεδομένα ταξινομήθηκαν κατά διεύθυνση.") End Sub

'Ενεργοποιείται με το κουμπί Ρυθμίσεις. Κρύβει το τρέχον μενού και εμφανίζει το μενού OPTION.

Private Sub Option_Click() Me.Enabled = False Me.Hide Load Options Options.Show End Sub

Ενερ,οπο,,:,,,.. με ,ο κουμ;Η, Εμ,μ,™, Πεδΐ». Άκ,εμ,„,„„;| μεμ„« ,„, φορτώνει το SHOWDATA

Private Sub Show_Click()

Dim table As TableDef, db As Database

Se. db = OpenDaubass, Palhs) Ανοιγε, i™ ρεό μ„ με η,ν βάση δεδομίν»ν On Error GoTo CheckError ou στιρ ηονέχε, «ροοβέ,ει μκ, οτήλη οτον πίνακα

’η οποία θα κρατά τον αύςων αριθμό της εγγραφής Set table = db.TabJeDefs(STab.Caption)

table.Fields.Append table.CreateFieldfNumber", dbLong) db.Close

STab.Caption + OrderBy

’Αντιστοιχεί τους αύξοντες αριθμούς ' SqlCode = "SELECT * FROM

I ? 'Αλλάζει την εντολή SQL CountRow s (STab.Caption) Load ShowData ShowData.Show Me.Enabled = False Me. Hide Exit Sub

'Σε περίταωση λάθους, που αναμένεται να υπάρχει ήδη η στήλη Number, τότε ενεργοποιείται ο χειριστής σφαλμάτων και σβήνει την στήλη συνεχίζοντας των κώδικα από το ίδιο σημείο

CheckError:

table.Fields. Delete "Number"

Debug.Print ("Error (X)2") Resume

End Sub

H διαδικασία εκτελείται μετά από ενεργοποίηση του συμβάντος αναζήτησης κωδικού έργου. Καθορίζει το SqlCode έτσι ώστε να η SQL εντολή που θα ενεργοποιήσει το DATAGR1D να είναι η κατάλληλη. Αλλάζει το μήνυμα του text έτσι ώστε να εμφανιστεί το ανάλογο μήνυμα της διαδικασία και καλή την ρουτίνα αναζήτησης Private Sub WorkCode_Click()

SqlCode = "SELECT * FROM Preview order by [Number] ASC,[A/A] ASC"

J

Tunua Βιοιιπγίί

text = "Τον Κοιδικό (Α/Α)"

Call SearchMachiner'A/A") End Sub

Ή δίαδιχασίΓί εκτε>χίται μετά από ενεργοποίηση του συμβάντος αναζήτησης του Serial Number. Καθορίζει το SqlCode έτσι ώστε να η SQL εντολή που θα ενεργοποιήσει το DATAGRID να είναι η κατάλληλη. Αλλάζει το μήνυμα του text έτσι ώστε \·α εμφανιστεί το ανόά,ογο μήνυμα της διαδικασία και καλή την ρουτίνα αναζήτησης

Private Sub Serial_Click()

SqlCode = "SELECT * FROM Preview order by [Number] ASC,[S/N] ASC text = "To Serial Number"

Call SearchMachine("S/N") End Sub

Ή διαδικασία εκτεάχίται μετά από ενεργοποίηση του συμβάντος αναζήτησης Connection Point. Καθορίζει το SqlCode έτσι ώστε να η SQL εντολή που θα ενεργοποιήσει το DATAGRID να είναι η κατάλληλη. Αλλάζει το μήνυμα του text έτσι ώστε να εμφανιστεί το ανάλογο μήνυμα της διαδικασία και καλή την ρουτίνα αναζήτησης

Private Sub CPoint_Click()

SqlCode = "SELECT * FROM Preview order by [Number]

ASC,[C0NNECT10N POINT] ASC"

text = "To Connection Point"

Call SearchMachinei "Connection Point") End Sub

Ή διαδικασία εκτελείται όταν >χιτουργήσει το συμβάν αναζήτησης Οδός &

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

Private Sub Address_Click()

_S 2 ShowData.enler - 0 \ Ι.,ταβλητή καθολική του μενού SHOWDATA, η οποία λειτουργεί ως σημαία για το αν ενεργοποιήθηκε κάποια λειτουργία. Ορίζετε ανενεργή στο 0

Call CreateDelTablerPrevieW, "CREATE") 'Δημιουργούμε τον προσωρινό πίνακα Preview

Dim db As Database, rst As Recordset, rstl As Recordset Dim Count As Integer, addrTxt As String, addrNum As String 'Ορίζουμε οις Count τον αριθμό τον εγγραφών που ταιριάζουν στο λήμμα που αναζητούμε. Οι μεταβλητές κρατούν την διεύθυνση και τον αριθμό που αναζητούμε

addrTxt και addrNum.

Set db = OpenDatabase(Paths) Set rst = db.OpenRecord,set(STab.Caption) Set rstl = db.OpenRecordsett"Preview") addrTxt = InputBox("Δώσε Την Διεύθυνση Προς Εύρεση") 'Ζητάμε να δοθούν τιμές για διεύθυνση και addrNum = InputBox("Δώσε Τον Αριθμό Προς Εύρεση") 'αριθμό προς αναζήτηση, και αν δεν είναι το κενό Refresh

Me.MousePointer = 11

If (addrTxt ο "" Or addrNum o "") Then 'συνεχίζουμε μέσα στην IF rst.MoveFirst

Do While Not (rst.EOF)

'για όσο ο πίνακας έχει επόμενες εγγραφές αν κάποια διεύθυνση περιέχει κομμάτι της αναζητούμενης και αν ο αριθμός είναι έγκυρος (ή έστω κομμάτι του)

If (MatchAddress(addrTxt, γ81("ΟΔΟΣ")) And addrNum = Left(rst("API0MOE"). Len(addrNum))) Then

Call CopyField(rst, rstl) 'αντέγραψε την εγγραφή Count = Count + 1 'αύξησε τον μετρητή End If

rst.MoveNext 'επόμενη τιμή Loop

MsgBox ("Βρέθηκαν " + CStr(Count) + " εγγραφές") End If

CountRows ("Preview") 'Βάλε αύξοντα αριθμό στις εγγραφές

,

!

Me.MousePointer = 0

If (Count o 0) Then ·anpypw τ.^ραφές που ταιριάζουν στην περιγραφή SqlCode = SELECT * FROM Preview order by [Number]

ASC,[OAOIj ASC Load ShowData

■ά>^χχςε τον κιΰόικα SQL και ΐΛ.,,γοποίησε το κατάδηλο μενού ShowData.Show

ShowData.CopyRow. Visible = False Me.Enabled = False Me.Hide

αττενεργοποιησε το τρέχον μενού και κί.είσε τα ρεύματα με την βάση rst 1 .Close

rst.Close

'α)^.ΐ(ί)ς κλείσε τα ρεύματα και διέγραψε τον πίνακα rst 1.Close

rst.Close

Call CreateDelTableC'Preview", "DELETE") End If

db.Close End Sub

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

Sub SearchMachine(field As String) ShowData.enter = 0

Call CreateDelTableC'Preview". "CREATE")

Dim db As Databa.se, rst As Recordset, rstl As Recordset, fmdCode As String Dim Count As Integer

Set db = OpenDatabase(Paths) Set rst = db.OpenRecordset(STab.Caption) Set rstl = db.OpenRecordsetC’Preview")

Tui m £ i m m i K n i llΛnpom>ι>ΩL·-Jlxυ■naκr, Pnvnnj^

findCode = InputBoxCAdwe " + text +" Προς Εύρεση") H μεταβλητή text τροποποιεί (iva}joyo το μήνυμα

'και ζητάει την πμή προς αναζήτηση Άν δεν είναι το κενό Refresh

Me.MousePoinler = 11 If (findCode ο "") Then

rst.MoveFirst

Do While Not (rst.EOF) 'αν η περιγραφή ταιριάζει με μέρος της αΐ«ΐζητούμε\Ίμ. αντέγραψε τη\· .‘ /γραφή και αύξησε τον μετρητή

If (findCode = Left(rst(field), Len(findCode))) Then Call CopyField(rst, rstl)

Count = Count + 1 End If

rst.MoveNext Loop

MsgBox ("Βρέθηκαν " + CStr(Count) + " εγγραφές") End If

CountRows ("Preview") 'αρίθμησε της εγγραφές Me.MousePointer = 0

If (Count o 0) Then '.·\ν υπάρχουν εγγραφές που ταιριάζουν στην περιγραφή Load ShowData 'ενεργοποίησε το αντίστοιχο μενού και απενεργοποίησε το παρόν

ShowData.Show

ShowData.CopyRow.Visible = False Me.Enabled = False Me.Hide rstl.Close rst.Close

Else 'Αλλιώς κλείσε όλα τα ρεύματα κ rstl.Close

rst.Close

Call CreateDelTableC'Preview", End If

db.Close End Sub

a διέγραψε τον προσωρινό πίνακα.

, "DELETE")

Tunua BlOUnmviKflc nwvmyr, F^n^in

Ή επόμενη διαδικασία, προσθέτει ή αφαιρεί ένα πίνακα στην βάση δεδομένων, ανάλογα με το όρισμα που θα δώσουμε. Το όνομα του πίνακα ορίζεται από εμάς Sub CreateDelTable(tableName As String, state As String)

Dim newTable As TableDef, db As Database Set db = OpenDatabase(Paths)

On Error GoTo CheckError

If (state = "CREATE") Then Άν 'θέλουμε να γίνει πίνακας, δημιούργησε τ Set newTable = db.CreateTableDef(tableName)

With newTable 'πρόσθεσε τα πεδία

■Fields.Append .CreateField("ID", dbText) .Fields.Append .CreateField("A/A", dbText) .Fields.Append .CreateField("EIAOI", dbText) .Fields.Append ,CreateField("CONNECTION POINT", dbText)

dbText)

.Fields.Append .CreateFieldCITEPIOXH", dbText) .Fields.Append .CreateField("OAOX", dbText) .Fields.Append .CreateField("ΑΡΙΘΜΟΣ", dbText) .Fields.Append .CreateField("KOETOZ", dbText) .Fields.Append .CreateField("EPΓOAABOΣ", dbText) .Fields.Append .CreateField('^YMBAXH", dbText) .Fields.Append .CreateField("TIMOAOriO", dbText) .Fields.Append .CreateField("BQR", dbText) If (STab.Caption = "Meters") Then

'τα παρακάτω πεδία μόνο αν δουλεύουμε με τον Meters .Fields.Append .CreateField("KΩΔIKOΣ ΠΕΛΑΤΗ",

.Fields.Append ,CreateField("S/N", dbText) End If

.Fields.Append .CreateField("Number", dbLong) db.TableDefs.Append newTable 'σύναψε τον πίνακα στΐ)ν βάση δεδομένων End With

Env End If

If (state - DELETE ) Then Άν θέλουμε να διαγραφή db.TableDefs.Delete tableName

End If db.CIose Exit Sub

CheckError: 'Σε περίπτοιση λάθους, ανάλογα με το πού προκλήθηκε το λάθος ενεργοποιούμε τον εξαιρέσεων

If (state = "CREATE") Then

Αν όταν δημιουργείς τον πίνακα, και προϋπάρχει, σβηστό και συνέχισε MsgBox ('Ένα Αρχείο Δεν Είχε Σβηστεί") db.TableDefs.Delete tableName Debug.Print ("Error (X)3") Resume

End If

If (state = "DELETE") Then Ά ν έχει σβηστεί τότε προχώρα στην επόμενη εντολή

MsgBox ('Ένας Πίνακας Έχει Σβηστεί") Debug.Print ("Error 004") Resume Next End If End Sub

Ή διαδικασία αναλαμβάνει να αντιγράψει τα περιεχόμενα των πεδίων ενός πίνακα σε ένα άλλο

Sub CopyField(rst01d As Recordset, rstNew As Recordset) On Error GoTo CheckError

rstNew.AddNew rstNew("ID") = rst01d("ID") rstNew("A/A") = rst01d("A/A") rstNew("EIΔOΣ") = rst01d("EIΔ0Σ")

rstNew("connection point") = rstOId("connection point ) rstNewC'nEPIOXH") = rst01d("nEPI0XH") ΓStNew("OΔOΣ") = rst01d("0Δ0Σ") rstNew( "ΑΡΙΘΜΟΣ") = rstOld("API0MOE")

Tunua BiounvaviKnc Π

rstNevvCKOITOZ") = rstOldi "ΚΟΣΤΟΣ") Γ5ΐΝε\ν("ΕΡΓ0ΛΑΒ0Σ") = Γ5ΐ0ω("ΕΡΓ0ΛΑΒ0Σ") Γ5ΐΝε\νΓΣΥΜΒΑΣΗ") = rst01d( "ΣΥΜΒΑΣΗ") rstN ew CTIM O A O nO ") = rst01d("T IM 0A 0n0") rstNewC’BQR") = rst01d("BQR")

If (STab.Caption = "Meters") Then Av δουλεύουμε στον ττίνακα meters rstNew( "ΚΩΔΙΚΟΣ ΠΕΑΑΤΗ") = rst01d("KΩΔIK0Σ ΠΕΑΑΤΗ") rstNew("S/N") = rst01d("S/N")

End If rstNew.Update

CheckError 'Σε ^ρίπτωση Μθους, ο χειριστής εξαιρέσεων εκτελεί την επόμενη εντολή

Debug.Print ("Error 001") Resume Next End Sub

Ή διαδικασία προσθέτει ένα πεδίο σε κάποιο πίνακα, αντιγράφοντας κάποια στοιχεία στο πεδίο, η διαγράφει κάποιο πεδίο (στήλη)

Sub AddField(state As String, FieldName As String) Dim db As Database, table As TableDef, rst As Recordset Set db = OpenDatabase(Paths)

Set table = db.TableDefs(STab.Caption) On Error GoTo CheckError

If (stater: "APPEND") Then

'Av εττιλέξαμε να συνάψει κάποιο πεδίο τότε εκτελεί την εντολή table.Fields.Append table.CreateField(FieldName, dbText) Set rst = db.OpenRecordsetC'select * from " + STab.Caption) 'ανοίγει ρεύμα με τον πίνακα

If (Not rst.EOF) Then 'και μέχρι να τελειώσει rst.MoveFirst

Do 'αντιγράφει πς τιμές του πεδίου Α/Α, επεξεργασμένες rst.Edit

rst(FieldName) = ClearCode(rst("A/A")) rst.Update

rst.MoveNext

Loop While iNot (rst.EOF)) End If

rst.Close 'κλείνει ρεύμα End If

If (state = "DELETE") Then Άν επιλέξαμε να διαγραφεί μια στήλη table.Fields.Delete FieldName 'εκτελείται η αντίστοιχη εντολ.ή End If

db.Close Exit Sub

CheckError: 'Σε περί;πωση >^θους ενεργοποιείται ο χειριστής εξαιρέσεων If (states APPEND") Then 'Εμφανίζει σε κάθε περίπτωση το αντίστοιχο μήνυμα και

MsgBox ("Η Στήλη Δεν Είχε Διαγραφεί") table.Fields.Delete FieldName Debug.Print ("Error (X)5")

Resume Next 'εκτελεί την επόμενη εντολή End If

If (state = "DELETE") Then

MsgBox ("H Στήλη Έχει Ήδη Σβηστεί") Debug.Print ("Error 006”) Resume Next End If End Sub

Ή συνάρτηση είναι τύπου bool. Όταν ο ορμαθός χαρακτήρων text ταιριάζει με κάποιο κομμάτι του ορμαθού match τότε επιστρέφει true. Αν δεν βρεθεί αντιστοιχία τότε ε^στρέφει false

Function MatchAddress(text As String, match As String) As Boolean Dim txtLength As Integer, mtcLength As Integer, i As Integer, state As Boolean

txtLength = Len(text) 'Αποθηκεύουμε το μήκος των δύο λέξεων mtcLength = Len(match)

If (mtcLength >= txtLength) Then Av το text είναι λιγότερα γράμματα απ' το match τότε με βήμα ένα, πάρε το κομμάτι από το match και σύγκρινε το με το text

Ώ)Ύΐακή Εηνα^φ -

2

For i 1 To mtcLength Άπό το match πάρε μήκος χαρακτήρων ίσο με το συνολικό μήκος χαρακτήροη· του text από το σημείο ί και αν είναι ίδιο. Η συνάρτηση επιστρέφει true και διέκοψε τον βρόγχο

If (Mid(match, i, txtLength) = text) Then MatchAddress = True Exit For Else: MatchAddress = False

End If Σε κάθε άλ>.η περίπτωση επέστρεψε false Next

Else: MatchAddress = False End If

End Function

Ή συνάρτηση καθαρίζει ένα string από χαρακτήρες και μηδενικά που βρίσκονται πριν τον αριθμό, αφήνοντας μόνο το ακέραιο μέρος. Στην περίπτωση αυτή καθαρίζει τον κωδικό από περιττά στοιχεία

Function ClearCode(code As String) As String Dim length As String, i As Integer

length = Len(code) Αποθηκεύουμε το μήκος του ορμαθού του κωδικού και ξεκινώντας αντίστροφα από αυτόν με βήμα 1,ελέγχει αν ο ορμαθός δεν είναι αριθμός.

For i = length To 1 Step -1

If (IsNumeric(Mid(code, i, 1)) = False) Then

Av όχι τότε αφαιρεί το πρώτο γράμμα, μέχρι να μείνει καθαρός αριθμός.

code = Right(code, length - i) 'Τότε διακόπτει τον βρόγχο Exit For

End If Next

length = Len(code) 'Στην συνέχεια παίρνουμε το νέο μήκος του κωδικού For i = 1 To length 'εκτελώντας μια παρόμοια διαδικασία αφαιρούμε τα 0

If (Left(code, 1) = 0) Then 'από την αρχή του κωδικού code = Right(code, length - i)

Else: Exit For End If Next

If (code = ”") Then code = 0

ClearCode - code Ή συνάρτηση ε^στρέφει τους χαρακτήρες π οι οποίοι είναι καθαρός αριθμός

End Function

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

Function CountDoubIeCode() As Integer

Call AddField( "APPEND", "temp") 'Προσθέτουμε μια προσωρινή στήλη και ένα προσωρινό πίνακα

Call CreateDelTableC'DoubleValues", "CREATE")

Dim Compare As String, PrCPoint As String, NxtCPoint As String, Count As Integer, db As Database,rst As Recordset, rstl As Recordset

’Ανοίγουμε δύο ρεύματα με πίνακες της βάσης δεδομένων, ο πρώτος είναι για Set db = OpenDatabase(Paths) 'ανάγνωση και τον ταξινομούμε έτσι ώστε να είναι οι κωδικοί (τα πεδία προς έλεγχο) σε αύξουσα, συνεχόμενη σειρά

Set rst = db.OpenRecordset( "SELECT * FROM " + STab.Caption + " ORDER BY [temp] ASC")

Set rstl = db.OpenRecordsetC'DoubleValues") On Error GoTo CheckError

If (Not rst.EOF) Then Άν δεν είναι κενός ο πίνακας rst.MoveFirst 'παίρνουμε την πρώτη τιμή PrCPoint = rst("temp")

rst.MoveNext

Do While Not (rst.EOF) 'και μετά την επόμενη μέχρι να τελειώσουν τα στοιχεία του πίνακα

NxtCPoint = rstC'temp")

If (PrCPoint = NxtCPoint) Then 'και αν είναι ίδια rst.MovePrevious 'πάμε ένα βήμα πίσω

If (NxtCPoint ο Compare) Then Call CopyField(rst, rst 1) 'για να δούμε αν έχουμε πολλαπλά ίδια στοιχεία και αναγράφουμε στον νέο πίνακα την εγγραφή

End If

If (PrCPoint <> Compare) Then Count = Count + 1

■Αν c(v„, ,ο υ ^ ,ί,ή

^

,

rst.MoveNext 'και αντιγράφουμε και την Call CopyField(rst, rstl) επόμενη εγγραφή Compare = NxtCPoint

'αντιμεταθέτουμε της πμές σπς μεταβλητές End If 'για να ετοιμαστούμε για τον επόμενο έλεγχο rst.MoveNext

PrCPoint = NxtCPoint Loop

συνέχεια ορίζουμε την SQL εντολή SqlCode = "SELECT * FROM Double Values ORDER BY [Number]

ASC,[A/A] ASC"

CountDoubleCode = Count 'επιστρέφουμε των αριθμό των διπλοεγγραφών 'κλείνουμε τα ρεύματα αριθμούμε τις εγγραφές rst 1 .Close ' με αύξουσα σειρά.

db.Close

CountRows ("DoubleValues") Exit Function CheckError:

Resume Next End Function

Function CountDoubleAddress]) As Integer Call CreateDelTableC'DoubleValues", "CREATE")

Dim CmpStreet As String, CmpNumber As String, CmpArea As String Dim PrStreet As String, PrNumber As S^ing, PrArea As String Dim NxtStreet As String, NxtNumber As String, NxtArea As String Dim db As Database, rst As Recordset, rstl As Recordset, Count As Integer Set db = OpenDatabase(Paths)

Set rst = db.OpenRecordsetfSELECT * FROM " + STab.Caption + " ORDER BY [ΟΔΟΣ] ASC,[API0MOI] ASC,[nEPIOXH] ASC")

Set rstl = db.OpenRecordsetC'DoubleValues") On Error GoTo CheckError

If(Notrst.EOF) Then

rst.MoveFirst PrStreet = rst("OAOI") PrNumber = rst("API0MOI") PrArea = rstfriEPIOXH") rst.MoveNext Do While Not (rst.EOF)

NxtStreet = rst("OAOI") NxtNumber = rst("API0MOI") NxtArea = rstCnEPIOXH")

If (PrStreet = NxtStreet And PrNumber = NxtNumber And PrArea = NxtArea) Then

rst.MovePrevious

If (NxtStreet o CmpStreet Or NxtNumber <>

CmpNumber Or NxtArea o CmpArea) Then Call CopyField(rst, rstl) End If

If (PrStreet o CmpStreet Or PrNumber <>

CmpNumber Or PrArea o CmpArea) Then Count = Count + 1 End If

rst.MoveNext Call CopyField(rst, rstl) CmpStreet = NxtStreet CmpNumber = NxtNumber CmpArea = NxtArea End If

rst.MoveNext PrStreet = NxtStreet PrNumber = NxtNumber PrArea = NxtArea Loop

SqlCode = "SELECT * FROM DoubleValues ORDER BY [Number]

ASC,[OAOI] ASC,[API0MOI] ASC,[ΠΕΡΙΟΧΗ] ASC"

CountDoubleAddress = Count rst.Close

rstl.Close db.Close

CountRows ("DoubleValues") Exit Function CheckError:

Debug.Print ("Error OOT') Resume Next End Function

Ή διαδικασία αναλαμβάνει να αριθμήσει κάθε εγγραφή του πίνακα τοποθετώντας την τιμή σε ένα πεδίο

Sub CountRows(tableName As String)

Dim db As Database, rst As Recordset, i As Long Set db = OpenDatabase(Paths)

Set rst = db.OpenRecordset(tableName) i - 1

Do While (Not rst.EOF) rst.Edit rstC'Number") = i rst.Update

rst.MoveNext Loop rst.Close db.Close End Sub

Sub IdNumber(tableName)

Dim db As Database, rst As Recordset, ID As Long Set db = OpenDatabase(Paths)

Set rst = db.OpenRecordset(tableName) If (rst.EOF = False) Then

Tunua Βιοαηνηνη.ή.

r.st.MoveLast ID = rstflD") Else

ID = 0 End If rst.MoveFirst Do While (rst.EOF = False)

ID = ID + 1 rst.Edit rst("ID") = ID rst.Update rst.MoveNext Loop End Sub

Sub Pause(PauseTime) Dim Start

PauseTime = 1 ' Ορίζουμε την διάρκεια Start = Timer ' Ορίζουμε τον αρχικό χρόνο Do While Timer < Start + PauseTime

DoEvents ' Κάνε άλλες εργασίες.

Loop If (ftime = 1) Then

Splash.Hide Me.Show End If End Sub

'Oi παρακάτω συναρτήσεις ενεργοποιούνται από το TAB Assets, και καλούν τις αντίστοιχες από το Meters

Private Sub AssDeleteDouble_Click() Call DeleteDouble_Click End Sub

Tunua BiounraviKnc Π/.ηοοοοοικήο - Πτν/ιακή Εονασία

Private Sub AssNewData_Click() Call NewData_Click End Sub

Private Sub AssOrderAddres.s_ClickO Call OrderAddress_Click End Sub

Private Sub AssShow_Click() Call Show_Click End Sub

Private Sub AssAddress_Click() Call Address_Click End Sub

Private Sub AssCPoint_Click() Call CPoint_Click End Sub

Private Sub AssWorkCode_Click() Call WorkCode_Click End Sub

UKJK

-

Πτυγιακή

ΦΟΡΜΑ DATA

Οι μεταβλητές δηλώνονται καθολικές. Δυο πρώτες αποτελούν recordset της βάσης δεδομένοιν. Γην δηλώνουμε public έτσι ώστε να ανοιχθούν από ά>Αη διαδικασία και να κλείσουν στην έξοδο. Η enter είναι μια μεταβλητή "σημαία", γιατί από την τιμή εξαρτάται η συνέχεια του προγράμματος (Είσοδος σε if, ορίζει αν θα εκτελεστοί διαγραφή δηλαδή αν θα ανοίξει το αντίστοιχο recordset

Public rstl As adodb.Recordset, rs As adodb.Recordset, enter As Integer

Ή φόρμα όταν θα φορτωθεί, θα δημιουργήσει ένα ADO recordset το οποίο θα αντιστοιχίσει στο DATAGRID, εμφανίζοντας τις εγγραφές του πίνακα που ορίζεται από το SQLcode.

Private Sub Fomi_Load() Dim AccessConnect As String

'Δημιουργούμε ρεύμα με τον πίνακα με το recordset

AccessConnect = "Driver={ Microsoft Access Driver (*.mdb)};Dbq=" + Menu.Paths

Set rstl New adodb.Recordset

rstl.Open Menu.SqlCode, AccessConnect, adOpenKeyset, adLockOptimistic, adCmdText

If (rstl.EOF = False) Then

Άν δεν είναι κενός ο πίνακας μεταφερόμαστε στην πρώτη γραμμή rstl.MoveFirst

Set Grid.DataSource = rst 1 'και το θέτουμε ως είσοδο στο Grid

£jjg. 'αλλιώς απενεργοποιούμε τα κουμπιά

MsgBox ("Δεν Υπάρχουν Διπλοεγγραφές") DeleteRow.Enabled = False End If

Label.Caption = Grid.ApproxCount

Έμφαί'ίζουμε τον ακριβή αριθμό των εγγραφών που έχουμε Call Grid_RowColChange(0,0)

'καλούμε το συμβάν αUαγή γραμμής για να εμφανιστεί ο αριθμός If (Menu.STab.Caption = "Assets") Then

■της παρούσας εγγραφής. Κρύβουμε και την τε>χυταία στήλη Grid.CoIumns.Itemi 12).Vi.sible = False 'η οποία περιέχει τον αύξοντα αριθμό κάθε γραμμής Else: Grid.CoIumns.Itemi 14).Visible = False End If

End Sub

'Είναι η διαδικασία που εκτε>^ίται όταν κ>.£ΐνουμε την φόρμα Private Sub Form_Unload(Cancel As Integer)

Load Menu 'Φορτώνουμε και ενεργοποιούμε το κεντρικό μενού Menu.Show

Menu.Enabled = True If (enter = 2) Then rs.Close

'Av έχει γίνει εγγραφή κ);£ίσε το recordset που άνοιξε rstl .Close 'Κ)χίσε αυτό που είναι ανοιχτό Call Menu.CreateDelTableC'DoubleValues", "DELETE") 'Σβήσε τον προσωρινό πίνακα

End Sub

'Είναι η ενέργεια που εκτε>χίται από το συμβάν αλλαγής γραμμής η στήλης.

Εμφανίζει τον αριθμό της εγγραφής σε ένα πλαίσιο κειμένου.

Private Sub Grid_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Dim temp As Integer

temp = Grid.Col On Error GoTo CheckError

If (Menu.STab.Caption = "Assets") Then 'ανάλογα με ποιον πίνακα χρησιμοποιούμε ορίζουμε την

Grid.Col = 12 'τελευταία στήλη και παράλληλα την θέση του Grid Else; Grid.Col = 14

End If

RowNumber = Grid.text 'Παίρνουμε την τιμή που αποθηκεύουμε στο πλαίσιο.

Grid.Col = temp Exit Sub CheckError:

Debug.Print("Errorl3") Resume Next End Sub

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

Private Sub Retum_Click() Unload Me End Sub

Ή επόμενη διαδικασία με την οποία σβήνουμε μια εγγραφή από τον κεντρικό πίνακα της βάσης δεδομένων. U λειτουργία της είναι ότι διαγράφει πρώτα εικονικά την εγγραφή από το Grid και έπειτα διαγραφή την εγγραφή που ταιριάζει από τον πίνακα έτσι ώστε ο χρήστης να \·ομίζει ότι γίνεται απ' ευθείας η εγγραφή

Private Sub DeleteRow_Click()

Responce = Μ8§Βοχ("Θέλετε Να Διαγράψετε Την σειρά;", vbYesNo) 'Επιλέγουμε αν θα γίνει η διαγραφή

If (Responce = vbYes) Then

enter = 2 Σηκώνουμε την σημαία εισόδου στην διαδικασία Dim db As Database, rst As Recordset

Dim field(13) As String, AccessConnect As String

'Ανοίγουμε ρεύμα ADO με τον ενεργό πίνακα, που καθορίζεται από την SQL εντολή του Sqlcode

AccessConnect = "Driver={Microsoft Access Driver (*.mdb));Dbq="

+ Menu.Paths

Set rs = New adodb.Recordset

rs.Open Menu.SqlCode, AccessConnect, adOpenKeyset, adLockOptimistic, adCmdText

If (Menu.STab.Caption = "Meters") Then

•Ανάλογα με ποιόν πίνακα ανοίξαμε και ποία πεδία έχει 'Αντιγράφουμε τις τιμές του σε προσωρινό πίνακα string 'αυξάνοντας βημαηκά τον αριθμό της στήλης

Fori = 0To 13

Grid.Col = i field(i) = Grid.text Next

End If

If (Menu.STab.Caption = "Assets") Then For i = 0 To 11

Grid.Col = i field(i) = Grid.text

' Next

End If rs.MoveFirst

'Μεταφερόμαστε στην πρώτη εγγραφή και μέχρι να μην υπάρχουν Do While Not (rs.EOF)

'άλ>χς ψάχ\’ουμε να βρούμε την εγγραφή που ταιριάζει με την επιλεγμένη If (rsC'ID") = field(O) And rs("A/A") = field(l)) Then

rs.Delete ‘την σβήνουμε από το Datagrid Exit Do 'και τερματίζουμε το βρόγχο Else

rs.MoveNext 'αλλιώς πάμε στην επόμενη End If

Loop

Set Grid.DataSource = rs 'Αλλάζουμε είσοδο στο datagrid Grid.Refresh

'και το ανανεώνουμε ώστε ο χρήστης να βλέπει της εγγραφές που έμειναν Set db = OpenDatabase(Menu.Paths)

'Στην συνέχεια ανοίγουμε ένα DAO ρεύμα με την βάσΐ) Set rst = db.OpenRecordsetC'SELECT * FROM " +

Menu.STab.Caption) 'και τον ενεργό πίνακα

rst.MoveFirst Do While Not (rst.EOF)

'Με ανάλογη διαδικασία σβήνουμε την εγγραφή και από εκεί If (rstC'ID") = field(O) And rst("A/A") = field(l)) Then

rst.Delete

MsgBox ("H διαγραφή Έγινε")

Tunua BioumaviKnc Πληηοωοοική€ - Πτ,,ν,ηκή Εονασία

rst.Close Exit Do Else

rst.MoveNext End If Loop End If

Label.Caption = Grid.ApproxCount

End Sub 'Και ανανεώνουμε τον αριθμό τον εγγραφών που έχει η βάση

Private Sub RowNumber_KeyPress(KeyAscii As Integer) On Error GoTo CheckError

Grid.Scroll 0, RowNumber Exit Sub

CheckError:

Debug.Print ("Error 014") Resume Next End Sub

U M iU ^ U jii'/iaKn E m n ^ ^

ΦΟΡΜΑ SHOWDATA

H φόρμα αυτή είναι όμοια με την DATA με την διαφορά ότι έχει πρόσθετα κουμτηά και απευθύνεται σε διαφορετικούς πίνακες, για να εμφανίσει τα στοιχεία τους

Οι μεταβλητές δηλώνονται καθολικές. Δυο πρώτες αποτείειύν recordset της βάσης δεδομέ\'(ο\·. Την δηλδινουμε public έτσι ώστε να ανοιχθούν από άλλη διαδικασία και να κλείσουί' στην έξοδο. Η enter είναι μια μεταβλητή "σημαία", γιατί από την τιμή εξαρτάται η συνέχεια του προγράμματος (Είσοδος σε if, ορίζει αν θα εκτελεστεί διαγραφή δη>ειδή αν θα ανοίξει το αντίστοιχο recordset)

Dim rst As adodb.Recordset, rs As adodb.Recordset Public enter As Integer

Ή φόρμα όταν θα φορτωθεί, θα δημιουργήσει ένα ADO recordset το οποίο θα αντιστοιχίσει στο DATAGRID, εμφανίζοντας τις εγγραφές του πίνακα που ορίζεται από το SQLcode.

Private Sub Foim_Load() Dim AccessConnect As String

AccessConnect = "Drivers(Microsoft Access Driver (*.mdb)};Dbq=" + Menu.Paths

Set rst = New adodb.Recordset

rst.Open Menu.SqlCode, AccessConnect, adOpenKeyset, adLockOptimistic, adCmdText

If (rst.EOF = False) Then

Άν 0 πίνακας δεν είναι κενός, τον δίνουμε ως είσοδο στο DATAGRID rst.MoveFirst

Set DataGrid.DataSource = rst

'Αλλιώς απενεργοποιούμε τα κουμπιά MsgBox ("Δεν Υπάρχουν Εγγραφές")

ChangeRow. Visible = False CopyRow.Visible = False DeleteRow. Visible = False

lu n m S m n m ’m ·; U/ m m m iKnc- Πτ,,ν,η^ή __________ L

Εμφανίζουμε τον αριθμό των εγγραφών που έχουμε

Label.Caption = DataGrid.ApproxCount RowNumber = DataGrid.Row

και κρύβουμε την τείχυταία στήλη που έχει τον αύξοντα αριθμό κάθε εγγραφής Call DataGrid_RowColChange(0,0)

If (Menu.STab.Caption = "Assets") Then 'ανάλογα με το πίνακα που είναι ενεργός

DataGrid.Columns.Item( 12). Visible = False Else: DataGrid.Columns.Item( 14). Visible = False End If

End Sub

Άττενεργοποιεί την φόρμα φορτώνοντας την κεντρική.

Private Sub Form_Unload(Cancel As Integer) Forin_Load

Load Menu Menu.Show Menu.Enabled = True On Error GoTo CheckError

If (enter = 2) Then rs.Close 'αν έχει διαγραφεί στοιχείο κλείνει το ρεύμα rst.Close

If Left(Menu.SqlCode, 21) = ("SELECT * FROM Preview") Then 'και ανάλογα με το ποιος πίνακας Call Menu.CreateDelTableC'Preview", "DELETE")

'χρησιμοποιήθηκε ως είσοδο Else: Call Menu.AddField("DELETE", "Number")

gjjj jf ‘τον διαγράφουμε αυτόν ,η την πρόσθετη στήλη CheckError: 'σε περίπτωση λάθους ο χειριστής σφαλμάτων εκτελείται

Debug.Print ("Error (Χ)9") Resume Next End Sub

'και συνεχίζει στΐ)ν επόμενη εντολή

ίκή Εονασία

■Είναι η ενέργεια που ειαε>χίται από το συμβάν αλλαγής γραμμής η στήλης.

Εμφανίζει τον αριθμό της εγγραφής σε ένα πλαίσιο κειμένου.

Private Sub DataGrid_RowColChange(LastRow As Variant, ByVal LastCol As Integer)

On Error GoTo CheckError

Dim temp As Integer Μεταβλητή που κρατάει την τελευταία ενεργή στήλη temp = DataGrid.Col

If (Menu.STab.Caption = "Assets") Then DataGrid.Col = 12 Else: DataGrid.Col = 14 End If

RowNumber = DataGrid.text

DataGrid.Col = temp ορίζει ξανά την παλιά στήλη σαν να μην έγινε τίποτα Exit Sub

CheckError:

Debug.Print ("Error 010") Resume Next End Sub

Άποφορτ(ΰ\ ει την τρέχουσα φόρμα Private Sub Retum_Click()

Unload Me End Sub

Όταν ενεργοποιείται επιτρέπει την μετατροπή των υπαρχόντων εγγραφών Private Sub ChangeRovv_Click()

Dim cell As Variant, db As Database, rst As Recordset, Label(14), currentCol As Integer

DataGrid.AllowUpdate = True currentCol = DataGrid.Col

cell = InputBox("Δώσε Νέα Τιμή",, DataGrid.text) If (cell = "") Then cell = DataGrid.text On Error GoTo CheckError

DataGrid.text = cell

D ataGrid.AllowUpdate = False

If (IxftlMenu.SqlCode, 21) = ("SELECT * FROM Preview")) Then Label(O) = "ID"

LabeK 1) = "A/A" 'τοποθετούμε το ονόματα των πεδίων σε ένα Label(2) = "ΕΙΔΟΣ” προσωρινό πίνακα

LabelO) = "CONNECTION POINT"

Label(4) = "ΠΕΡΙΟΧΗ"

Label(5) = "ΟΔΟΣ"

Label(6) = "ΑΡΙΘΜΟΣ"

Label(7) = "ΚΟΣΤΟΣ"

Label(8) = "ΕΡΓΟΛΑΒΟΣ"

Label(9) = "ΣΥΜΒΑΣΗ"

LabeK 10) = "ΤΙΜΟΛΟΓΙΟ"

Label(ll) = "BQR"

LabeK 12) = "ΚΩΔΙΚΟΣ ΠΕΛΑΤΗ"

Label(13) = "S/N"

Set db = OpenDatabase(Menu.Paths)

'o κέρσορας του datagrid πάει στην πρώτη στήλη για να πάρει την τιμή του ID DataGrid.Col = 0

'στην συνέχεια φορτώνεται στο recordset μόνο αυτή η τιμή Set rst = db.OpenRecordsetC'SELECT * FROM " +_

CStr(Menu.STab.Caption) + " WHERE ID=" + CStr(DataGrid.text)) DataGrid.Col = currentCol 'o κέρσορας πάει στην επιλεγμένη στήλη rst.Edit

rst(Label(DataGrid.Col)) = cell 'αλλάζει η τιμή rst.Update

rst.Close db.Close End If Exit Sub CheckError:

cell = ΙηριηΒοχΓΠρέπει Να Δώσεις Αριθμός Για Το Πεδίο") Debug.Print ("Error 012")

_ n z Resume Next

End Sub

H διαδικασία ενεργοποιείται όταν ζητηθεί εισαγωγή νέας εγγραφής Private Sub CopyRow_Click()

DataGrid.AllowAddNew = True Dim script, i As Integer, Label(12) As String Dim db As Database, rst As Recordset, ID As Long Label(O) = "AJA"

'τοποθετούμε το ονόματα το)ν πεδίων σε ένα προσωρινό πίνακα Label(l) = "ΕΙΔΟΣ"

Label{2) = "CONNECTION POINT"

Label(3) = "ΠΕΡΙΟΧΗ"

Label(4) = "ΟΔΟΣ"

Label(5) = "ΑΡΙΘΜΟΣ"

Label(6) = "ΚΟΣΤΟΣ"

Label(7) = "ΕΡΓΟΛΑΒΟΣ"

Label(8) = "ΣΥΜΒΑΣΗ"

Label(9) = "ΤΙΜΟΛΟΓΙΟ"

Label(10) = "BQR"

Labeld 1) = "ΚΩΔΙΚΟΣ ΠΕΔΑΤΗ"

Label(12) = "S/N"

DataGrid.AllowAddNew = True

'επιτρέπουμε την εισαγωγή και μεταβολή στοιχείων DataGrid.AllowUpdate = True

DataGrid.Col = 0 On Error GoTo Error 1

DataGrid.Row = DataGrid.ApproxCount + 1 'και μεταφερόμαστε στην νέα εγγραφή i = 0

On Error GoTo CheckError

'ανάλογα με ποιόν πίνακα χρησιμοποιούμε ,για κάθε στήλη του If (Menu.STab.Caption = "Meters") Then

- U 2 'εισάγουμε μία τιμή, εμφανίζοντας μήνυμα για κάθε πεδίο

Do While i ο 13 DataGrid.Col = i + 1

scnpt = ΙηρυΐΒοχ("Δώσε Τιμή Για Τον Πεδίο " + Label(i)) If (script = "") Then Exit Do

DataGrid.text = script

1 = 1 + 1 'αυξάνουμε τον μετρητή πεδίου Loop

End If

If (Menu.STab.Caption = "Assets") Then Do While i o 11 DataGrid.Col = i + 1

script = InputBox("Δώσε Τιμή Για Τον Πεδίο " + Label(i)) If (script = "") Then Exit Do

DataGrid.text = script :i+ 1 Loop End If

Set db = OpenDatabase(Menu.Paths) Set rst = db.OpenRecordset("SELECT ID FROM" + CStr(Menu.STab.Caption))

rst.MoveLast ID = rstflD") DataGrid.Col = 0 DataGrid.text = ID + 1 rst.Close db.Close

DataGrid.AllowAddNew = False 'απενεργοποιούμε τιιν εισαγωγή και μεταβολή στοιχείων

DataGrid. AllowUpdate = False Exit Sub

CheckError: 'σε περίπτωση λάθους ζητάμε να ξαναδοθεί μια τιμή για το πεδίο

■|·

script - ΙηρυΐΒοχΓΠρέπει Να Δώσεις Αριθμό Για Το Πεδίο " + Label(i)) Debug.Print ("ErrorOil")

Resume Exit Sub Error 1:

Debug.Print ("Error 015")

MsgBox ("Oi Καταχωρημένες εγγραφές είναι περισσότερες από όσες μπορεί να διαχειριστεί το πρόγραμμα")

Exit Sub End Sub

Ή επόμεχη διαδικασία με την οποία σβήνουμε μια εγγραφή από τον κεντρικό πίνακα της βάσης δεδομένων. Η λειτουργία της είναι ότι διαγράφει πρώτα εικονικά την εγγραφή από το Grid και έπειτα διαγράφει την εγγραφή που ταιριάζει από τον πίνακα έτσι ώστε ο χρήστης να νομίζει ότι γίνεται απ' ευθείας η εγγραφή. Σε περίπτωση που ανοίγουμε απευθείας τον κεντρικό πίνακα, διαγράφουμε και απ' ευθείας. Λειτουργεί όπως η αντίστοιχη του DATA

Private Sub DeleteRow_Click() DataGrid.AllowAddNew = False DataGrid.AllowUpdate = False DataGrid. Allow Delete = True

Responce = MsgBox("Θέλετε Να Διαγράψετε Την Σειρά;", vbYesNo) If (Responce = vbYes) Then

enter = 2

Dim db As Database, rst As Recordset Dim field(13) As String, AccessConnect As String

AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};Dbq=' + Menu.Paths

Set rs = New adodb.Recordset

rs.Open Menu.SqlCode, AccessConnect, adOpenKeyset, adLockOptimistic, adCmdText

If (Menu.STab.Caption = "Meters") Then 'Ανάλογα με ποιόν πίνακα ανοίξαμε και ποσά πεδία έχει

J

Documentos relacionados