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 :

Comment mettre à jour 2 bases ayant des noms de champs différents ??? [ODBC]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut Comment mettre à jour 2 bases ayant des noms de champs différents ???
    bonjour,

    Voila mon probleme,

    je souhaite recuperer le nom des champs que contient une table construite avec ACCESS.
    Donc j'ai créé un lien ODBC vers cettte base et ensuite je m'y connecte via PHP comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connACCESS = odbc_connect("****","***","**") or die(" Impossible de se connecter à la base de données ACCESS");
    ensuite je recupere le nom des tables avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while($table2=mysql_fetch_row($result2)){
    //liste des tables de la base ACCESS
     $resultACCESS = odbc_tables($connACCESS);
    //tant que l'on n'arrive pas à la fin de la liste des table de la base ACCESS
     while (odbc_fetch_row($resultACCESS)){
        $tableACCESS=odbc_result($resultACCESS, 3);
    ensuite je veux pouvoir recuperer le nom des champs de chaque table,
    malheureusement le code que j'ai ecrit n'est pas bon car je me perd dans
    le resultat que renvoi les fonction ( connection_id, result_id, ... ) je ne
    sais plus quoi mettre.

    voila le code qui ne marche pas :

    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
    if ($table2[0]==odbc_result($resultACCESS, 3)){
    //liste des champs de la base ACCESS et nombre de champs
         $listchamps=odbc_columns($connACCESS);
         $nbchamp=odbc_num_fields($listchamps);
    //sauvegarde des noms de champs de la base ACCESS et mysql pour pouvoir s'en servir dans les requêtes
         for ($i=1;$i<=$nbchamp;$i++){
            $tablo[$i]=odbc_field_name($listchamps, 4);
            echo "$tablo[$i]";print "<br />";}
         for ($i=0;$i<$nbchamp;$i++){
            $champ[$i]=mysql_field_name($table2[0],$i);}echo "$champ[1]";print "<br />";
    //requête servant à selectionner les données des champs de la base ACCESS et exécution de la requête
         $req="select ";
         for ($i=0;$i<$nbchamp;$i++){
            $req=$req."$tablo[$i] ";}
         $req=$req."from $tableACCESS";
         $result3 = odbc_exec( $connACCESS,$req );
    //boucle servant à remplir les tables MySQL avec les données de la requêtes précédentes
         while (odbc_fetch_row($result3))
           {
            for ($i=0;$i<$nbchamp;$i++){
              $tab[$i]=odbc_result( $result3, $i);}
            $query2="INSERT INTO $table2[0] (";
            for ($i=0;$i<$nbchamp-1;$i++){
              $query2=$query2."$champ[$i],";}
            $query2=$query2."$champ[$nbchamp]) VALUES ( ";
            for ($i=0;$i<$nbchamp-1;$i++){
              $query2=$query2."$tab[$i],";}
            $query2=$query2."$tab[$nbchamp])";
            $resultat2=mysql_query($query2,$conn2);}}}}
    en fait j'ecris ce script afin de pouvoir vider toutes les tables d'une base
    MySQL et de les remplir avec les donnees de la base ACCESS.

    Voila, merci de m'aider et n'hesitez pas a poser de question si c'est pas clair

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    Bon en fait plus j'avance sur la question plus je me rend compte que ca va etre difficile de m'etre à jour la base MySQL a partir d'ACCESS mais bon il le faut quand meme.

    Donc je pose une nouvelle question : Comment faire pour mettre à jour les
    donnees contenues dans la base MySQL à partir de la base ACCESS ???

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    Ben la tu as un leger probleme de style de programmation.

    Fait comme si tu bossais en C/Java :
    - Declare tes variables de maniere explicite et claire.
    - Commente ton code (ca aide à la comprehension aussi bien pour nous que pour toi)

    Car ce que tu fait est tres simple. Il s'agit de migrer une/des table(s) Access vers MySQL.
    L'algo est simple alors.
    1/ je recup les données et nom de champs de table Access
    2/ Je creer ces tables sous MySQL au besoin (si les tables ont le meme noms)
    3/ creer les requetes d'insertion dans la base MySQL

    Donc ton bout de code de recup des noms de champs sur mysql ne sert pas a grand chose.
    C'est ton code de recup de champs d'acces qui est utile déjà
    Nicolas BUI

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    Bon c'est vrai que mon code est moche

    Mais bon je voulais d'abord programmer et apres refaire une mise en forme avec commentaire.

    Sinon je suis d'accord dans le fait que le code parait simple mais le probleme viens des requêtes en MySQL car on ne peut pas requêter des champs conposé d'espace et d'accent.
    Et le probleme est que pratiquement tous les champs de la base ACCESS sont écrit avec des espaces et des accents.
    D'où mon probleme.
    Il est vrai que faire migrer des tables est simple mais c'est ensuite surtout un probleme de requete.
    car en fait mon script s'executerai au lancement de l'application comme mise a jour afin que les données soient continuellement rafraichis car
    la personne qui va utiliser cette application mettra à jour seulement la base ACCESS donc voila.

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    Pense à utiliser mysql_escape ou mysql_real_escape pour te proteger des problemes avec les caracteres speciaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $s = "INSERT ... VALUES( '" . mysql_real_escape( "J'ai des trucs bizaroid\n\t"). "'";
    Nicolas BUI

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    je suis vraiment désolé. J'ai parlé un peu trop vite, en fait on peut requêter même avec des caractères spéciaux.
    La honte

    je ne connaissai pas l'utilisation des `` en mysql , je ne savais pas que ça permettait de lire le nom de champs dans son intégralité ( avec ou sans caractère spéciaux ).

    Désolé pour le dérangement.

    Juste pour savoir, pourrais-tu m'en dire plus sur mysql_escape et mysql_real_escape si c'est possible ou si tu aurais de la doc.

    merci tout de meme de m'avoir repondu.

  7. #7
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    ben mysql_escape ou mysql_real_escape ca fé le boulot de transformer une chaine destiné a etre enregistrer pour que cela soit conforme au SQL.
    les caracteres spéciaux qu'il converti sont :
    ' -> les simples quote
    \n -> les retours a la ligne
    etc..
    Nicolas BUI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/08/2008, 23h55
  2. comment mettre à jours une base (*.mdb) distante
    Par dj_techno dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 06/06/2008, 16h54
  3. Réponses: 0
    Dernier message: 13/05/2008, 16h25
  4. Comment mettre à jour une base de données access
    Par nicolas2603 dans le forum VB.NET
    Réponses: 11
    Dernier message: 16/10/2007, 14h40
  5. Réponses: 1
    Dernier message: 15/09/2006, 11h24

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