Jak se v Delphi přes ADO nebo FireDAC připojit k zaheslované ACCDB databázi

19. 12. 2017, Vladimír Klaus, přečteno 431x

Delphi
MS Access
MS Office

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.

Jak se v Delphi přes ADO nebo FireDAC připojit k zaheslované ACCDB databázi, obr. 1

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

Jak se v Delphi přes ADO nebo FireDAC připojit k zaheslované ACCDB databázi, obr. 2

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.

Jak se v Delphi přes ADO nebo FireDAC připojit k zaheslované ACCDB databázi, obr. 3

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.

Jak se v Delphi přes ADO nebo FireDAC připojit k zaheslované ACCDB databázi, obr. 4

Ř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.

Jak se v Delphi přes ADO nebo FireDAC připojit k zaheslované ACCDB databázi, obr. 5

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.

Jak se v Delphi přes ADO nebo FireDAC připojit k zaheslované ACCDB databázi, obr. 6

Viz též: