Δευτέρα, 19 Φεβρουαρίου 2018

Αναθεώρηση 47 Έκδοση 9,0

Σε αυτήν την αναθεώρηση έφτιαξα το σύστημα για τις βάσεις δεδομένων να αλλάζει αυτόματα αν δεν μπορεί να φορτώσει μια βάση δεδομένων από Access 97 (αλλάζει αυτόματα το τρόπο σύνδεσης).
Με αυτόν τον τρόπο διαβάζονται και οι παλιές βάσεις δεδομένων που ήταν φτιαγμένες σε Jet.
Δουλεύει και σε Wine 1.8 σε 64 bit (όχι όμως σε Wine 3.0 64bit)


Σε Linux εκτελούμε από κονσόλα αυτό:
wine odbcad32.exe


 Αυτό μας δείνχει τι υποστηρίζει το σύστημα!
Εδώ είναι ένα παράδειγμα χρήσης της παραπάνω φόρμας για σύνδεση με βάση δεδομένων. Θα δούμε πώς γίνεται να συνδεθούμε μέσω ODBC με την Μ2000. Δουλεύει σε wine 1.8 και σε Windows (οποιαδήποτε έκδοση αρκεί να βλέπουμε στο odbcad32.exe ότι υποστηρίζει την Access Database).
Προσπαθήστε να εκτελέσεται το παράδειγμα. Σε ένα τμήμα Α θα φτιάξουμε τη βάση και σε ένα τμήμα Β αφού μεταφέρουμε τη βάση (σε wine δεν χρειάζεται) θα την συνδέσουμε μέσω ODBC.
Βάζοντας το accdb δημιουργούμε βάση νέου τύπου, και μπορούμε να βάζουμε τα πεδία με την Εκτέλεση.


ΒΑΣΗ "ΑΛΦΑ.accdb"  ' ΔΙΑΓΡΑΦΟΥΜΕ ΑΝ ΒΡΟΥΜΕ ΤΟ ΟΝΟΜΑ
ΕΚΤΕΛΕΣΗ "ΑΛΦΑ.accdb", { CREATE TABLE Employees(ID autoincrement primary key,  LastName   VARCHAR(40) ,  FirstName  VARCHAR(40)  NOT NULL, MyMemo TEXT )}
ΠΡΟΣΘΗΚΗ "ΑΛΦΑ.accdb","Employees",,"George","йваоаптаЭЭ","Γεια χαρά από Ελλάδα"
ΑΝΑΚΤΗΣΗ "ΑΛΦΑ.accdb", "Employees", 1,"",""
ΔΙΑΒΑΣΕ ΠΟΣΑ, ΑΝΑΓΝΩΡΙΣΤΙΚΟ, ΕΠΙΘΕΤΟ$, ΟΝΟΜΑ$, ΣΤΟΙΧΕΙΑ$
ΤΥΠΩΣΕ $(4, 6),  "Βάση:","ΑΛΦΑ.accdb"
ΤΥΠΩΣΕ  "ΟΝΟΜΑ:",ΟΝΟΜΑ$ + " " + ΕΠΙΘΕΤΟ$
ΤΥΠΩΣΕ "ΣΤΟΙΧΕΙΑ:"
ΤΥΠΩΣΕ "",
ΑΝΑΦΟΡΑ ΣΤΟΙΧΕΙΑ$
ΚΛΕΙΣΕ ΒΑΣΗ "ΑΛΦΑ.accdb"
ΤΥΠΩΣΕ


Τώρα μπορούμε σε ένα τμήμα Β (το προηγούμενο έστω ότι ήταν το Α) να δώσουμε αυτό:

ΒΑΣΗ.ΠΑΡΟΧΟΣ "dsn=testthis;Uid=a;Pwd=b;","ODBC","100101"
ΑΝΑΚΤΗΣΗ "(any)", "Employees", 1,"",""
ΔΙΑΒΑΣΕ ΠΟΣΑ, ΑΝΑΓΝΩΡΙΣΤΙΚΟ, ΕΠΙΘΕΤΟ$, ΟΝΟΜΑ$, ΣΤΟΙΧΕΙΑ$
ΤΥΠΩΣΕ $(4, 6),  "Βάση"
ΤΥΠΩΣΕ  "ΟΝΟΜΑ:",ΟΝΟΜΑ$ + " " + ΕΠΙΘΕΤΟ$
ΤΥΠΩΣΕ "ΣΤΟΙΧΕΙΑ:"
ΤΥΠΩΣΕ "",
ΑΝΑΦΟΡΑ ΣΤΟΙΧΕΙΑ$
ΚΛΕΙΣΕ ΒΑΣΗ "(any)"
ΤΥΠΩΣΕ
ΒΑΣΗ.ΠΑΡΟΧΟΣ ""

