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

SGBD Perl Discussion :

Insertion de données dans une base MySQL


Sujet :

SGBD Perl

  1. #1
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut Insertion de données dans une base MySQL
    Bonjour,
    Je souhaite insérer des données qui sont sont un fichier texte dans une base de données MySQL via Perl.
    Pour cela j'ai repris l'exemple de ce tuto de Djibril. J'arrive à me connecter à la bdd et à créer la tale voulue. Cependant mon programme n'arrive pas à lire le fichier txt contenant les données et me retourne l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Insertion des donn├®es dans la table regions
    Uncaught exception from user code:
            Impossible de lire le fichier reg2012.txt
    Le programme de l'exemple est le suivant

    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
     
    #!/usr/bin/perl -w
     
     
    use warnings; 
    use strict; 
    use diagnostics;
    use DBI;                    # Charger le module DBI 
    use vars qw/ $VERSION /;    # Version du script 
     
    $VERSION = '1.0'; 
     
     
     
    # Paramètres de connexion à la base de données 
     
    my $bd          = 'ppl'; 
    my $serveur     = 'monserv';    # Il est possible de mettre une adresse IP 
    my $identifiant = 'bddusr';        # Identifiant 
    my $motdepasse  = 'bddpass';     # Nous n'avons pas de mot de passe 
     
     
    # Connexion à la base de donnees MySQL 
    my $dbh = DBI->connect( "dbi:mysql:dbname=$bd;host=$serveur;", $identifiant, $motdepasse)
    	or die "Connexion impossible à la base de données $bd !"; 
     
    # Creation des tables 
    print "Création de la table Regions\n"; 
    my $sql_creation_table_regions = <<"SQL";
    CREATE TABLE Regions ( 
        id_region INT             NOT NULL , 
        cheflieu  VARCHAR( 6 )    NOT NULL , 
        tncc      INT             NOT NULL , 
        ncc       VARCHAR( 100 )  NOT NULL , 
        nccenr    VARCHAR( 100 )  NOT NULL , 
        PRIMARY KEY ( id_region ) 
    ) COMMENT = 'Les regions 2012 en France'; 
    SQL
     
    $dbh->do('DROP TABLE IF EXISTS Regions;') or die "Impossible de supprimer la table Regions\n\n"; 
    $dbh->do($sql_creation_table_regions) or die "Impossible de créer la table Regions\n\n"; 
     
    # Lecture des fichiers et insertion des données 
    my $fichier_regions      = 'reg2012.txt'; 
     
    # Fichier Region 
    print "Insertion des données dans la table regions\n"; 
    open my $fh_regions, '<', $fichier_regions or die "Impossible de lire le fichier $fichier_regions\n"; 
    my $entete_fichier_region = <$fh_regions>; 
     
    # Insertion des donnees 
    my $requete_sql_region = <<"SQL";
      INSERT INTO regions ( id_region, cheflieu, tncc, ncc, nccenr )
      VALUES ( ?, ?, ?, ?, ? );
     
    SQL
     
    my $sth_regions = $dbh->prepare($requete_sql_region) or die $dbh->errstr; 
     
    while( my $ligne = <$fh_regions> ){ 
    	chomp $ligne; 
    	my ( $REGION, $CHEFLIEU, $TNCC, $NCC, $NCCENR ) = split /\t/, $ligne; 
    	$sth_regions->execute( $REGION, $CHEFLIEU, $TNCC, $NCC, $NCCENR ) 
          or die "Echec Requête $requete_sql_region : $DBI::errstr"; 
    } 
    close $fh_regions; 
     
    # Déconnexion de la base de donnees 
    $dbh->disconnect();
    Ma question est de savoir où doit t-on placer le fichier pour que cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open my $fh_regions, '<', $fichier_regions or die "Impossible de lire le fichier $fichier_regions\n"; 
    my $entete_fichier_region = <$fh_regions>;
    fonction?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    En principe, tu peux le mettre à peu près où tu veux (du moment que c'est avant le moment où tu veux te servir des données qu'il contient).

  3. #3
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    Merci Llo78,

    En fait mon fichier txt est dans le même répertoire que mon script perl. Est ce que vous auriez une petite idée de dis-fonctionnement dans le code que j'ai posté?

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Méthode de debug possible (parmi d'autres): modifie le code de lecture du fichier comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while( my $ligne = <$fh_regions> ){ 
            print $ligne;
    	chomp $ligne; 
    	my ( $REGION, $CHEFLIEU, $TNCC, $NCC, $NCCENR ) = split /\t/, $ligne; 
            print "$REGION, $CHEFLIEU, $TNCC, $NCC, $NCCENR \n";
    	$sth_regions->execute( $REGION, $CHEFLIEU, $TNCC, $NCC, $NCCENR ) 
          or die "Echec Requête $requete_sql_region : $DBI::errstr"; 
    }
    Cela te permettra de savoir:
    1. le premier print: si tu arrives bien à lire le fichier en entrée;
    2. le second print: si le split fonctionne correctement et te renvoie bien au moins 5 champs définis.

  5. #5
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    Merci L0lo78 pour a réponse.
    En fait le problème est un peu plus haut et se situe à ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open my $fh_regions, '<', $fichier_regions or die "Impossible de lire le fichier $fichier_regions\n"; 
    my $entete_fichier_region = <$fh_regions>;
    Le script fonctionne lorsque je travaille sur un serveur local. Cependant sur un serveur distant, j'arrive à me connecter et à créer la table et le problème survient au niveau de la lecture du fichier (que j'ai placé dans le même répertoire que le script).

    Merci

    NB: suite dans le forum programmation

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

Discussions similaires

  1. [MySQL] Insertion de données dans une base MySQL via un formulaire
    Par rcomlan dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/02/2015, 19h53
  2. [MySQL] Problème d'insertion de données dans une base MySql à partir d'un fichier csv
    Par kazabandi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/12/2010, 18h05
  3. Insertion de donnée dans une base MySql
    Par jep33 dans le forum Langage
    Réponses: 4
    Dernier message: 05/11/2008, 07h44
  4. Réponses: 3
    Dernier message: 27/03/2006, 17h25
  5. Réponses: 11
    Dernier message: 01/06/2005, 15h18

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