SQL 2000 Query failed ???

espadon2 Messages postés 71 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 21 octobre 2008 - 16 janv. 2006 à 15:06
espadon2 Messages postés 71 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 21 octobre 2008 - 18 janv. 2006 à 09:39
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
A voir également:

13 réponses

sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
16 janv. 2006 à 16:00
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
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 janv. 2006 à 16:07
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...
0
espadon2 Messages postés 71 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 21 octobre 2008
16 janv. 2006 à 16:58
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
0
espadon2 Messages postés 71 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 21 octobre 2008
16 janv. 2006 à 17:02
ne pas tenir compte de l' erreur de frappe $aFournisseur/$aFourniseur ..... oublié un S
espadon
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
16 janv. 2006 à 17:12
chez moi mssql ne fonctionne pas
essaie de remplacer la chaine mssql par mysql sinon je ne vois pas !
0
espadon2 Messages postés 71 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 21 octobre 2008
16 janv. 2006 à 17:28
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
0
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
16 janv. 2006 à 17:33
je n'ai rien dit mssql ça marche
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 janv. 2006 à 17:44
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.
0
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
16 janv. 2006 à 17:48
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
0
espadon2 Messages postés 71 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 21 octobre 2008
16 janv. 2006 à 17:53
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
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 janv. 2006 à 17:56
Voui, c'est complexe la :)
Fait un free_result() une fois ta query terminé !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 janv. 2006 à 18:06
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).
0
espadon2 Messages postés 71 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 21 octobre 2008
18 janv. 2006 à 09:39
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
0
Rejoignez-nous