Bonjour à tous,
Voilà mon problème :
J'effectue des requêtes avec odbc et récupère leur valeur grâce à des fonctions d'une classe.
Voila le code des fonctions qui me permettent de récupérer les valeurs des requêtes (peu importe la requête).
Ces fonctions marchent très bien avec 3 de mes requêtes cependant la 4e échoue lors de l'appel à odbc_fetch_array dans la fonction requete_fetch_array.
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 function requete_sql($cde) { $result=odbc_exec($this->sqlconnect, $cde); return($result); } function requete_fetch_array($process) { $result = odbc_fetch_array($process); return $result; } function gettb_sql($cde,$cle) { $tb = array(); $result = $this->requete_sql($cde); $n = $this->requete_num_rows($result); while($row = $this->requete_fetch_array($result)) { $key = $row[$cle]; $ligne = array(); foreach($row as $cle1 => $valeur) { //On encode en utf8 puis on stocke dans la ligne $ligne[$cle1] = utf8_encode($valeur); } $tb["$key"] = $ligne; } return($tb); }
L'erreur que j'obtiens est : Warning: odbc_fetch_array(): No tuples available at this result index
Voila la requête ($dossier est une variable que je récupère juste avant):
J'ai vérifié avec odbc_fetch_into et j'ai bien une ligne retournée par odbc_exec. J'ai également testé ma requête directement sur la base de donnée et je vois bien ma ligne.
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 $tb = array(); $query = " DECLARE @NoDossier varchar(15) = '".$dossier."'; DECLARE @RespAdmin varchar(5) = (SELECT TOP 1 RespAdm FROM t_brevets WHERE NoDossier = @NoDossier); SELECT TOP 1 t_brevets.idbrevet, t_brevets.refmaxima, t_corrcli.Nom,t_brevets.NoDossier,Complement,Origine, t_protec.LibelleProtection, t_brevets.Pays,Depot, NoDepot,PublicationDemande,NoPublication, NoBOPI, PublicationDelivrance, TextePubDelivrance, PublicationRemiseTraduc, TextePubRemiseTraduc, Abandon,Decheance,t_brevets.Expiration, DatePriorite,Accord,TexteAccord, t_brevets.Correspondant, ReferenceCorrespondant, GerantAnnuite, t_dossiers.CodeClient,t_brevets.TitreFrancais,t_brevets.TitreAnglais,t_brevets.Gerant, tresponsable.NomResponsable, t_brevets.RespAdm, (SELECT NomResponsable FROM tresponsable WHERE CodeResponsable = @RespAdmin) AS ResponsAdm, t_brevets.EtatTitre,t_brevets.ReferenceClient,DonneurOrdre, Prioritaire, DatePriorite, t_brevets.TexteLibre, libellepays FROM t_brevets INNER JOIN t_dossiers ON t_brevets.NoDossier = t_dossiers.NoDossier INNER JOIN t_corrcli ON t_corrcli.Code = t_dossiers.CodeClient INNER JOIN tpays ON tpays.pays= t_brevets.pays INNER JOIN t_protec ON t_protec.Protection = t_brevets.Protection INNER JOIN tresponsable ON tresponsable.CodeResponsable = t_brevets.Responsable WHERE (t_dossiers.NoDossier = @NoDossier) AND Depot is not Null AND Abandon is null"; $champ_unique = "idbrevet"; $tb = $this->gettb_sql($query, $champ_unique);
Une idée de quelle pourrait être l'erreur ? Merci d'avance.
Partager