Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > SGBD
SGBD Toutes vos questions sur l'interaction entre Perl et les bases de données (SQL, mysql, postgresql, ORACLE, ...) Avant de poster, veuillez consulter les FAQs perl, les cours Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/12/2012, 20h55   #1
Sphaxounet
Nouveau Membre du Club
 
Homme Vincent Sphax
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Vincent Sphax
Âge : 25
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 31
Points : 31
Par défaut Select dans des arrays

Bonjour,

Je souhaiterais récupérer 3 colonnes d'une bdd en sqlite, les mettre dans 3 tableaux (ou un seul) et afficher leurs valeurs ligne par ligne.

Par la suite je ferai une interface pour les afficher joliment via sans doute le module Tk.

C'est mon premier programme et j'ai quelques difficultés, voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use DBI;
 
#connection to db...
 
my $rowDate 	= "date"; 
my $rowText 	= "text";
my $rowFlags 	= "flags";
my $table	= "message";
my (@dates, @messages, @sender);
my $i = 0;
 
 
my $sth = $dbh->prepare( "select $rowDate, $rowText, $rowFlags from $table" );
$sth->execute( );
while ( (@dates, @messages, @sender) = $sth->fetchrow_array ) {
     print "Date: "; print scalar(localtime($dates[i])); print ", Message: "; 
     print $messages[i]; print ", Qui: "; print $sender[i]; print ".\n";
     $i++;
}
Seuls les champs de date s'affichent correctement. Les messages et sender ne sortent rien. Alors que quand je fais une requête simple pour seulement l'un de ces champs, tout s'affiche correctement :

Code :
1
2
3
4
while ( (@messages) = $sth->fetchrow_array ) {
	#print ", Message: "; print $messages[i];
	#$i++;
}
Etant débutant en Perl (je viens du C), je ne comprends pas quelle est l'erreur qui est sûrement ici : while ( (@dates, @messages, @sender) = $sth->fetchrow_array ) .

Pourriez-vous m'aider ?
Merci d'avance.
Sphaxounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 10h50   #2
Gardyen
Membre chevronné
 
Avatar de Gardyen
 
Inscription : août 2005
Messages : 501
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France

Informations forums :
Inscription : août 2005
Messages : 501
Points : 684
Points : 684
Envoyer un message via ICQ à Gardyen
Plusieurs erreurs sont à signaler

Déjà pour te faciliter la vie, commence tes scripts en utilisant
Code :
1
2
3
4
5
#!/usr/bin/perl
 
# be strict
use strict;
use warnings;
cela te permettra de filtrer quelques unes de tes erreurs, comme par exemple le $dates[i]

ensuite il y a plus simple pour récupérer ces infos:
Code :
1
2
3
4
while ( my ($date, $message, $sender) = $sth->fetchrow_array ) {
     print "Date: "; print $date; print ", Message: "; 
     print $message; print ", Qui: "; print $sender; print ".\n";
}
le fetch_rowarray renvoie une liste de valeurs, et je les assigne aux variables que j'affiche ensuite

Edit: d'après ton premier post, tu veux stocker ces lignes pour une utilisation ultérieure. Dans ce cas il faut stocker tes lignes dans une structure:
Code :
1
2
3
4
5
6
7
my @all_lines;
while ( my @array = $sth->fetchrow_array ) {
     my ($date, $message, $sender) = @array;
     push @all_lines, @array; #stocke les lignes dans un array pour plus tard
     print "Date: "; print $date; print ", Message: "; 
     print $message; print ", Qui: "; print $sender; print ".\n";
}
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
Plus les choses changent, plus elles restent les mêmes
Gardyen est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 09h38   #3
Sphaxounet
Nouveau Membre du Club
 
Homme Vincent Sphax
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Vincent Sphax
Âge : 25
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 31
Points : 31
Je te remercie, c'était exactement ce dont j'avais besoin ! D'ailleurs tu m'as directement mâché tout le travail, j'avais plus rien à faire

Maintenant que cette partie est terminée, je me lance dans la partie graphique. Et c'est pas glorieux encore ! ....
Sphaxounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h54.


 
 
 
 
Partenaires

Hébergement Web