IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

importation de table, interbase vers mysql


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 153
    Points
    153
    Par défaut importation de table, interbase vers mysql
    bonjour j'ai un script qui doit m'importer 140 tables de INTERBASE vers mysql, tout fonctionne bien sauf une fois arrivé à la 72eme tables voici mon code et le message d'erreur en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
     
    <?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
      mysql_query('DROP DATABASE test');
     mysql_query( "CREATE DATABASE test");
     
      $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 <> \'REUNION\'and rdb$relation_name <> \'STATUT_ACTEUR\'and rdb$relation_name <> \'SOCIETE\'and rdb$relation_name <> \'SUITHABILITATION\'and rdb$relation_name <> \'TASKS\'and rdb$relation_name <> \'STOCKAGE\'and rdb$relation_name <> \'TAUXDEPANNE\'and rdb$relation_name <> \'TAUX\'and rdb$relation_name <> \'TACHE\'and rdb$relation_name <> \'TASKSPREDECESSORS\'and rdb$relation_name <> \'TASKSRESOURCES\'and rdb$relation_name <> \'TPM\'and rdb$relation_name <> \'TREMPLIN_MARCHE\'and rdb$relation_name <> \'TREMPLIN_SOCIETE\'and rdb$relation_name <> \'TYPEAT\'and rdb$relation_name <> \'TYPEBARRE\'and rdb$relation_name <> \'TYPEDEPENSE\'and rdb$relation_name <> \'TYPEEMPL\'and rdb$relation_name <> \'TYPEEPROUVETTE\'and rdb$relation_name <> \'TYPELOPIN\'and rdb$relation_name <> \'TYPEMETAL\'and rdb$relation_name <> \'TYPEPIECE\'and rdb$relation_name <> \'TYPEPOUDRE\'and rdb$relation_name <> \'TYPE_PROJET\'and rdb$relation_name <> \'UTILISATEUR\''; //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 "<br><b>".$table."</b><br>";
        $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(var_dump($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()."<br>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()."<br>Requete : ".$req_insert);
     
           }
           odbc_free_result($resultat2);
        }
      }
      odbc_free_result($resultat);
      odbc_close($bdd_interbase);
     
    ?>
    ET le message qui est un var_dump:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RECEPTIONCOLIS 
    string(22) "RDB$CHARACTER_SET_NAME" string(15) "RDB$FORM_OF_USE" string(24) "RDB$NUMBER_OF_CHARACTERS" string(24) "RDB$DEFAULT_COLLATE_NAME" string(20) "RDB$CHARACTER_SET_ID" string(15) "RDB$SYSTEM_FLAG" string(15) "RDB$DESCRIPTION" string(17) "RDB$FUNCTION_NAME" Insertion impossible : Unknown column 'RCPT_ID' in 'field list'
    Requete : INSERT INTO `RECEPTIONCOLIS` SET `RCPT_ID`='33' , `RCPT_DATEARRIVEE`='2006-07-05' , `RCPT_PROVENANCE`='28' , `RCPT_DESCRIPTIF`='re?commande 403/60338592 bandes abrasives' , `RCPT_DESTINATAIRE`='6000030' , `RCPT_LIEUSTOCKAGE`='14' , `RCPT_DATERECEPTION`='2006-07-07' , `RCPT_MAIL`='1'
    Je ne comprend pas pourquoi a partir de cette table cela ne marche plus.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Unknown column 'RCPT_ID' in 'field list'
    Il me parait évident que tu essayes de voir un champ qui n'existe pas. Vérifie 1) que le champ existe dans la table concernée et 2) l'orthographe et la casse
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Apres plusieurs vérification il apparait que le probleme vient de mon indice $k, dans la base à importer il ya des tables systèmes qui viennent prendre la valeur de l'indice ce qui explique que j'ai des RDB$... puisque les tables systèmes se nomment ainsi.
    Ma question c'est comment pourrais je faire pour faire en sorte que si mon indice $k démarre par rdb$ il ne soit pas pris en compte?

  4. #4
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 153
    Points
    153
    Par défaut
    bonjour,

    Mon probleme persistant je me permet de solliciter votre aide, j'importe 130 tables de interbase vers mysql le probleme c'est qu'à la 71 eme table, interbase comporte plusieur table systemes commençant par rdb$ comment pourrais je faire en sorte de ne pas importer ces tables la?

Discussions similaires

  1. Importer une table Access Vers Sql Server
    Par Rock01 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/11/2008, 08h00
  2. Synchronisation table Oracle vers MySQL
    Par shadeoner dans le forum Outils
    Réponses: 2
    Dernier message: 09/06/2008, 09h58
  3. Import d'un CSV vers MySql
    Par alias666 dans le forum C#
    Réponses: 8
    Dernier message: 22/01/2008, 10h13
  4. [Debutant] Importer des tables sql vers access
    Par le_dilem dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/01/2008, 09h58
  5. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 19h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo