<?php

/**
 * @page connexion_microsoft_acccess.php
 * @brief Exemple de connexion à une base Microsoft Access (2 méthodes)
 *
 * @author hughes monget
 * @see http://monget.com/
 */

highlight_file(__FILE__);

echo 
'<hr />';

echo 
'<pre>';

$str_chemin_base dirname(__FILE__).DIRECTORY_SEPARATOR.'bd_test.mdb';

if (!
is_file($str_chemin_base))
{
    exit(
'fichier base de données non trouvée');
}

// ---------------------------------------------------------------------
// Méthode 1: avec le module ODBC mais sans lien ODBC
// http://www.web-max.ca/PHP/odbc_1.php

$str_dsn 'DRIVER={Microsoft Access Driver (*.mdb)}; DBQ='.$str_chemin_base;

$res_connexion odbc_connect($str_dsn'''');

if (!
$res_connexion)
{
    exit(
'problème de connexion à la base de données');
}

$str_sql 'select * from table_test';

$res_resulset odbc_exec($res_connexion$str_sql);

if (!
$res_resulset)
{
    exit(
'problème de requête sql');
}

while (
$arr_mix_ligne odbc_fetch_array($res_resulset))
{
    echo 
$arr_mix_ligne['libelle'].'<br />';
}

odbc_free_result($res_resulset);

odbc_close($res_connexion);

// ---------------------------------------------------------------------
// Méthode 2: avec l'objet COM "ADODB.Connection".
// http://code.activestate.com/recipes/163447-microsoft-access-database-connectivity-dsn-less/

$obj_connection = new COM('ADODB.Connection');

if (!
$obj_connection)
{
    exit(
'Cannot start ADO.');
}

try
{
    
$obj_connection->Open('Provider=Microsoft.Jet.OLEDB.4.0; Data Source='.$str_chemin_base);
}
catch (
com_exception $e)
{
    exit(
'Cannot open with Jet.');
}

echo 
'<hr />';

$obj_resulset $obj_connection->Execute($str_sql);

if (!
$obj_resulset)
{
    exit(
'SQL problem.');
}

while (!
$obj_resulset->EOF)
{
    echo 
$obj_resulset->Fields['libelle']->Value.'<br />';
    
$obj_resulset->MoveNext();
}

$obj_resulset->Close();

$obj_connection->Close();

echo 
'</pre>';