Το 100101 είναι το βασικό "συνθηματικό" για την Μ2000. Όμως μπορούμε να φτιάξουμε μια σύνδεση ODBC. Αυτό κάνει το πρόγραμμα παραπάνω. Το testthis το φτιάχνουμε στο odbcad32.exe
Δείτε ότι το όνομα της βάσης στην Ανάκτηση έγινε κάτι σε παρένθεση. Ότι και να βάλουμε από τη στιγμή που βλέπει την παρένθεση ο διερμηνευτής καταλαβαίνει ότι έχουμε σύνδεση έμμεση μέσω ODBC, που σημαίνει ότι έχει ήδη δοθεί στο ΒΑΣΗ.ΠΑΡΟΧΟΣ τα τρία απαιτούμενα στοιχεία (το τελευταίο αν η βάση δεν είναι κλειδωμένη θα πρέπει να είναι "", για τις βάσεις της Μ2000 δεν ισχύει αυτό, είναι κλειδωμένες για να μπορεί να ξέρει η Μ2000 ποιες βάσεις είναι δικές της- έχουν το ίδιο κλειδί- ώστε να μην διαγράφει μια ξένη βάση).
Σε Windows 7 πρέπει να αντιγράψουμε το αρχείο ΑΛΦΑ.accdb σε ένα φάκελο που να μπορεί να το διαβάσει το  odbcad32.exe. Σε wine το διαβάζει στο φάκελο που βάζει η M2000 τα αρχεία προγραμμάτων και άλλων βοηθητικών όπως αυτών των βάσεων δεδομένων.
Με την εντολή WIN DIR$ μας ανοίγει το φάκελο αυτό. Το Dir$ έχει το φάκελο. Ελληνικά είναι το Κατ$
σε Wine αν ο χρήστης λέγεται person τότε είναι αυτό
c:\users\person\application data\m2000\
αλλά για να το δούμε με του linux τον file explorer (πχ το thunar) θα το βρούμε έτσι: /home/person/.wine/drive_c/users/person/Application Data/m2000/
(οι φάκελοι με την τελεία είναι κρυφοί, και για να εμφανιστούν πατάμε το ctrl + H)
Ακόμα και αν δεν είναι φανερός ο .wine φάκελος μπορούμε να δώσουμε το παραπάνω και θα μας ανοίξει το φάκελο.
Σε Windows 7 θα πάμε στο φάκελο και θα αντιγράψουμε το ΑΛΦΑ.accdb σε έναν φάκελο όπως C:\myfiles\
Σε Wine 1.8 θα γράψουμε σε κονσόλα το wine odbcad32.exe και στη φόρμα USER DSN θα κάνουμε Add.
Εκεί δίνουμε το όνομα testthis
Μετά επιλέγουμε Select και εκεί βρίσκουμε το αρχείο στο users/person/Application Data/m2000/  (όπου person το user name στα Ubuntu)
Αφού κάνουμε επιλογή πατάμε το Advance και βάζουμε ένα user id και ένα password για την σύνδεση αυτή. Θα βάλουμε τα a και b, είναι αυτά που δίνουμε στα Uid και Pwd στην εντολή Βάση.Πάροχος

Τώρα είναι έτοιμη Μ2000 να τρέξει το τμήμα Β και να μας δείξει το περιεχόμενο που ζητάμε μέσω ODBC.
To $() στην τύπωσε παίρνει δυο αριθμούς, τον τρόπο εμφάνισης (0 το εξ ορισμού) και το πλάτος στήλης (εδώ 6). Η εντολή Φόρμα 60, 40 θα γυρίσει την στήλη στο στανταρ (το βγάζει με τύπο, εδώ θα είναι το δέκα)
Η Τύπωσε Στήλη μας δίνει το πλάτος στήλης.
Το 4 είναι ο τρόπος εμφάνισης μέσω της Τύπωσε με αναλογική γραφή. Το 0 είναι με μη αναλογική γραφή. Τα νούμερα είναι από 0 έως 9 και αλλάζουν τον τρόπο στοίχισης στις στήλες. Δείτε την βοήθεια στο $(). Επειδή το $() δεν είναι αναγνωριστικό κοινό, θα δώσουμε αυτό (με εισαγωγικά):
βοήθεια "$("
η βοήθεια βγαίνει ελληνική επειδή όταν δεν βγάζει άκρη από το όνομα, τότε κοιτάει τι γλώσσα ήταν το βοήθεια - μπορεί να ήταν Help "$(". Αν το δώσουμε πρώτα στα ελληνικά και μετά στα αγγλικά δεν θα αλλάξει, επειδή ήδη δείχνει το $(. Πρέπει να πάμε σε κάτι άλλο, πχ βοήθεια Τύπωσε και μετά να δώσουμε το Help "$("