Bonjour,
Voilà mon problème:
J'ai une variable (variable Commande) qui est définie dans une fonction qui appartient à un package, comme suit:
La variable Commande est déclarée avec our, pour pouvoir la partagée, y accéder d'un autre 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
20
21
22
23
24
25
26
27
28
29
30
31 package TX2::BD; sub WEBSELECT() { my $dbi=$_[0]; my $requete=$_[1]; my $sens=$_[2]; our @ChampsCommande; our @Commande; if($sens eq 'trsnddoc') { @ChampsCommande=qw/DATE_CREATION_DOC HEURE_CREATION_DOC DATE_ENVOI_DOC HEURE_ENVOI_DOC NUM_INTERCHANGE NUM_CONTROL_DOC NUM_MESSAGE CODE_STATUT_1 CODE_STATUT_2 CODE_ERREUR NUM_ACK_RESEAU *** ADDRESSE_EMETTEUR ADDRESSE_DESTINATAIRE CONNEXION TYPE_MESSAGE VERSION /; } else { @ChampsCommande=qw/DATE_CREATION_DOC HEURE_CREATION_DOC DATE_RECEPTION_DOC HEURE_RECEPTION_DOC DATE_TRADUCTION HEURE_TRADUCTION NUM_INTERCHANGE NUM_CONTROL_DOC NUM_MESSAGE CODE_STATUT_1 CODE_STATUT_2 CODE_ERREUR ADDRESSE_EMETTEUR ADDRESSE_DESTINATAIRE CONNEXION TYPE_MESSAGE VERSION /; } my $i; my $req=$dbi->prepare($requete); $req->execute(); while (my $ref = $req->fetchrow_hashref()) { @{$Commande[$i]}{@ChampsCommande}=@$ref{@ChampsCommande}; $i++; } $req->finish; }
Dans le fichier suivant, je fais appel à cette fonction pour réaliser deux requêtes sur deux tables différentes.
Voici le fichier en question (la partie qui intéresse):
Lors de la premère requête, je retourne, on va dire, 30 valeurs (ça c bon), mais lors de la seconde connexion(sur l'autre table), je devrais retourner par exemple 10 valeur mais j'en retourne 30. 10 enregistrements qui proviennent de la seconde table et les 20 autres qui viennent de la précédente.
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 %TrySens=(trsnddoc=>['ADDRESSE_EMETTEUR','ADDRESSE_DESTINATAIRE'], trrcvdoc=>['ADDRESSE_DESTINATAIRE','ADDRESSE_EMETTEUR'], ); %trsnddoc=(Addresse=>'ADDRESSE_DESTINATAIRE', Date=>'DATE_ENVOI_DOC', Heure=>'HEURE_ENVOI_DOC', Statut1=>'CODE_STATUT_1', Statut2=>'CODE_STATUT_2', ); %trrcvdoc=(Addresse=>'ADDRESSE_EMETTEUR', Date=>'DATE_RECEPTION_DOC', Heure=>'HEURE_RECEPTION_DOC', Statut1=>'CODE_STATUT_1', ); %MyChamps=('trsnddoc'=>\%trsnddoc,'trrcvdoc'=>\%trrcvdoc,); %Titre=('trsnddoc'=>'sent','trrcvdoc'=>'received',); ########################################################################################### print "<HEAD>\n"; print "<link rel='stylesheet' href='../style.css' type='text/css' media='screen' />\n"; print "<script language=\"javascript\" src=\"../script2.js\" type=\"text/javascript\"></script>\n"; print "</HEAD>\n"; print "<HTML><BODY class='Body2'>"; $dbh=&TX2::BD::Connexion(); foreach my $keys(keys %TrySens) { $Sens=$keys; $Requete="SELECT * FROM $keys WHERE NUM_MESSAGE like \'%$Request%\' AND NUM_MESSAGE!=''"; if(@{$compte}[0] ne $TX2::Variable::admin) { &MakeWhichCompte($keys,@{$TrySens{$keys}}[0],@{$TrySens{$keys}}[1]); $Requete.=$WhichCompte; #print "<BR>$Requete<BR>"; for(my $j=0;$j<=$#TX2::BD::Commande;$j++) { for(my $k=0;$k<=($#TX2::BD::ChampsCommande);$k++) { delete($TX2::BD::Commande[$j]{$TX2::BD::ChampsCommande[$k]}); } } } &TX2::BD::WEBSELECT($dbh,$Requete,$Sens); &DisplayRequest(); } &TX2::BD::Deconnexion($dbh);![]()
![]()
![]()
C'est sûr, ma variable Commande garde en mémoire les valeurs précédentes. alors j'ai rajouté ce petit bout de code:
pour supprimer chaque clé après une requête. Mais ça, ça me supprime la valeur de mes clés !!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for(my $j=0;$j<=$#TX2::BD::Commande;$j++) { for(my $k=0;$k<=($#TX2::BD::ChampsCommande+1);$k++) { delete($TX2::BD::Commande[$j]{$TX2::BD::ChampsCommande[$k]}); } }![]()
![]()
et non la clé
![]()
![]()
Ce qui fait que je me retrouve toujours avec un résultat de 30 enregistrements pour la première requetes et 30 enregitrements pour la seconde dont 20 sans valeurs !!!!!!!
S'il vous pait, comment faire pour règler ce problème![]()
![]()
![]()
Merci pour votre aide !!! et bonne soirée
Partager