<?php
// ------------------------------------------------------------------------- //
// Conversion ACCESS => MySQL //
// ------------------------------------------------------------------------- //
// Auteur: Hello / Sector One <hello@chez.com> //
// Web: http://hellosct1.free.fr/index.html //
// ------------------------------------------------------------------------- //
/*
Un convertisseur semi-automatique d'une base de données MS ACCESS vers une base
de données MySQL.
*/
$user="root"; // login
$password=""; // password
$text_error_connection="Impossible d'ouvrir $bd dans odbc_connect";
$text_error_structure_mdb= "Erreur dans la table MS ACCESS";
$text_error_structure_sql= "Erreur dans la table SQL";
$text_error_connect= "Connection impossible";
$text_error_ajout= "Impossible d'ajouter";
/** MySQL settings */
$cfgColumnTypes = array(
'TINYINT',
'SMALLINT',
'MEDIUMINT',
'INT',
'BIGINT',
'FLOAT',
'DOUBLE',
'DECIMAL',
'DATE',
'DATETIME',
'TIMESTAMP',
'TIME',
'YEAR',
'CHAR',
'VARCHAR',
'TINYBLOB',
'TINYTEXT',
'TEXT',
'BLOB',
'MEDIUMBLOB',
'MEDIUMTEXT',
'LONGBLOB',
'LONGTEXT',
'ENUM',
'SET'
);
// Atributes
$cfgAttributeTypes = array(
'',
'BINARY',
'UNSIGNED',
'UNSIGNED ZEROFILL'
);
switch($action)
{
case "Convertir une nouvelle table":
$etape=1;
break;
case "Suite":
$etape=2;
break;
case "Convertion":
$etape=3;
function Error_Handler( $msg, $cnx ) // recupere les erreurs
{
echo "$msg <br>";
odbc_close( $cnx);
exit();
}
$codeligne=strlen($nligne)+1; // determine position longueur
//-----------------------------------------------------
$db_link = mysql_connect($serveur,$user,$password);
if (!$db_link) Error_handler($text_error_connect , $db_link );
mysql_create_db( $db, $db_link ); // creation SQL
$query = "CREATE TABLE $nomtable ("; // prepare creation table
for ($i=0;$i<$nligne;$i++)
{
$name=str_pad("n", $codeligne, $i, STR_PAD_RIGHT);
$rname=$HTTP_GET_VARS[$name];
$type=str_pad("t", $codeligne, $i, STR_PAD_RIGHT);
$rtype=$HTTP_GET_VARS[$type];
$long=str_pad("l", $codeligne, $i, STR_PAD_RIGHT);
$rlong=$HTTP_GET_VARS[$long];
$attributs=str_pad("a", $codeligne, $i, STR_PAD_RIGHT);
$rattributs=$HTTP_GET_VARS[$attributs];
$cnull=str_pad("c", $codeligne, $i, STR_PAD_RIGHT);
$rcnull=$HTTP_GET_VARS[$cnull];
$defaut=str_pad("d", $codeligne, $i, STR_PAD_RIGHT);
$rdefaut=$HTTP_GET_VARS[$defaut];
$extra=str_pad("e", $codeligne, $i, STR_PAD_RIGHT);
$rextra=$HTTP_GET_VARS[$extra];
if (!empty($name))
{
$query .= $rname.' '.$rtype.' '.$rlong.' '.$rattributs.' '.$rcnull.' '.$rdefaut.' '.$rextra;
$tligne=$nligne-1;
if ($i != $tligne) $query .= ",";
}
}
$query .= ");";
mysql_select_db( $db, $db_link ); // execute creation Table
mysql_query( $query, $db_link );
//----------------------------------------------
// ouvre la Base de donnees
$cnx = odbc_connect( $db , $user, $password );
ACCESS
if( ! $cnx ) Error_handler($text_error_connection , $cnx );
// verifie la structure table
$valeur= odbc_exec( $cnx, "select * from $nomtable" );
ACCESS
if( ! $valeur ) Error_handler( $text_error_structure , $cnx );
// selectionne table
$requete=mysql_db_query($db,"select * from $nomtable ",$db_link);
SQL
if (!$requete) Error_handler( $text_error_structure , $cnx );
// lis les données ACCESS
while( odbc_fetch_row( $valeur ) )
{
// creation 1ere partie INSERT
$compteur++;
$query="insert into $nomtable (";
for ($i=0;$i<$nligne;$i++)
{
$name=str_pad("n", $codeligne, $i, STR_PAD_RIGHT);
$rname=$HTTP_GET_VARS[$name];
$query .= "$rname";
$tligne=$nligne-1;
if ($i != $tligne) $query .= ",";
}
// creation 2e partie INSERT
$query .= ") values (";
for ($i=0;$i<$nligne;$i++)
{
$j=$i+1;
$result_odbc = odbc_result( $valeur, $j );
$query .="'$result_odbc'";
$tligne=$nligne-1;
if ($i != $tligne) $query .= ",";
}
// ferme l'insertion
$query .=")";
$resul=mysql_query($query);
if (!$resul) Error_handler($text_error_ajout , $cnx );
}
//----------------------------------------------
odbc_close( $cnx); // ferme la connection ODBC
mysql_close( $db_link); // ferme la connection SQL
break;
default:
$etape=1;
break;
}
?>
<html>
<head><head>
<body>
<center>
<h1><i>CONVERTION ACCESS => SQL </i><br>Version 1.00</h1>
<b>(c) HELLO / SECTOR ONE - 2001 </b>
</center><BR><hr>
<?
if ($etape==1)
{
?>
<font size="4"><b>PREPARATION : </b></font>
Installation sous Microsoft Windows d'une base de donnée MS ACCESS
<br>
<i> - Panneau de configuration<br>
- Sources de donnees ODBC (32 bits)<br>
- Onglet DSN systeme<br>
- Selectionner le chemin<br>
- Nom de la source : catmdb</i><br><br>
<hr>
<font size="4"><b>ETAPE 1/2 : </b></font><br>
<FORM action="index.php" method="GET">
Nom de la base de donnée
<INPUT TYPE="TEXT" name="db"> <i>Exemple : catmdb</i>
<br>
Nom de la table
<input type="text" name="nomtable"> <i>Exemple : pdt </i>
<br>
Nombre de champ
<input type="text" name="nligne"> <i>Exemple : 5 </i>
<br><br>
<INPUT TYPE="SUBMIT" name="action" value="Suite">
</form>
<?
}
?>
<?
if ($etape==2)
{
?>
<font size="4"><b>ETAPE 2/2 : </b></font><br>
<FORM action="index.php" method="GET">
<input type="hidden" name="nligne" value="<? echo $nligne; ?>">
<input type="hidden" name="db" value="<? echo $db; ?>">
<input type="hidden" name="nomtable" value="<? echo $nomtable; ?>">
<br>
<table width="100%" border="0">
<tr>
<td>
<div align="center">Repere</div>
</td>
<td>
<div align="center">Champ</div>
</td>
<td>
<div align="center">Type</div>
</td>
<td>
<div align="center">Longueur</div>
</td>
<td>
<div align="center">Attributs</div>
</td>
<td>
<div align="center">Null</div>
</td>
<td>
<div align="center">Défaut</div>
</td>
<td>
<div align="center">Extra</div>
</td>
</tr>
<?
$i=0;
while($i<$nligne)
{
echo " <tr>";
$j=$i+1;
echo "<td><div align=center>$j</div></td>";
$name=str_pad("n", 2, $i, STR_PAD_RIGHT);
echo "<td> <input type=\"text\" name=\"$name\"> </td>";
$type=str_pad("t", 2, $i, STR_PAD_RIGHT);
echo "<td><select name=\"$type\">";
for ($p=0;$p<count ($cfgColumnTypes);$p++)
echo "<option value=$cfgColumnTypes[$p]>$cfgColumnTypes[$p]</option>";
echo "</select></td>";
$long=str_pad("l", 2, $i, STR_PAD_RIGHT);
echo "<td> <input type=\"longueur\" name=\"$long\"> </td>";
$attributs=str_pad("a", 2, $i, STR_PAD_RIGHT);
echo "<td><select name=\"$attributs\">";
for ($p=0;$p<count ($cfgAttributeTypes);$p++)
echo "<option value=$cfgAttributeTypes[$p]>$cfgAttributeTypes[$p]</option>";
echo "</select></td>";
$cnull=str_pad("c", 2, $i, STR_PAD_RIGHT);
echo "<td><select name=\"$cnull\">";
echo "<option value=\"NULL\">null</option>";
echo "<option value=\"NOT NULL\">not null</option>";
echo "</select></td>";
$defaut=str_pad("d", 2, $i, STR_PAD_RIGHT);
echo "<td> <input type=\"defaut\" name=\"$defaut\"> </td>";
$extra=str_pad("e", 2, $i, STR_PAD_RIGHT);
echo "<td><select name=\"$extra\">";
echo "<option value=\" \"> </option>";
echo "<option value=\"auto_increment\">auto_increment</option>";
echo "</select></td>";
echo "</tr>";
$i++;
}
?>
</table>
<br>
<INPUT TYPE="SUBMIT" name="action" value="Convertion">
</form> <br>
<br>
<i>Exemple de saisies</i><br>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td>
<div align="center"><i>Repere</i></div>
</td>
<td>
<div align="center"><i>Champ</i></div>
</td>
<td>
<div align="center"><i>Type</i></div>
</td>
<td>
<div align="center"><i>Longueur</i></div>
</td>
<td>
<div align="center"><i>Attributs</i></div>
</td>
<td>
<div align="center"><i>Null</i></div>
</td>
<td>
<div align="center"><i>Défaut</i></div>
</td>
<td>
<div align="center"><i>Extra</i></div>
</td>
</tr>
<tr>
<td>
<div align="center"><i>1</i></div>
</td>
<td>
<div align="center"><i>idproduit</i></div>
</td>
<td>
<div align="center"><i>int</i></div>
</td>
<td>
<div align="center"><i>11</i></div>
</td>
<td>
<div align="center"> </div>
</td>
<td>
<div align="center"><i>Null</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
</tr>
<tr>
<td>
<div align="center"><i>2</i></div>
</td>
<td>
<div align="center"><i>nom</i></div>
</td>
<td>
<div align="center"><i>text</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i>Null</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
</tr>
<tr>
<td>
<div align="center"><i>3</i></div>
</td>
<td>
<div align="center"><i>liens</i></div>
</td>
<td>
<div align="center"><i>text</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i>Null</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
</tr>
<tr>
<td>
<div align="center"><i>4</i></div>
</td>
<td>
<div align="center"><i>descriptif</i></div>
</td>
<td>
<div align="center"><i>text</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i>Null</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
</tr>
<tr>
<td>
<div align="center"><i>5</i></div>
</td>
<td>
<div align="center"><i>photo</i></div>
</td>
<td>
<div align="center"><i>text</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i>Null</i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
<td>
<div align="center"><i> </i></div>
</td>
</tr>
</table>
<?
}
?>
<?
if ($etape==3)
{
?>
<center><h1>La convertion c'est correctement déroulé</h1>
<br>
<br><br>
<FORM action="index.php" method="GET">
<INPUT TYPE="SUBMIT" name="action" value="Convertir une nouvelle table">
</form> </center> <br>
<?
}
?>
<br>
<br><table width="100%" border="1" cellspacing="1" cellpadding="1">
<tr>
<td><i>Pour avoir l'exemple complet :</i> <a
href="http://hellosct1.free.fr/index.html"
target="_blank">http://hellosct1.free.fr/index.html</a><br>
<i>Pour utiliser le langage PHP 4.x + la norme ODBC :</i> <a
href="http://www.catmdb.fr.st" target="_blank">http://www.catmdb.fr.st</a><br>
<br>
<i>Pour me contacter :</i>
<a href="mailto:hello@chez.com">hello@chez.com</a></td>
</tr>
</table>
</body>
</html>