19.12.2017, Vladimír Klaus, navštíveno 2951x
Nejprve je třeba začít tím, co to je ACCDB databáze. Je to modernější a robustnější formát databáze MS Access. Dlouho jsem si myslel, že se z Delphi přes ADO k této databázi nedá připojit, ale byla to pravda jen částečně. Nelze se připojit přes klasický ovladač Microsoft Jet 4.0 OLE DB Provider. Jeho výhodou je totiž to, že je součástí všech verzí Windows, není proto třeba nic instalovat a navíc se už nevyvíjí - takže je stabilní a funkční. Přes tento ovladač se dá připojit pouze ke staršímu MDB formátu databáze. Když to zkusíte k novému formátu, nepochodíte.
Takže co s tím dál? Je třeba nainstalovat novější ovladač a to v podstatě úplně na každý počítač (a bez ohledu na verzi Windows), protože je velmi málo pravděpodobné, že by tam byl již přítomen. Slouží k tomu Microsoft Access Database Engine 2010 Redistributable, který si stáhnete z níže uvedeného odkazu. Pro instalaci pak použijte doporučovaný postup, který by měl zajistit, že nedojde k případnému konfliktu s jinou verzí (ať už ovladače nebo MS Office) a také běží tiše, což se dá s výhodou použít při instalaci vaší aplikace.
AccessDatabaseEngine.exe /passive
Samozřejmě to můžete nejprve udělat v interaktivním režimu
Pak už můžete přidat klasické komponenty ADOConnection a ADOTable, vybrat správného zprostředkovatele a pokud nemá databáze nastavené heslo, tak to všechno bez problému projde.
Nastavení ConnectionString odpovídá tomu, na co jste byli zvyklí u starého ovladače, což už bohužel neplatí, pokud má databáze nějaké heslo.
Provider=
Microsoft.ACE.OLEDB.12.0;
Password=abc123;
Data Source=d:\data.accdb;
Persist Security Info=True;
Při pokusu o připojení dojde totiž k podivné chybě: Zkušební připojení se nezdařilo z důvodu chyby při inicializaci zprostředkovatele. Cannot start your application. The workgroup information file is missing or opened exclusively by another user.
Řešením je úprava odkazu na heslo z Password na Jet OLEDB:Database Password.
Provider=
Microsoft.ACE.OLEDB.12.0;
Jet OLEDB:Database Password=abc123; <<<<<
Data Source=d:\data.accdb;
Persist Security Info=True;
U FireDAC k výše uvedené chybě nedochází, tedy můžete všechny parametry nastavit přímo v dialogu pro editaci vlastností TFDConnection.
Samozřejmě může dojít ještě k jiné situaci, tedy kdy aplikace má správně nastavené používání novějšího ovladače, ale v systému není řádně nainstalován.
Viz též:
- https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=13255
- https://stackoverflow.com/questions/5467565/delphi-working-folder-access-db
- https://weblogs.asp.net/jeevanmurkoth/exception-cannot-start-your-application-the-workgroup-information-file-is-missing-or-opened-exclusively-by-another-user
- http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Connect_to_Microsoft_Access_Database_(FireDAC)
- https://social.msdn.microsoft.com/Forums/office/en-US/57aee87f-a2e0-4804-a452-7c69f1d32957/how-i-can-install-access-database-engine-without-uninstalling-microsoft-office?forum=exceldev