Popularita databáze Microsoft Access (http://www.microsoft.com/office/access) je částečně způsobena jejím uživatelsky přívětivým grafickým rozhraním. Kromě použití Accessu jako samostatného DBMS můžete použít jeho grafické rozhraní k organizaci práce s jinými databázemi, jako je MySQL nebo Microsoft SQL Server.

Abych demonstroval podporu PHP ODBC, popíšu proces připojení k databázím Microsoft Access v PHP. Je to překvapivě snadné, ale díky popularitě Microsoft Access je to vítaný doplněk vašeho kreativního arzenálu. Popíšu tento proces krok za krokem:

  1. Vytvořte databázi Accessu. Předpokládá se, že již víte, jak to udělat, a pokud nevíte jak, ale přesto chcete provést tento příklad, použijte služby programu průvodce. Vytvořil jsem standardní databázi kontaktů pomocí průvodce. Nezapomeňte vytvořit několik záznamů v tabulce a zapamatujte si název tabulky, budeme jej brzy potřebovat!
  2. Uložte databázi do svého počítače.
  3. V dalším kroku zorganizujeme přístup k databázi Access pomocí ODBC. Spusťte příkaz Start> Nastavení> Ovládací panely (Start> Nastavení> Ovládací panely). Vyhledejte ikonu Zdroje dat ODBC (32 bitů) v Ovládacích panelech. Tato ikona spustí správce ODBC, který se používá ke konfiguraci různých ovladačů a zdrojů dat ve vašem systému. Spusťte program dvojitým kliknutím na tuto ikonu. Okno správce se ve výchozím nastavení otevře na kartě User DSN. Na této kartě jsou uvedeny zdroje dat, které jsou specifické pro uživatele a lze je použít pouze na tomto počítači. Tento příklad bude používat právě takový zdroj dat.
  4. Klepněte na tlačítko Přidat... na pravé straně okna. Otevře se nové okno pro výběr ovladače, který bude pracovat s novým zdrojem. Vyberte řádek Microsoft Access Driver(*.mdb) a klepněte na tlačítko Dokončit.
  5. Na obrazovce se zobrazí nové okno Instalace ovladače ODBC pro Microsoft Access (ODBC Microsoft Access Setup). Vyhledejte textové pole Název zdroje dat ve formuláři a zadejte název databáze Access, kterou jste vytvořili. Volitelně můžete zadat popis do textového pole přímo pod polem Název zdroje dat.
  6. Klepněte na tlačítko Vybrat... - zobrazí se okno ve stylu Průzkumníka Windows. Požádá vás o nalezení databáze, ke které bude přistupovat pomocí ODBC.
  7. Vyhledejte svou databázi ve stromu adresářů a dvakrát na ni klikněte. Vrátíte se do okna Instalace ovladače Microsoft Access ODBC. Cesta k vybrané databázi se zobrazí nad tlačítkem Vybrat... Klikněte na OK.
  8. Připraveno! Nyní můžete pracovat s databází Access pomocí ODBC.

Stačí si vytvořit skript, ve kterém budete s databází přes ODBC pracovat. Ve skriptu níže budou běžné funkce ODBC (viz výše) použity k zobrazení všech informací z tabulky kontaktů vytvořené pomocí průvodce Access. Než se však podíváte na scénář, je dobré vědět, jak vypadá tabulka Kontakty v Accessu (obrázek 11-3).

Rýže. 11.3. Tabulka kontaktů v MS Access

Nyní, když víte, jaké informace budou z databáze načteny, můžeme přejít ke skriptu. Pokud jste zapomněli, co konkrétní funkce dělá, podívejte se na popis na začátku této kapitoly. Výsledky výpisu 11.7 jsou zobrazeny na obrázku 1. 11.4.

Výpis 11.7. Použití funkcí ODBC pro práci s MS Access

Není to všechno jednoduché? A skvělé je, že tento skript je plně kompatibilní s jakýmkoli jiným DBMS s podporou ODBC. Pro procvičení zkuste zopakovat všechny popsané akce pro jiný DBMS, spusťte skript – a dostanete stejné výsledky jako na Obr. 11.4.

Pokud plánujete vytvořit svůj dynamický web na platformě Windows, pak budete mít nejspíše za úkol vybrat si DBMS pro ukládání informací (o jazyku, ve kterém to budete programovat, nejsou otázky). Jednou z možností řešení může být použití MS Access jako SQL serveru. Dále bude popsáno, jak přistupovat k databázi MS Access ve skriptu napsaném v PHP.

PHP bohužel nemá vestavěné nástroje pro práci s tímto DBMS, což ovšem nevylučuje jejich společnou práci – pro připojení k databázi využijeme ODBC.

Nejprve musíme vytvořit tzv. DSN Source. K tomu (tato možnost je zvažována, když má uživatel nainstalovaný Windows 2000 Rus) v ovládacím panelu musíme vybrat položku Správa a poté Zdroje dat (ODBC). Dále v okně, které se objeví, vyberte záložku systémové DSN, klikněte na tlačítko Přidat, vyberte ovladač MS Access a klikněte na tlačítko Hotovo. Do vstupního pole názvu zdroje dat napíšeme jméno, pod kterým můžeme později přistupovat k naší databázi, například testovat, poté stiskneme tlačítko výběru a označíme, kde se náš databázový soubor na našem disku nachází. Následně v případě potřeby můžeme kliknutím na doplňkové tlačítko nastavit uživatelské jméno a heslo pro přístup k databázi přes ODBC. Nyní, když máme zdroj dat ODBC, můžeme se k naší databázi připojit pomocí funkce odbc_connect:

$x=odbc_connect("test","test","test");
?>

K předání dotazu do DBMS můžeme použít funkci odbc_exec:

$res=odbc_exec($x,"vytvoření testu tabulky (f1 celé číslo, f2 varchar(10))");
$res=odbc_exec($x,"vložit do testovacích (f1,f2) hodnot(1,"qwerty")");
$res=odbc_exec($x,"vložit do testovacích (f1,f2) hodnot(2,"asdfgh")");
?>

Pokud po spuštění tohoto příkladu otevřeme testovací databázi v MS Access, zjistíme, že se tam objevila nová testovací tabulka s poli f1 a f2 celočíselného a řetězcového typu; tabulka bude mít dva záznamy s daty, která byla zadána v dotazu.

Bohužel ne všechny funkce pro práci s ODBC fungují správně s MS Access, jedná se například o funkce odbc_num_rows a odbc_fetch_array. Takže ve verzi PHP, která je nainstalovaná na mém počítači, PHP obecně zobrazuje zprávu, že funkce odbc_fetch_array mu není známa. Tyto problémy jsou však vyřešeny, pokud jsou popsány a použity následující dvě funkce namísto dříve zmíněných:

funkce xodbc_num_rows($sql_id, $CurrRow = 0)
{
$NumRecords = 0;
odbc_fetch_row($sql_id, 0);
while (odbc_fetch_row($sql_id))
{
$NumRecords++;
}
odbc_fetch_row($sql_id, $CurrRow);
vrátit $NumRecords;
}
function xodbc_fetch_array($result, $rownumber=-1) (
if ($rownumber< 0) {
odbc_fetch_into($výsledek, &$rs);
) jinak (
odbc_fetch_into($výsledek, &$rs, $číslo řádku);
}
foreach ($rs jako $klíč => $hodnota) (
$rs_assoc = $hodnota;
}
return $rs_assoc;
}

$res=odbc_exec($x,"vyberte * z testu");
$cnt=xodbc_num_rows($res);
?>



pro ($i=0;$i<$cnt;$i++) {
$row=xodbc_fetch_array($res,$i+1);
echo" ";
}
?>
f1f2
".$row["f1"]."".$row["f2"]."

Popularita databáze Microsoft Access (http://www.microsoft.com/office/access) je částečně způsobena jejím uživatelsky přívětivým grafickým rozhraním. Kromě použití Accessu jako samostatného DBMS můžete použít jeho grafické rozhraní k organizaci práce s jinými databázemi, jako je MySQL nebo Microsoft SQL Server.

Abych demonstroval podporu ODBC v PHP, popíšu proces připojení k databázím Microsoft Access v PHP. Je to překvapivě snadné, ale díky popularitě Microsoft Access je to vítaný doplněk vašeho kreativního arzenálu. Popíšu tento proces krok za krokem:

  • Vytvořte databázi Accessu. Předpokládá se, že již víte, jak to udělat, a pokud nevíte jak, ale přesto chcete provést tento příklad, použijte služby programu průvodce. Vytvořil jsem standardní databázi kontaktů pomocí průvodce. Nezapomeňte vytvořit několik záznamů v tabulce a zapamatujte si název tabulky, budeme jej brzy potřebovat!
  • Uložte databázi do svého počítače.
  • V dalším kroku zorganizujeme přístup k databázi Access pomocí ODBC. Přejděte na Start > Nastavení > Ovládací panely (Start > Nastavení > Kontrolní panel). Na ovládacím panelu vyhledejte ikonu Zdroje dat ODBC (32 bitů). Tato ikona spustí správce ODBC, který se používá ke konfiguraci různých ovladačů a zdrojů dat ve vašem systému. Spusťte program dvojitým kliknutím na tuto ikonu. Okno správce se ve výchozím nastavení otevře na kartě User DSN (User DSN). Na této kartě jsou uvedeny zdroje dat, které jsou specifické pro uživatele a lze je použít pouze na tomto počítači. Tento příklad bude používat právě takový zdroj dat.
  • Klepněte na tlačítko Přidat... na pravé straně okna. Otevře se nové okno pro výběr ovladače, který bude pracovat s novým zdrojem. Vyberte řádek Microsoft Access Driver (*.mdb) a klepněte na tlačítko Dokončit.
  • Na obrazovce se zobrazí nové okno Microsoft Access ODBC Driver Setup (ODBC Microsoft Access Setup). Vyhledejte textové pole Název zdroje dat ve formuláři a zadejte název databáze Access, kterou jste vytvořili. Volitelně můžete zadat popis do textového pole přímo pod polem Název zdroje dat.
  • Klepněte na tlačítko Vybrat... -- zobrazí se okno ve stylu Průzkumníka Windows. Požádá vás o nalezení databáze, ke které bude přistupovat pomocí ODBC.
  • Vyhledejte svou databázi ve stromu adresářů a dvakrát na ni klikněte. Vrátíte se do okna Instalace ovladače Microsoft Access ODBC. Cesta k vybrané databázi se zobrazí nad tlačítkem Vybrat... Klikněte na OK.
  • Připraveno! Nyní můžete pracovat s databází Access pomocí ODBC.

Stačí si vytvořit skript, ve kterém budete s databází přes ODBC pracovat. Ve skriptu níže budou běžné funkce ODBC (viz výše) použity k zobrazení všech informací v tabulce kontaktů vytvořené pomocí průvodce Access. Než se však podíváte na scénář, je dobré vědět, jak vypadá tabulka Kontakty v Accessu (obrázek 11-3).



Rýže. 11.3.Tabulka kontaktů v MS Access

Nyní, když víte, jaké informace budou z databáze načteny, můžeme přejít ke skriptu. Pokud jste zapomněli, co konkrétní funkce dělá, podívejte se na popis na začátku této kapitoly. Výsledky výpisu 11.7 jsou zobrazeny na obrázku 1. 11.4.

Výpis 11.7.Použití funkcí ODBC pro práci s MS Access

// Připojení ke zdroji dat ODBC "ContactDB" ;connect = odbc_connect("ContactDB", "","")

or die("Nelze se připojit ke zdroji dat.");

// Vytvořte text požadavku

$query = "VYBRAT Jméno, Příjmení, Mobilní_Telefon, E-mail Z kontaktů";

// Připravit požadavek

$vysledek = odbc_prepare($připojit,$dotaz);

// Provede dotaz a zobrazí výsledky

odbc_execute($vysledek);

odbc_result_all($result, "BGCOLOR="#c0c0c0" border=1");

// Zpracování výsledků dokončeno, uvolněte paměť odbc_free_result($result);

// Zavřít připojení odbc_close($connect);

Není to všechno jednoduché? A skvělé je, že tento skript je plně kompatibilní s jakýmkoli jiným DBMS s podporou ODBC. Pro procvičení zkuste zopakovat všechny popsané kroky pro jiný DBMS, spusťte skript – a dostanete stejné výsledky jako na Obr. 11.4.

Rýže. 11.4.Obsah tabulky Kontakty ve webovém prohlížeči

Také mám problém se vzdálenou databází Microsoft Access. Jen báze se mi docela ubírá. Nachází se pouze v lokální síti, na jiném počítači.

Ve funkci odbc_connect mi PHP dává následující chybu:
Upozornění: odbc_connect() : Chyba SQL: [Ovladač ODBC pro Microsoft Access] Aplikaci nelze spustit. Systémová databáze chybí nebo byla otevřena s výhradním přístupem jiným uživatelem.

K tomu dochází, když v mém systému Windows, na mém místním počítači, v ovladači ODBC, ve vlastnostech "Zdroj dat", na kartě "Systémové DSN", uvedu, že "Systémová databáze" (soubor pracovní skupiny - system.mdw ) je na síťovém disku. Jakmile ten samý soubor přenesu na lokální disk svého počítače (kam sám sedím), tak vše začne fungovat v pořádku. Nemůžu přijít na to, co je špatně. Řekni mi prosím! Ovladač ODBC z nějakého důvodu tvrdošíjně odmítá vidět soubor pracovní skupiny na sdílené síťové jednotce. A pokud spis sedi lokalne, tak vsechno ore s rachotem. Co může být špatně? Mimochodem, totéž se děje se samotnou základnou. Obecně platí, že pro správné fungování odbc_connect se ukazuje, že jak „Soubor pracovní skupiny“, tak samotná databáze musí být umístěny na místním počítači. Ale to já neumím. Základna by měla zůstat tam, kde je. A musím se k ní dostat na dálku přes ODBC a poslat na stránku webu na internet trochu informací z databáze. Nechápu, proč to neorá. V nastavení ODBC můžete normálně zadat všechny cesty ke vzdáleným databázovým souborům. Ale poté už neorá. Na místním počítači se všechno ore.

Na místním počítači je:
Operační systém WinXP-SP2
Microsoft Access 97
PHP v5.2.3
ODBC v3.5
Appserver v2.5.5

Na vzdáleném počítači je "dvoutisícový" server.
Říkal jsem si, že možná něco s přístupem neorá a s bezpečnostní politikou. Ale přenesl jsem databáze na běžný počítač, pod operačním systémem Win 98 a na pevný disk pod FAT32. Tam se také neorá. Už jsem vyčerpaný, nechápu, co se děje. Člověk má dojem, že ODBS vůbec neumí pracovat se vzdálenými databázemi. Ale není to tak. Mělo by to orat kohokoli. Pomoc, pliiz!

-~{}~ 17.01.08 10:30:

Dobře, problém vyřešen! Hurá soudruzi!

Každopádně jsem našel text na můj dotaz:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=251&page=560
Je to spodní příspěvek. Pro ty, kteří jsou příliš líní se do toho nabourat, zde jsou doslovná autorská práva k tomuto příspěvku:
"Pokud tomu dobře rozumím, pracujeme pod okny. Stiskněte Ctrl + Alt + Del, vyberte správce úloh a podívejte se na proces Apache. A vidíme, že běží jménem SYSTEM, a ne vaším jménem. Takže můžeme 't dosáhnout síťových zdrojů. Takže to ošetříme spuštěním procesu na požadovaném názvu."

Spustil jsem jménem uživatele Apache a vše začalo s rachotem orat.

Pravda, k jednomu přepadení došlo. ODBC připojení k databázi musí být zapsáno ručně do programového kódu následujícím způsobem:
Odbc_Connect("DRIVER=(Microsoft Access Driver (*.mdb)); DBQ=//server/work/baza/mybaza.mdb; systemdb=//server/work/baza/system.mda", "username", " heslo") nebo Die("Nelze se připojit k databázi");

Pokud je příliš mnoho na to, aby se přes šroub "Administrator ODBC", všichni stejně nebude orat. Správce vytváří cesty přes názvy disků. Tedy tímto způsobem:
"Z:\práce\základna"
a potřebuji, aby cesta byla síťová, bez písmene jednotky a se zpětnými lomítky:
"//server/work/base/"

Zde je další příklad vysvětlující tuto novou přepadení.
K počítači máme připojený síťový disk "Z:\work\baza". Toto je úplná analogie síťové cesty "//server/work/baza/"
Napíšeme nejjednodušší programový kód v PHP pro otevření vzdáleného adresáře. Bez jakéhokoli ODBC. Abyste si mohli jednoduše zkontrolovat, zda orá nebo neorá:
OpenDir("Z:\work\base"); //vypíše chybovou zprávu
OpenDir("//server/work/base/"); // žádná chyba

Zde je moje nová otázka. Co dělám špatně? Z nějakého důvodu nebude možné použít Windows "ODBC Administrator" pro připojení síťových prostředků, nebo je to ještě nějak možné? Opakuji, přepadení nyní zůstává pouze se správným pravopisem cest k síťovým zdrojům. Možná je za tento okamžik zodpovědné nějaké samostatné nastavení samotného PHP rozhraní?