cs_gohan971
Messages postés2Date d'inscriptionmardi 11 janvier 2005StatutMembreDernière intervention15 novembre 2007
-
15 nov. 2007 à 21:28
cs_gerald57
Messages postés6Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention21 mai 2008
-
21 mai 2008 à 14:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_gerald57
Messages postés6Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention21 mai 2008 21 mai 2008 à 14:57
Purée par contre chez moi a partir de la 72 eme tables il me remet:
string(22) "RDB$CHARACTER_SET_NAME" string(15) "RDB$FORM_OF_USE" Insertion impossible : Unknown column 'IDTYPEPOUDRE' in 'field list'
Requete : INSERT INTO `TYPEPOUDRE` SET `IDTYPEPOUDRE`='1' , `LIBELLETYPEPOUDRE`='Coussinet'
C PAS ENCOR FINI AHAHAHAH
Lomendil
Messages postés17Date d'inscriptionsamedi 23 août 2003StatutMembreDernière intervention21 mai 2008 21 mai 2008 à 14:10
Super :)
et merci pour ceux que ?a pourrait interesser. (je laisse tomber les accents, apparemment j'ai pas de succes avec eux :p)
cs_gerald57
Messages postés6Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention21 mai 2008 21 mai 2008 à 08:27
Voici le code retouché, j ai juste adapté la connexion pour une connexion ODBC et j'ai utilisé COLUMN NAME pour réccuperer le nom des colonnes.
<?php
#######################################################
# SCRIPT DE CONVERSION DE BDD #
# INTERBASE -> MYSQL #
# le 19/05/2008 par Gérald GAIGA #
#######################################################
#FONCTIONS
function TypeChamp ($champ,$taille) {
switch ($champ) {
case 7:
return array('SMALLINT',$taille);
break;
case 8:
return array('INT',$taille);
break;
case 16:
return array('BIGINT',$taille);
break;
case 10:
return array('FLOAT','');
break;
case 11:
//return 'D_Float';
return 'erreur';
break;
case 27:
return array('DOUBLE','');
break;
case 9:
//return 'Quad';
return 'erreur';
break;
case 14:
return array('CHAR',$taille);
break;
case 37:
return array('VARCHAR',$taille);
break;
case 40:
//return 'CString';
return 'erreur';
break;
case 13:
return array('TIME','');
break;
case 12:
return array('DATE','');
break;
case 35:
return array('TIMESTAMP','');
break;
case 261:
return array('BLOB','');
break;
}
}
#FIN FONCTIONS
#PARAMETRES
//C'est ici que vous devez entrer les paramètres de connexions aux BDD InterBase et MySQL
//Assurez-vous d'avoir un serveur InterBase (ex: Firebird) et MySQL (ex: EasyPHP, WAMP) en activité.
//PARAMETRES INTERBASE
$hote = 'SIC'; //nom du dsn
$utilisateur = 'SYSDBA'; //User par défaut
$passe ='syscreas'; //Pass par défaut
$bdd_interbase = odbc_connect($hote, $utilisateur, $passe, 'IscDbc'); //Connexion
//PARAMETRES MYSQL
$hote_mysql = 'localhost';
$utilisateur_mysql = 'admin';
$passe_mysql = '123456';
$nom_mysql = 'test'; //Nom de la BDD MySQL
$bdd_mysql = mysql_connect($hote_mysql,$utilisateur_mysql,$passe_mysql);
mysql_select_db($nom_mysql,$bdd_mysql);
#FIN PARAMETRES
//ON PARCOURT LA BDD INTERBASE
$requete = 'SELECT DISTINCT rdb$relation_name FROM rdb$relation_fields
WHERE rdb$view_context IS NULL
AND rdb$system_flag = 0 and rdb$relation_name <> \'RECEPTIONCOLIS\' and rdb$relation_name <> \'REUNION\'and rdb$relation_name <> \'SOCIETE\'and rdb$relation_name <> \'STATUT_ACTEUR\'and rdb$relation_name <> \'STOCKAGE\'and rdb$relation_name <> \'SUITHABILITATION\'and rdb$relation_name <> \'TASKS\''; //Injection de la requête permettant de récupérer les tables
$resultat = odbc_do($bdd_interbase, $requete);
//Récupérer le noms des champs
//Initialisation
$k=0;
//Connection
$result = odbc_columns($bdd_interbase, $hote, "", "%");
//Récupération du nom des colonnes
while (odbc_fetch_row($result)) {
$tablechamp[$k]= odbc_result($result,"COLUMN_NAME");
$k++;
}
//Boucle
$i=0;
while ($ligne = odbc_fetch_array($resultat)) {
foreach ($ligne AS $table) {
echo "
".$table."
";
$req_struc_table = 'SELECT *
FROM rdb$relations rel
JOIN rdb$relation_fields rel_field
ON rel_field.rdb$relation_name = rel.rdb$relation_name
JOIN rdb$fields field
ON rel_field.rdb$field_source = field.rdb$field_name
WHERE rel.rdb$relation_name = \''.$table.'\'
ORDER BY rel_field.rdb$field_position, rel_field.rdb$field_name';
$res_struc_table = odbc_do($bdd_interbase,$req_struc_table);
//initialisation
//Construction de la requête de création de la table
cs_gerald57
Messages postés6Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention21 mai 2008 20 mai 2008 à 19:24
bonjour,
Je crois bien avoir trouvé le probleme, des demain je poste ma soluce je pense
Lomendil
Messages postés17Date d'inscriptionsamedi 23 août 2003StatutMembreDernière intervention21 mai 2008 20 mai 2008 à 17:58
Le meilleur conseil que je puisse te donner est de faire des echo un peu partout pour rep?rer ? quel endroit ?a coince vraiment.
Dis moi ensuite si c'est bien un probl?me d'interpr?tation de variable (texte brut au lieu du contenu de la variable), nous pourrons ensuite voir comment solutionner le probl?me.
cs_gerald57
Messages postés6Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention21 mai 2008 20 mai 2008 à 09:28
salut urbanik,
Merci beaucoup pour cette solution mais je suis obligé de gérer cela avec un script car je suis connecté à interbase par ODBC et en fait à chaque ouverture de ma base mysql mon script doit effacer toute les tables mysql et réimporter les nouvelles depuis interbase.
Il me faut donc impérativement résoudre le probleme du script.
En tout cas merci pour ta réponse
urbanik
Messages postés3Date d'inscriptionmardi 19 novembre 2002StatutMembreDernière intervention20 mai 2008 20 mai 2008 à 08:57
Salut, alors moi j'ai trouvé une autre solution, c'est un logiciel qui s'appelle FULLCONVERT (si tu veux contact moi et je te fourni le logiciel)
cs_gerald57
Messages postés6Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention21 mai 2008 20 mai 2008 à 08:24
bonjour lomendil et merci d'avoir répondu,
J'ai testé avec les accolades mais toujours rien, peux tu essayé de m'aider stp car je débute et ton script est important pour mon stage.
Lomendil
Messages postés17Date d'inscriptionsamedi 23 août 2003StatutMembreDernière intervention21 mai 2008 19 mai 2008 à 12:14
Ce script m'est un peu sorti de la t?te, mais je pense qu'il faut regarder autour de $tab_struc_table['RDB$FIELD_NAME'].
Peut-?tre que tu peux solutionner le probl?me avec des accolades ({}) pour ?tre s?r que le nom du champ est bien appel? plut?t que ce soit g?r? en texte brut.
cs_gerald57
Messages postés6Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention21 mai 2008 19 mai 2008 à 10:44
Bonjour,
Lorque j'execute le script, dans le nom des champs il me met RDB$557,RDB$558...
et pourtant ma connexion est bonne.
Lomendil
Messages postés17Date d'inscriptionsamedi 23 août 2003StatutMembreDernière intervention21 mai 2008 12 févr. 2008 à 20:36
Est-ce que tu as pu vérifier que la connexion à Interbase et MySQL se faisait bien ?
Et sinon, peux-tu en dire plus ?
urbanik
Messages postés3Date d'inscriptionmardi 19 novembre 2002StatutMembreDernière intervention20 mai 2008 12 févr. 2008 à 11:26
Ne marche pas !
Lorsqu'il crée la table, il met des RDB$7 au lieu des noms de champs
cs_gohan971
Messages postés2Date d'inscriptionmardi 11 janvier 2005StatutMembreDernière intervention15 novembre 2007 15 nov. 2007 à 21:28
21 mai 2008 à 14:57
string(22) "RDB$CHARACTER_SET_NAME" string(15) "RDB$FORM_OF_USE" Insertion impossible : Unknown column 'IDTYPEPOUDRE' in 'field list'
Requete : INSERT INTO `TYPEPOUDRE` SET `IDTYPEPOUDRE`='1' , `LIBELLETYPEPOUDRE`='Coussinet'
C PAS ENCOR FINI AHAHAHAH
21 mai 2008 à 14:10
et merci pour ceux que ?a pourrait interesser. (je laisse tomber les accents, apparemment j'ai pas de succes avec eux :p)
21 mai 2008 à 08:27
<?php
#######################################################
# SCRIPT DE CONVERSION DE BDD #
# INTERBASE -> MYSQL #
# le 19/05/2008 par Gérald GAIGA #
#######################################################
#FONCTIONS
function TypeChamp ($champ,$taille) {
switch ($champ) {
case 7:
return array('SMALLINT',$taille);
break;
case 8:
return array('INT',$taille);
break;
case 16:
return array('BIGINT',$taille);
break;
case 10:
return array('FLOAT','');
break;
case 11:
//return 'D_Float';
return 'erreur';
break;
case 27:
return array('DOUBLE','');
break;
case 9:
//return 'Quad';
return 'erreur';
break;
case 14:
return array('CHAR',$taille);
break;
case 37:
return array('VARCHAR',$taille);
break;
case 40:
//return 'CString';
return 'erreur';
break;
case 13:
return array('TIME','');
break;
case 12:
return array('DATE','');
break;
case 35:
return array('TIMESTAMP','');
break;
case 261:
return array('BLOB','');
break;
}
}
#FIN FONCTIONS
#PARAMETRES
//C'est ici que vous devez entrer les paramètres de connexions aux BDD InterBase et MySQL
//Assurez-vous d'avoir un serveur InterBase (ex: Firebird) et MySQL (ex: EasyPHP, WAMP) en activité.
//PARAMETRES INTERBASE
$hote = 'SIC'; //nom du dsn
$utilisateur = 'SYSDBA'; //User par défaut
$passe ='syscreas'; //Pass par défaut
$bdd_interbase = odbc_connect($hote, $utilisateur, $passe, 'IscDbc'); //Connexion
//PARAMETRES MYSQL
$hote_mysql = 'localhost';
$utilisateur_mysql = 'admin';
$passe_mysql = '123456';
$nom_mysql = 'test'; //Nom de la BDD MySQL
$bdd_mysql = mysql_connect($hote_mysql,$utilisateur_mysql,$passe_mysql);
mysql_select_db($nom_mysql,$bdd_mysql);
#FIN PARAMETRES
//ON PARCOURT LA BDD INTERBASE
$requete = 'SELECT DISTINCT rdb$relation_name FROM rdb$relation_fields
WHERE rdb$view_context IS NULL
AND rdb$system_flag = 0 and rdb$relation_name <> \'RECEPTIONCOLIS\' and rdb$relation_name <> \'REUNION\'and rdb$relation_name <> \'SOCIETE\'and rdb$relation_name <> \'STATUT_ACTEUR\'and rdb$relation_name <> \'STOCKAGE\'and rdb$relation_name <> \'SUITHABILITATION\'and rdb$relation_name <> \'TASKS\''; //Injection de la requête permettant de récupérer les tables
$resultat = odbc_do($bdd_interbase, $requete);
//Récupérer le noms des champs
//Initialisation
$k=0;
//Connection
$result = odbc_columns($bdd_interbase, $hote, "", "%");
//Récupération du nom des colonnes
while (odbc_fetch_row($result)) {
$tablechamp[$k]= odbc_result($result,"COLUMN_NAME");
$k++;
}
//Boucle
$i=0;
while ($ligne = odbc_fetch_array($resultat)) {
foreach ($ligne AS $table) {
echo "
".$table."
";
$req_struc_table = 'SELECT *
FROM rdb$relations rel
JOIN rdb$relation_fields rel_field
ON rel_field.rdb$relation_name = rel.rdb$relation_name
JOIN rdb$fields field
ON rel_field.rdb$field_source = field.rdb$field_name
WHERE rel.rdb$relation_name = \''.$table.'\'
ORDER BY rel_field.rdb$field_position, rel_field.rdb$field_name';
$res_struc_table = odbc_do($bdd_interbase,$req_struc_table);
//initialisation
//Construction de la requête de création de la table
$req_create_table = "CREATE TABLE `".trim($table)."` (";
while ($tab_struc_table = odbc_fetch_array($res_struc_table) ) {
$struct_champ = TypeChamp($tab_struc_table['RDB$FIELD_TYPE'],$tab_struc_table['RDB$FIELD_LENGTH']);
if ($prem) {
$req_create_table .= " , ";
} else { $prem = 1; }
echo($tablechamp[$i]);
$req_create_table .= "`".trim($tablechamp[$i])."` ".$struct_champ[0];
if ($struct_champ[1]) {
$req_create_table .= "(".$struct_champ[1].")";
}
if ($tab_struc_table['RDB$NULL_FLAG'] == 0) {
$req_create_table .= " NULL";
} else {
$req_create_table .= " NOT NULL";
}
$i++;
}
$req_create_table .") ENGINE MyISAM";
unset($prem);
mysql_query($req_create_table) or die ("Impossible de créer la table : ".mysql_error()."
Requete : ".$req_create_table);
odbc_free_result($res_struc_table);
$requete2 = 'SELECT * FROM '.$table; //On récupère les champs de la table et leurs valeurs
$resultat2 = odbc_do($bdd_interbase, $requete2);
while ($ligne2 = odbc_fetch_array($resultat2)) {
//Construction de la requête d'insertion des données
$req_insert = "INSERT INTO `".trim($table)."` SET ";
foreach ($ligne2 AS $champ => $valeur) {
if ($prem) {
$req_insert .= " , ";
} else { $prem = 1; }
#Correction des valeurs texte
$valeur = str_replace("\'","'",$valeur);
$valeur = utf8_decode($valeur);
$req_insert .= "`".$champ."`='".addslashes($valeur)."'";
}
unset($prem);
mysql_query($req_insert) or die ("Insertion impossible : ".mysql_error()."
Requete : ".$req_insert);
}
odbc_free_result($resultat2);
}
}
odbc_free_result($resultat);
odbc_close($bdd_interbase);
?>
20 mai 2008 à 19:24
Je crois bien avoir trouvé le probleme, des demain je poste ma soluce je pense
20 mai 2008 à 17:58
Dis moi ensuite si c'est bien un probl?me d'interpr?tation de variable (texte brut au lieu du contenu de la variable), nous pourrons ensuite voir comment solutionner le probl?me.
20 mai 2008 à 09:28
Merci beaucoup pour cette solution mais je suis obligé de gérer cela avec un script car je suis connecté à interbase par ODBC et en fait à chaque ouverture de ma base mysql mon script doit effacer toute les tables mysql et réimporter les nouvelles depuis interbase.
Il me faut donc impérativement résoudre le probleme du script.
En tout cas merci pour ta réponse
20 mai 2008 à 08:57
20 mai 2008 à 08:24
J'ai testé avec les accolades mais toujours rien, peux tu essayé de m'aider stp car je débute et ton script est important pour mon stage.
19 mai 2008 à 12:14
Peut-?tre que tu peux solutionner le probl?me avec des accolades ({}) pour ?tre s?r que le nom du champ est bien appel? plut?t que ce soit g?r? en texte brut.
19 mai 2008 à 10:44
Lorque j'execute le script, dans le nom des champs il me met RDB$557,RDB$558...
et pourtant ma connexion est bonne.
12 févr. 2008 à 20:36
Et sinon, peux-tu en dire plus ?
12 févr. 2008 à 11:26
Lorsqu'il crée la table, il met des RDB$7 au lieu des noms de champs
15 nov. 2007 à 21:28