SQL 2000 Query failed ???

Signaler
Messages postés
71
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 octobre 2008
-
Messages postés
71
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 octobre 2008
-
Bonjour a tous,

Voila j' ai un petit probleme d'excution d'une requete sun un serveur SQL 2000 (WINDOWS 2000 server) dans un de mes scripts PHP :

Warning: MS SQL: Query failed in d:\dvlp\va\includes\function.php on line 816
Le contexte de la base de donn‚es a ‚t‚ chang‚ en 'stat'.

j'ai une table VENTES (de produits) , et je crée une requete en fonction de certaines selection de l' utilisateur.

En resumé , l'utilsateur selectionne ou pas , une année , un mois, un fournisseur , un de ses magasins ...etc
et je dois lui renvoyer la quantité , le chiffre affaire, la marge etc ... pour chaque produit correspondant aux critéres de selection

Ma requete marche dans l' analyseur de requete de MS SQL 2000, mais pas avec PHP :-(

EXP: pour DECEMBRE 2005 AVEC COMPARAISON 2004
SELECT code_article,sum(Case When annee='2005' Then qte Else 0 End) as qte,sum(Case When annee_facture='2004' Then qte Else 0 End) as qtepre,sum(Case When annee='2005' Then achat Else 0 End) AS achat,sum(Case When annee_facture='2004' Then achat Else 0 End) AS achatpre ,sum(Case When annee='2005' Then montant_net_fact Else 0 End ) AS chiffaff ,sum(Case When annee='2004' Then montant_net_fact Else 0 End ) AS chiffaffpre,sum(Case When annee='2005' Then marge Else 0 End ) AS marge,sum(Case When annee='2004' Then val_marge Else 0 End ) AS margepre from ventes WHERE mois <='12' GROUP BY code_article ORDER BY chiffaff DESC

Quelqu'un y comprends quelque chose ???
Merci de m' aider SVP , là je patoge ..
C'est pas le temps d'execution en php , je l' ai mis a 0 dans php.ini ....

Merci d'avance...

Amicalement,

espadon

13 réponses

Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
SELECT code_article,


sum(Case When annee= '2005' Then qte Else 0 End) as qte,


sum(Case When annee_facture='2004' Then qte Else 0 End) as qtepre,


sum(Case When annee='2005' Then achat Else 0 End) AS achat,


sum(Case When annee_facture='2004' Then achat Else 0 End) AS achatpre,


sum(Case When annee='2005' Then montant_net_fact Else 0 End ) AS chiffaff,


sum(Case When annee='2004' Then montant_net_fact Else 0 End ) AS chiffaffpre,


sum(Case When annee ='2005' Then marge Else 0 End ) AS marge,


sum(Case When annee='2004' Then val_marge Else 0 End ) AS margepre


from ventes WHERE mois <='12' GROUP BY code_article

ORDER BY chiffaff DESC

tu ne te serais pas trompé dans la sélection (en gras)
annee_facture ou annee ???

apparemment le case marche en php
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
Moi ce que je voudrais voir, c'est le code PHP qu'il utilise.
Car si ca marche via SQL, ca marche aussi pour PHP.
Je suis quasi sur que c'est un problème de guillemets...
Messages postés
71
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 octobre 2008

Merci de vous pencher sur mon petit probleme

Il y a bien une erreur dans ma requete sur le champ annee , mais jsute ici , pas dans mon script ... copier/coller raté
Désolé

Le case marche en php , déjà utilisé dans d'autres scripts

------------ MON CODE PHP -----------

function GiveMeProduits($aAnnee,$aMois,$aFourniseur,$aMagasin)
{
$server= "servSQL";
$login="sa";
$password="toto";
$base="achat_vente";


$idConn=mssql_connect($server,$login,$password) ;
mssql_select_db($base) ;


$anneePre=$aAnnee-1;


$query ="SELECT code_article,sum(Case When annee='$aAnnee' Then qte Else 0 End) as qte,sum(Case When annee='$anneePre' Then qte Else 0 End) as qtepre,sum(Case When annee='$aAnnee' Then achat Else 0 End) AS achat,sum(Case When annee='$anneePre' Then achat Else 0 End) AS achatpre ,sum(Case When annee='$aAnnee' Then montant_net_fact Else 0 End ) AS chiffaff ,sum(Case When annee='$anneePre' Then montant_net_fact Else 0 End ) AS chiffaffpre,sum(Case When annee='$aAnnee' Then marge Else 0 End ) AS marge,sum(Case When annee='$anneePre' Then val_marge Else 0 End ) AS margepre from ventes WHERE mois <='$aMois'";


if ($aFourniseur!="")
{
$where = $where." AND code_four='$aFournisseur'";
}
if ($aMagasin!="")
{
$where = $where." AND code_mag='$aMagasin'";
}


$query = $query .$where ." GROUP BY code_article ORDER BY chiffaff DESC";


// je faits un echo de la requete , puis copier et coller dans analyseur de requete
// et elle marche ...mais pas ici
echo $query ;
$result=mssql_query ($query,$idConn);


$nb=mssql_num_rows($result);


for ($i=0;$i<$nb;$i++)
{
$row=mssql_fetch_row($result);
echo $row[0]."-".$row[1]."-".$row[2]."-".$row[3];
}
mssql_close($idConn);
}
-------------------------------------

Voila , si vous pouvez me donner une piste .... je pensais au temps d' execution , car ca demande un peu de temps .. mais bon je sais pas trop ......

la table a environ 1 000 000 de lignes au fait

Merci d'avance...

Bonne journée

Amicalement,
espadon
Messages postés
71
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 octobre 2008

ne pas tenir compte de l' erreur de frappe $aFournisseur/$aFourniseur ..... oublié un S
espadon
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
chez moi mssql ne fonctionne pas
essaie de remplacer la chaine mssql par mysql sinon je ne vois pas !
Messages postés
71
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 octobre 2008

Ben il faut activer mssql dans php.ini c'est tout ...en retirant le point virgule devant
extension=php_mssql.dll

je vais pas attaquer une base microsoft SQL 2000 avec mysql_query ...etc .. !!!???? va pas bien marcher ca ...
mysql c'est juste .. ben pour une base mysql ...

Mais merci tout de meme......

ma fonction marche une fois , puis a le seconde execution elle plante ... bref c'est un peu aléatoire ..c'est ce que je pige pas ... je faits bien mssql_free_result, je ferme bien ma base ... mais rien .. le probleme ne vierndrai pas de PHP (essayer avec php4.1 et php 5.0) , ou SQL 2000 tout simplement , un bug ???

espadon
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
je n'ai rien dit mssql ça marche
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Essaye un mssql_get_last_message () sur ton mssql_query () pour voir si on a plus d'infos.
En attendant, tu devrais réflêchir à une autre façon de requêter, parce que faire autant de sommes, avec autant de conditions, sur une grosse table...ça risque de faire bcp, en effet.
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
il faudrait savoir dans quelles conditions la fonction plante et celles où elle ne plante pas
$where n'est jamais initialisé mais je ne sais pas si ça a une incidence
Messages postés
71
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 octobre 2008

j' ai fait un get_last_message et j 'obtient

Le contexte de la base de données a été changé en 'achat_vente'.

pourtant , rien ne se passe sur la base ... j' en perd un peu mon latin ... mais ca marche de temps en temps

c'est comme si le serveur arriver a bout de souflle de temps en temps et plantait par moment donc
oui je crois que je vais revoir ma facon de requeter ... c'est sur que c'est un peu complexe comme ca mais bon la je vois pas trop comment faire ... se genre de tableau croisé ... mais bon ...au boulot

en tout cas merci ....

espadon
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
Voui, c'est complexe la :)
Fait un free_result() une fois ta query terminé !
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
T'aurais pas des USE 'database' quelquepart ... ? Parce que cette erreur a trait à ça, généralement.
Bref, cela voudrait dire qu'entre ta 1ère requête, qui fonctionne, et ou le contexte était ok (bonne base de données), un USE (ou un truc similaire) a changé ce contexte (donc, changé de base de données pour l'utilisateur qui effectue la requête).
Messages postés
71
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 octobre 2008

Bonjour a tous et merci..


je faits bien un free_result à la fin ...


j'utlise pas de "USE" database ...

je pense que le probleme vient du serveur , car tard le soir , quand plus personne ne travaille , c'est a dire que le serveur est moins sollicité , ca se passe mieux ... marche 3/4 fois .. puis ca plante... bref .. faut que je revois ma requette a mon avis...

Merci a tous a nouveau
et bonne journée ...



espadon