Τα OLE Objects ή αργότερα ActiveX Objects ήταν μία παλιά, πολύ παλιά τεχνολογία χάρις στην οποία μπορούσες να ενσωματώσεις αντικείμενα μίας εφαρμογής (π.χ. word, εικόνες, video, οτιδήποτε) στα data μίας άλλης. Για παράδειγμα, θα ενσωμάτωνες ένα αντικείμενο video μέσα σε ένα αρχείο Excel ή Word. Όταν κάποιος άνοιγε το αρχείο, το OLE θα εντόπιζε την εφαρμογή με την οποία είχε φτιαχτεί το OLE object και θα την εκτελούσε μέσα στο πλαίσιο του document. Μπορεί κανείς ακόμα να δει πως δουλεύουν αυτά τα αντικείμενα κάνοντας Insert > Object στο Word.
Ουσιαστικά τα OLE Objects που αποθηκεύονται σε μία βάση Access είναι αυτά τα ενσωματωμένα data. Για να εμφανίσει αυτά τα παιδία η Access χρησιμοποιεί ένα ειδικό control (το οποίο λεγόταν OLE Control? OLE Bound control?), υπό την προϋπόθεση πάντα ότι η εφαρμογή που μπορεί να εκτελέσει το OLE Object είναι εγκατεστημένη στον υπολογιστή. Διαφορετικά θα δείξει μόνο ένα thumbnail (αν υπάρχει κάτι τέτοιο αποθηκευμένο).
Το περιεχόμενο ενός OLE Object δεν είναι εικόνες, Excel sheets, Word documents ή οποιοδήποτε άλλο file format. Έχει μία πολύ συγκεκριμένη δομή η οποία περιλαμβάνει το είδος του αντικειμένου και τα δεδομένα του (αυτά μπορεί να είναι εικόνες κλπ), με τη μορφή που θέλει να τα αποθηκεύει η εφαρμογή που έφτιαξε το αντικείμενο. Συνήθως, υπάρχει ένας header και μετά ακολουθούν τα raw data π.χ. του jpg ή του doc. Η εφαρμογή όμως μπορεί άνετα να τα αποθηκεύσει σε οποιαδήποτε μορφή ή να αποθηκεύει πολλαπλά έγγραφα μαζί, να αποθηκεύσει properties όπως π.χ. τη διάσταση που θέλεις να έχει το αντικείμενο κλπ. Δυστυχώς, τω καιρώ εκείνο το μόνο API που υπήρχε (και υπάρχει ακόμα) είναι σε C. Πρέπει να ψάξεις στο Windows SDK για structured storage.
Μία λύση είναι, εφόσον ξέρεις ποιοί είναι οι τύποι των αρχείων και πως ξεχωρίζουν μεταξύ τους, να διαβάσεις τα objects στη μνήμη και να αποθηκεύσεις μετά στο σκληρό μόνο το κομμάτι μετά τον header. Μπορείς π.χ. να έχεις κάπου μία λίστα με τους headers διαφόρων γνωστών τύπων αρχείων και να ψάχνεις κάθε object αν περιέχει κάποιον από αυτούς.
Μία μπακάλικη λύση, η οποία δεν ξέρω αν μπορεί να δουλέψει, είναι να σώσεις όλο το object και μετά να το ανοίξεις στον Internet Explorer. Ο ΙΕ ίσως να καταλάβει τί τύπου είναι το αντικείμενο και να το ανοίξει.
Πώπω, η ερώτηση αυτή με πήγε .............
15 χρόνια πίσω, όταν προσπαθούσα κι εγώ να καταλάβω τί είναι το OLE και τί είναι το Structured Storage!
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos