Distribuce mda/mdb aplikací a problémy s binární kompatibilitou

Finální aplikace typu MDA/MDB pro Vario (doplněk, modul nebo tiskový formulář) vytvořené na zakázku je možné předat zákazníkovi

1) ve formátu obsahujícím pouze přeložený binární kód (dále MDE*),

2) ve formátu obsahujícím nepřeložený kód (dále MDA).

(*Přípona doplňků je vždy .mda, i když se jedná o formát databáze .mde. Po překladu do .mde se musí soubor přejmenovat na .mda, jinak nebude možné volat funkce doplňku.)

Formát MDE

Výhodou MDE je, že nedistribuujete Vaše zdrojové kódy, a že MDE aplikace jsou spolehlivější.

Nevýhodou je, že pokud projekt obsahuje reference na Vario.mda, VarioLib.dll nebo jiné knihovny, bude fungovat pouze s tou verzí těchto knihoven, ke kterým byla přeložena do MDE. Tj. pokud nemá zákazník stejné vydání Varia jako vývojář, nebude aplikace fungovat. To samé se stane po aktualizaci na nové vydání Varia. To je dáno tím, že při překladu VBA projektu nelze zajistit binární kompatibilitu.

Z toho plyne, že pokud se rozhodnete pro MDE formát:

  • nesmíte používat reference na knihovny, které se mění (Vario.mda, VarioLib.dll)
  • nebo musíte zajistit, abyste dodávali aktualizaci vaší aplikace spolu s aktualizací Varia.

Formát MDA

Nevýhodou je, že aplikace obsahuje zdrojové kódy (lze je však chránit heslem). Výhodou je, že projekty nejsou závislé na binární kompatibilitě.

Přestože u této verze nejsou problémy s binární kompatibilitou, mohou nastat problémy s referencemi. (Je zajímavé, že tyto problémy u MDE aplikací nenastávají.)

Známé jsou následující problémy:

  • Aplikaci nelze vůbec zavést, zobrazí se hláška "Method Run of object _Application failed".
  • Nefungují standardní funkce jako Left(), Date() nebo Format() použité v dotazech nebo ve výrazech. To se projeví například tím, že se nepodaří otevřít formulář založený na dotazu, který v podmínce WHERE používá funkci Date().

 

Následující tipy vám pomohou tyto problémy minimalizovat:

1) Založte novou databázi pro vytvoření MDA aplikace. Nekopírujte stávající soubory. Pokud chcete zkopírovat stávající soubor, proveďte to funkcí Zkomprimovat a opravit databázi (musíte zvolit jinou zdrojovou a cílovou databázi).

Po zkopírování vám doporučujeme změnit název projektu.

2) Použijte jen reference, které nezbytně potřebujete. Čím méně jich bude tím lépe. Například pokud používáte jen málo funkcí z VarioLib nemusíte vytvářet referenci na VarioLib.dll, ale můžete použít funkci app.VarioObject, která vrací instanci třídy Vario, ze které se dostanete ke všem funkcím VarioLib.

3) Seřaďte reference ve správném pořadí. Doporučujeme následující:

  • Visual Basic For Applications
  • Microsoft Access 11.0 Object Library
  • Microsoft DAO 3.6 Object Library
  • VarioMda
  • VarioLib

4) Ujistěte se, že distribuujete aplikaci bez přeloženého kódu. Access ukládá automaticky přeložený binární kód spolu s kódem zdrojovým, vždy když jej má k dispozici. Když spustíte aplikaci nebo zvolíte příkaz menu Debug/Compile, dojde k překladu a Access automaticky uloží binární kód (to však platí jen je-li aplikace otevřena v okně databáze, neplatí to pro aplikace zavedené jako doplňky). Binární kód je stejný jako v případě MDE aplikací, tj. je binárně nekompatibilní.

To, že je kód přeložen poznáte podle toho, že nabídka Debug/Compile je nepřístupná. V takovém případě musíte provést změny ve zdrojovém kódu a uložit je (vyberte více řádků, stiskněte TAB a potom Shift+TAB, potom Ctrl+S a zavřete aplikaci - nesmíte jí již spustit!).

Vypněte v nastavení automatický překlad na pozadí (Backround Compile):

  • Menu Tools/Options... (v editoru VBA)
  • Dialog Options, karta General, skupina Compile.Nastavte:
    [x] Compile On Demad
         [  ] Backround Compile

Tím zamezíte nechtěnému překladu a uložení přeloženého kódu.

5) Pokud přesto budete mít problémy s tím, že aplikace nefunguje na některých počítačích nebo funguje jen s některým vydáním Varia, doporučujeme založit novou databázi, importovat do ní objekty z původní aplikace a znovu vytvořit reference.