Warsztat 2: Konwerter plików MDE do MDB (MDE to MDB converter).

Mde2Mdb2k.zip Add - in
Autor: Krzysztof Naworyta
Baza w formacie MsAccess 2000 (program należy zarejestrować jako dodatek Add-In)
Baza nie jest darmowa, korzystanie z niej jest dozwolone na zasadach opisanych w programie.
(Mde2Mdb2k Add-in is postcardware !)
96kB, 28-01-2003

Mde2Mdb97.zip Add - in
Autor: Krzysztof Naworyta
Baza w formacie MsAccess 97 (program należy zarejestrować jako dodatek Add-In)
Baza nie jest darmowa, korzystanie z niej jest dozwolone na zasadach opisanych w programie.
(Mde2Mdb97 Add-in is postcardware !)
87kB, 28-01-2003

Mde2Mdb - tutorial
Autor: Roberto Reis
Roberto w podzięce za wyjaśnienie działania programu przysłał własnoręcznie zrobiony 'tutorial'.
/cite/ I am sending you a brief tutorial, to show people like me how easy is to use your program./cite/
(A tu ten sam tutorial w wersji do sciągnięcia)

MDE Extractor v.1.1 Add - in
Autor: Siergiej Gawriłow http://accesstools.narod.ru/
Baza w formacie MsAccess 2000 (Obsługuje bazy Acc'97, Acc'2000 i Acc'2002)
99kB, 10-02-2003
Stanowi znaczne rozwinięcie głównego pomysłu z Mde2Mdb2k.zip.
Siergiej zgodził się udostępnić swoją wersję programu na naszej witrynie, 
Program przekompilowany na polskiej wersji Access'a, do pobrania w tym miejscu
(wkrótce wzbogacony polskim komentarzem)
Sposibo, Serge !

Mde to Mdb Converter ...coming soon (czeka na wolną chwilę).
Jeszcze jedna realizacja pomysłu Krzysztofa Naworyty konwersji MDE na MDB
trochę inaczej korzystająca z tej samej metody, co program MDE Extractor.
Autor: Krzysztof Pozorek

MDE to MDB Conversion Service
Źródło: www.EverythingAccess.com
Wymieniony serwis potrafi odzyskać oprócz projektu formularzy i raportów, także kod VBA(!).

Opis problemu:

Wiemy, że można przekonwertować bazę MDB na jej skompilowaną postać (plik MDE) w celu ochrony projektu. Zdarza się jednak, że nasz źródłowy plik MDB ulegnie uszkodzeniu (lub go niechcący skasujemy) i zostaniemy jedynie ze skompilowanym programem MDE. Co wtedy robić? Czy jest jakaś możliwość odtworzenia źródłowej bazy na podstawie wyłącznie pliku MDE?

Rozwiązanie:

Sprawa nie jest prosta, konwersja do pliku MDE fizycznie usuwa z bazy wszelkie kody źródłowe naszych procedur i funkcji. Innymi słowy wszystko, co napisaliśmy w VBA - bezpowrotnie już zostało stracone, zostawiając jedynie skompilowany kod, zrozumiały wyłącznie dla maszyny.

Ale to jedyna zła wiadomość, pozostałe są już dobre. Przecież kod VBA, to nie jedyny element aplikacji accessowej, a wszystkie pozostałe da się odzyskać! Najprościej jest z tabelami, kwerendami. Wystarczy otworzyć nową bazę i zaimportować do niej te obiekty, wybierając odpowiednią opcję z menu. Trochę gorzej jest z makrami - Access 2000 nie pozwala importować makr tą metodą, ale wystarczy otworzyć dwa okna Accessa i skopiować makra przeciągając je myszką z jednej bazy (MDE) do drugiej (MDB).

Prawdziwy problem pojawia się, gdy chcemy zaimportować do nowej bazy formularze i raporty. Okazuje się, ze jest to niemożliwe żadną z wymienionych metod! Tu pojawia się rozczarowanie, bo przecież formularze to zwykle podstawowa częć naszej aplikacji.

Czy nie ma sposobu na odzyskanie formularzy? Wyzwanie podjął Krzysztof Naworyta i dokonał tego w swoim programie Mde2Mdb. Aplikacja jest napisana w postaci dodatku Add-in, co jest bardzo wygodne, bo możemy ją wywołać bezpośrednio z bazy do której będziemy kopiować odzyskane obiekty. Oczywiście uratowane formularze nie będą zawierały swoich modułów z procedurami zdarzeń. Ale często może się to okazać zbędne, biorąc pod uwagę, że wpadki z przypadkowym skasowaniem źródłowego pliku MDB, dotyczą zwykle początkujących twórców, którzy często w ogóle nie używają kodu VBA, opierając logikę swojej aplikacji na makrach. A nawet jeśli były jakieś procedury, to na pewno łatwiej je będzie napisać ponownie, jeśli odtworzymy wcześniej wszystkie pozostałe elementy projektu formularza. Zwłaszcza, że nazwy procedur również w programie Krzysztofa są odzyskiwane.

A oto fragment opisu autora:

1. Program należy zarejestrować jako Add-in: (menu: narzędzia > dodatki > Menedżer dodatków) 2. Program uruchamia się z poziomu docelowej bazy MDB (!) (uprzednio w osobnej instancji można samodzielnie otworzyć odzyskiwany plik MDE, z wciśniętym shiftem, aby uniknąć ewentualnych problemów z makrem Autoexec czy formularzem startowym. Podobnie mozna za wczasu otworzyć te formularze, które pragniemy odzyskać. 3. Z poziomu dodatku wskazujemy ścieżkę do pliku mde. Po jego załadowaniu wypełniana jest lewa lista ze wszystkimi dostępnymi w nim formularzami. 4. Program odzyskuje formularze uprzednio otwarte a) może to zrobić juzer, przełączając się do pliku mde i uruchamiając formularz ręcznie (aby wpisać ewentualne konieczne parametry) b) może spróbować załadować taki formularz przy pomocy przycisku z błyskawicą 5. Obecna wersja programu pozwala na wybór wielokrotny (formularze są otwierane automatycznie w trakcie odzyskiwania) 6. Po uruchomieniu przyciskiem "Run", zaczyna się właściwy proces odzysku, wraz z wszystkimi wykrytymi w wskazanym formularzu podformularzami (!) 7. Jeśli któryś formularz w trakcie otwierania wymaga wpisania jakiegoś parametru, procedura przerywa swoje działanie. Nalezy wtedy przełączyć się do pliku mde, usunąć problem i ponownie przełączyć się do MDB. Jest to pewna wada tego rozwiązania (nie ma jej rozwiązanie Sergieja) ale i jego zaleta: Program odzyskuje dynamiczne (run-time) właściwości formularza i jego kontrolek. Oznacza to, że jeśli nasz formularz w projekcie ma osadzony jakiś pusty podformularz (dummy), który dopiero w trakcie ładowania jest zastępowany innym (SourceObject), to odzyskujemy właśnie ten ostatni. Ze względu na niemożność odzysku kodu daje to dodatkową możliwość odzysku właściwej architektury aplikacji. 8. Obecna wersja to już prawdziwie międzynarodowa współpraca ! Choć samo rozwiązanie wielojęzyczności jest toporne i robione ad hoc, to jednak te cztery flagi mogą robić wrażenie ;-) niniejszym pragnę serdecznie podziękować za pomoc w tłumaczeniu: - Rafałowi Posmykowi, Niemcy (smyk@posmykowizna.de) (angielski i niemiecki) - Jacson Gonçalves de Medeiros, Brazylia (JACSON@senado.gov.br) (portugalski) Thank You very much ! (...) Baza jest dostępna jako "Postcard Shareware" - będzie sympatycznie otrzymać kartkę od kogoś z Honolulu ;-))))

