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 :

Choisir/installer le bon DB package sous Vista


Sujet :

SGBD Perl

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut Choisir/installer le bon DB package sous Vista
    Bonjour à tous.
    Je suis totalement débutant avec Perl. Mais je viens vers vous pour apprendre.
    Voici l'exposé de la situation:
    J'utilise PHPXref 0.7 pour documenter un script Open source.
    Je souhaite croiser les différents paramètres avec une base de donnée.
    Dans la doc fournie, il est précisé que l'on doit avoir installé le module Perl DBI.
    J'ai donc téléchargé et installé activeperl version 5.10
    Lorsque le script perl tente une connexion (en local) sur la base de donnée, j'ai cette erreur :
    install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains:
    C:/Perl/site/lib C:/Perl/lib .) at (eval 11) line 3.
    Perhaps the DBD::mysql perl module hasn't been fully installed,
    or perhaps the capitalisation of 'mysql' isn't right.
    Available drivers: CSV, DBM, ExampleP, File, Gofer, ODBC, Oracle, Proxy, SQLite, Sponge.
    J'ai vérifié dans le PPM quels packages étaient installés.
    DBI : c ok.
    Par contre, je suppose au vu de l'erreur donné par la console qu'il en manque un.
    Je suis allé sur cette page pour trouver mon bonheur, mais lequel choisir pour qu'enfin le script fonctionne ?
    Voici l'extrait du script perl pour la connection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if ($config{'db_use'} eq 'YES') {
        my $db_host    = $config{'db_host'};
        my $db_port    = $config{'db_port'};
        my $db_name    = $config{'db_name'};
        my $db_user    = $config{'db_user'};
        my $db_pass    = $config{'db_pass'};
        eval('require DBI') || die "DBI Perl Module Not Installed (Note the Windows .exe file does not support the DB_USE config option";
        require DBI::DBD;
        $dbh=DBI->connect("DBI:mysql:database=$db_name;host=$db_host;port=$db_port",$db_user,$db_pass);
    }
    et l'extrait concerné du fichier config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DB_USE=YES
    DB_HOST=localhost
    DB_PORT=3306
    DB_NAME=osc
    DB_USER=root
    DB_PASS=
    au cas où j'aurais fait une erreur ...

    A titre d'information, voici mon environnement de dev :
    Windows Vista Pro(x86)
    WampServer version 2.

    Merci d'avance à ceux qui vont me guider

    (j'espère que j'ai posté dans la bonne section du forum !)

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut
    Merci pour le lien ... C'est un des premiers que j'ai lu ce matin avant de poster.
    Voici mes progressions :
    j'ai donc installé un package DBDmysql (CPAN http://search.cpan.org/dist/DBD-mysql-4.005/) via PPM.
    Lorsque je lance le script perl, la connexion sur la base de donnée se fait.
    Mais il y a une erreur :
    Table references...: 0%..DBD::mysql::st execute failed: Erreur de syntaxe près de '' Ó la ligne 1 at phpxref.pl line 2151.
    J'ai essayé avec Easyphp 1.8 (pensant que cela venait d'un probème de version Mysql), mais rien à faire.
    voici les lignes incriminées du script:
    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
     
    if ($dbh != 0) {
                my $sth = $dbh->prepare("describe $tablename");
                $sth->execute;    <-----ligne 2151
                my $numRows = $sth->rows;
                if ($numRows > 0) {
                    print $TABLEINDEX "<table border=1>";
                    while (my @row = $sth->fetchrow_array()) {
                        print $TABLEINDEX "<tr>";
                        foreach my $col (@row) {
                                $col = "&nbsp;" unless defined $col;
                                $col = "&nbsp;" if ($col eq "");
                                print $TABLEINDEX "<td>$col</td>";
                        }
                        print $TABLEINDEX "</tr>\n";
                    }
                    print $TABLEINDEX "</table>";
                }
                $sth->finish;
    déboguer des requêtes sql sous php, je sais faire, mais sous perl, pas du tout.
    Sans votre aide, je serais obligé de renoncer à utiliser toutes les fonctions du script PHPxref, c'est dommage, vu que c'est un travail destiné pour une communauté open-source.

    Merci encore de jalonner mon apprentissage

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Essaye ceci et retourne nous le message d'erreur
    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
    if ($dbh != 0) {
                my $Requete = "describe $tablename";
                my $sth = $dbh->prepare($Requete); 
                $sth->execute or die "Echec preparation requete $Requete : $DBI::errstr";
                my $numRows = $sth->rows;
                if ($numRows > 0) {
                    print $TABLEINDEX "<table border=1>";
                    while (my @row = $sth->fetchrow_array()) {
                        print $TABLEINDEX "<tr>";
                        foreach my $col (@row) {
                                $col = "&nbsp;" unless defined $col;
                                $col = "&nbsp;" if ($col eq "");
                                print $TABLEINDEX "<td>$col</td>";
                        }
                        print $TABLEINDEX "</tr>\n";
                    }
                    print $TABLEINDEX "</table>";
                }
                $sth->finish;
    $tablename existe t il ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut
    alors, voici les messages d'erreurs :
    lors du lancement du script (avant toute action):
    Name "DBI::errstr" used only once: possible typo at phpxref.pl line 2152.
    le script ensuite s'exécute dans la console et au moment de référencer la base de donnée :
    Table references...: 0%..DBD::mysql::st execute failed: Erreur de syntaxe prÞs de '' Ó la ligne 1 at phpxref.pl line 2152.
    Echec preparation requete describe aucune. : Erreur de syntaxe prÞs de '' Ó la ligne 1 at phpxref.pl line 2152.
    sachant que la ligne 2152 est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sth->execute or die "Echec preparation requete $Requete : $DBI::errstr";
    quand à savoir si $tablename existe, je n'ai guère d'idée ...
    Y'a t'il un équivalent d'echo en perl? Problème, le script fait 2500 lignes ...

    en attendant, voici l'extrait (suffisant?) qui référence les tables :
    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
     
    # Generate table references
        print "\nTable references...: ";
        mkpath("$output_dir/_tables") unless (-d "$output_dir/_tables");
        $f=0;
        $tablecount=scalar(keys %table_ids);
        foreach $tablename (sort(keys %table_ids)) {
            $f++;
            show_progress($f,$tablecount);
            my  $tablenameid=$table_ids{$tablename};
            $TABLEINDEX=pxopen("$output_dir/_tables/$tablenameid.$ext",'w');
            $newheader=$pageheader;
            $newheader =~ s/__TITLE__/$title Table Reference: $tablename/g;
            $newheader =~ s/__CHARSET__/$charset/g;
            $newheader =~ s/__STYLEFILE__/..\/$config{stylefile}/g if $config{'stylefile'};
            $newheader =~ s/__PRINTSTYLEFILE__/..\/$config{printstylefile}/g if $config{'printstylefile'};
            $newheader =~ s/__RELROOT__/..\//g;
            $newheader.=javascript_header(1, '_tables', "index.$ext");
            print $TABLEINDEX $newheader;
            print $TABLEINDEX &navtoggle_html('../');
            print $TABLEINDEX &javascript_search(1);
            print $TABLEINDEX "[<a href=\"../index.$ext\">Top level directory</a>]<br>\n";
            print $TABLEINDEX "<h3>SQL Table Cross Reference</h3>\n";
            print $TABLEINDEX "<h2><a href=\"index.$ext#$tablenameid\">$tablename</a></h2>\n\n";
     
            print $TABLEINDEX "<b>Referenced ".scalar(@{$table_references{$tablename}})." times:</b><ul>\n";
            foreach $def (@{$table_references{$tablename}}) {
                $tablerefs++;
                $sourceloc=$def->{'subdir'}.$def->{'filename'}.".source.$ext#l".$def->{'line'};
                print $TABLEINDEX "<li>";
                print $TABLEINDEX "<a href=\"..".$def->{'subdir'}.$def->{'filename'}.".$ext\">";
                print $TABLEINDEX $def->{'subdir'}.$def->{'filename'}."</a> ";
                print $TABLEINDEX " -> ";
                print $TABLEINDEX "<a onClick=\"logTable('$tablename', '$sourceloc')\" href=\"..$sourceloc\">";
                #print $TABLEINDEX "<a href=\"..".$def->{'subdir'}.$def->{'filename'}.".source.$ext#l".$def->{'line'}."\">";
                print $TABLEINDEX " line ".$def->{'line'}."</a>";
                print $TABLEINDEX "</li>\n";
            }
            print $TABLEINDEX "</ul>\n";
            print $TABLEINDEX "<h3>Table Description</h3>\n";
            if ($dbh != 0) {
                my $Requete = "describe $tablename";
                my $sth = $dbh->prepare($Requete); 
                $sth->execute or die "Echec preparation requete $Requete : $DBI::errstr";
                my $numRows = $sth->rows;
                if ($numRows > 0) {
                    print $TABLEINDEX "<table border=1>";
                    while (my @row = $sth->fetchrow_array()) {
                        print $TABLEINDEX "<tr>";
                        foreach my $col (@row) {
                                $col = "&nbsp;" unless defined $col;
                                $col = "&nbsp;" if ($col eq "");
                                print $TABLEINDEX "<td>$col</td>";
                        }
                        print $TABLEINDEX "</tr>\n";
                    }
                    print $TABLEINDEX "</table>";
                }
                $sth->finish;
    En même temps, je vois que c'est une erreur de syntaxe ... et c'est bien ça que je ne maitrise pas dans ce langage. Est ce un problème de compatibilité avec la version de mysql ? (le script PHPxref date de 2007, cause à effet ?)

    En tous cas, merci de ta réactivité.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    problème de syntaxe veut dire syntaxe de ta requête SQL et non de Perl .

    Table references...: 0%..DBD::mysql::st execute failed: Erreur de syntaxe prÞs de '' Ó la ligne 1 at phpxref.pl line 2152.
    Echec preparation requete describe aucune. : Erreur de syntaxe prÞs de '' Ó la ligne 1 at phpxref.pl line 2152.
    As tu une table SQL qui s'appelle aucune. ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut TILT !
    Je viens de percuter !
    et surtout commence à comprendre comment le script PHPxref croise les classes/functions/constants/variables/tables de la source !
    En fait, j'avais commencé à commenter certains fichiers php (j'en ai que 352, pas moins de 650 fonctions ...) et j'avais mis un TAG @table suivi de ce fameux 'aucune' [qui indiquait en fait quand une fonction n'appelait aucune table].
    Donc forcément la requête cherchait une table `aucune` qui n'existait pas dans ma bd!
    -> donc premier problème résolu.
    J'ai remis le code original, la connexion avec mysql s'établit sans problème.
    Par contre, je viens de me rendre compte que seules 13 tables étaient référencées. Illogique d'apparence, puisqu'il y en a 47 dans ma bd...
    Mais en fait le script a trouvé ces 13 tables à cause d'un tag " // TABLES:" d'origine dans le projet.
    J'ai croisé ces résultats en faisant une recherche avec pspad sur le répertoire source.
    Donc, en résumé, les croisements seront totalement opérationnels une fois que j'aurais commenté les fichiers avec le TAG @table et surtout avec des tables existantes dans la bd ... (la chouma) !
    (à titre d'infos, pour ceux qui suivent, PHPxref supporte les styles de commentaires de PHPdocumentor)

    Bon bah voilà, imppec tout ça !
    Merci beaucoup djibril pour ton aide.

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

Discussions similaires

  1. Installation de SQL Server 2005 sous Vista
    Par aqavach dans le forum Microsoft BI
    Réponses: 2
    Dernier message: 28/04/2009, 09h54
  2. Installation d'oracle 10.2 sous vista
    Par miloon dans le forum Installation
    Réponses: 0
    Dernier message: 14/12/2008, 13h57
  3. Réponses: 0
    Dernier message: 18/02/2008, 00h02
  4. Installer SQL Server Mangament studio sous Vista
    Par DonJR dans le forum Windows Vista
    Réponses: 3
    Dernier message: 01/07/2007, 12h21
  5. Où installer les fichiers de données sous Vista ?
    Par philnext dans le forum Delphi
    Réponses: 3
    Dernier message: 13/05/2007, 19h11

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