Uwagi:

Korzystanie z programu Mde2Mdb w celu odzyskania formularzy nie jest takie zupełnie darmowe - wymaga wysłania kartki do autora, ale chyba nikt, komu ten użytek uratował kilka godzin lub dni pracy, nie uzna tej ceny za wygórowaną. Dodatkowo autor zdecydował się opublikować także niezabezpieczoną wersję źródłową bazy.

Oto wymieniony program (dla Acc. 97) w wersji źródłowej.

Prezentowany program ma bardzo praktyczne zastosowanie, dla niektórych może być wręcz wybawieniem, gdy nieostrożnie usunęli oryginalny plik MDB. Jednak ta aplikacja ma także swoje drugie znaczenie - dydaktyczne. Z pewnością interesujące będzie zajrzeć do tego kodu, aby poznać zasady pisania dodatków (Add-Ins) w Accessie, dowiedzieć się jak używać metod zewnętrznej aplikacji, jak budować moduły klas (np. jak zrobić klasę pozwalająca na sterowanie własnym paskiem postępu. Krzysztof rzadko w tym programie używa tradycyjnych modułów).

W programie są odtwarzane wszystkie cechy i elementy formularza metodą budowania ich od początku w kodzie. To zaawansowane mechanizmy dostępne w Accessie wykorzystywane w kreatorach, warto zobaczyć jak to się robi.

Analizując program nie mamy wątpliwości, że Krzysztof włożył dużo pracy w przygotowanie tego softu. Powstała aplikacja unikalna, przydatna i kształcąca. Dowiemy się tam, jak poznać czy obiekt jest tabelą, czy jest tabelą systemową, czy baza jest skompilowana do MDE. Kto o tym wie, że podczas kompilacji bazy do MDE, Access tworzy dodatkową właściwość, którą można odczytać za pomocą: CurrentDb.Properties("MDE")?

Te ciekawostki przewijają się w programie Krzysztofa 'między wierszami' chociaż mogą stanowić samodzielny temat. Cieszę się, że mogę zaprezentować niniejszy Add-In na mojej stronie.