[Access et PHP]NZ non reconnu?

NZ non reconnu? [Access et PHP] - SQL/NoSQL - Programmation

Marsh Posté le 20-06-2007 à 10:41:43    

Bonjour à Tous,
 
je suis face à un problème.  
 
J'ai réalisé 4 requêtes sous Access, je vous les colle ici :
 
Prev1

Code :
  1. TRANSFORM nz(Count(*),0) AS nbMES
  2. SELECT projet.PROGRAMME_IDENTIFIANT
  3. FROM jalons, projet
  4. WHERE (((jalons.PROJET_NUMPROJET)=[projet].[projet_numprojet]) AND ((jalons.JALONS_MISEENSERVICE) Is Not Null) AND ((Month([jalons_miseenservice]))<Month(Now())) AND ((jalons.JALONS_ETATMISEENSERVICE)='1') AND ((Year([jalons_miseenservice]))=Year(Now())))
  5. GROUP BY projet.PROGRAMME_IDENTIFIANT
  6. PIVOT Month(jalons_miseenservice);


 
Prev2

Code :
  1. TRANSFORM nz(Count(*),0) AS nbMES
  2. SELECT projet.PROGRAMME_IDENTIFIANT
  3. FROM jalons, projet
  4. WHERE jalons.PROJET_NUMPROJET=projet.projet_numprojet And jalons.JALONS_MISEENSERVICE Is Not Null And Month([jalons_miseenservice])>=Month(Now()) And jalons.JALONS_ETATMISEENSERVICE Is Null And year(jalons_miseenservice)=year(now())
  5. GROUP BY projet.PROGRAMME_IDENTIFIANT
  6. PIVOT Month(jalons_miseenservice);


 
Livrables (Union entre Prev1 et Prev2)

Code :
  1. SELECT prev1.programme_identifiant,  [1] as Janvier, [2] as Fevrier, [3] as Mars, [4] as Avril,[5] as Mai, [6] as Juin,[7] as Juillet,[8] as Aout, [9] as Septembre, [10] as Octobre,[11] as Novembre, [12] as Decembre
  2. FROM  prev1 LEFT JOIN prev2 ON prev1.programme_identifiant=prev2.programme_identifiant
  3. UNION SELECT prev2.programme_identifiant,  [1] as Janvier, [2] as Fevrier, [3] as Mars, [4] as Avril,[5] as Mai, [6] as Juin,[7] as Juillet,[8] as Aout, [9] as Septembre, [10] as Octobre,[11] as Novembre, [12] as Decembre
  4. FROM prev2 LEFT JOIN prev1 ON prev1.programme_identifiant=prev2.programme_identifiant;


 
LivrablesFinal (Ajout de certains calculs et colonnes)

Code :
  1. SELECT programme_nomprogcapex AS Programme, Jan+Fev+Mar+Avr+Mai+Juin+Juil+Aout+Sept+Oct+Nov+Dec AS Qtes, Programme_PUMoyen, Programme_PUMoyen*Qtes AS Total, cdbl(nz(Janvier,0)) AS Jan, cdbl(nz(Fevrier,0)) AS Fev, cdbl(nz(Mars,0)) AS Mar, cdbl(nz(Avril,0)) AS Avr, cdbl(nz(Livrables.Mai,0)) AS Mai, cdbl(nz(Livrables.Juin,0)) AS Juin, cdbl(nz(Juillet,0)) AS Juil, cdbl(nz(Livrables.Aout,0)) AS Aout, cdbl(nz(Septembre,0)) AS Sept, cdbl(nz(Octobre,0)) AS Oct, cdbl(nz(Novembre,0)) AS Nov, cdbl(nz(Decembre,0)) AS [Dec]
  2. FROM Livrables, Programme
  3. WHERE Livrables.Programme_Identifiant=Programme.Programme_Identifiant;


 
Tout cela s'exécute sans difficulté sous Access.
 
Je vais d'ores et déjà répondre aux questions. Pourquoi tant de cdbl et de NZ dans la dernière requête ? Parce que je ne peux pas le faire avant puisque la jointure (jointure complète) m'ajoute des champs à NULL que je dois remplacer par 0 pour faire une somme.
J'aurais pu le faire dans la requête "Livrables" mais ça revient au même.
 
Je veux exécuter "LivrablesFinal" dans un script PHP. Voici l'erreur retournée :
 
Warning: odbc_exec: SQL error [Microsoft][Pilote ODBC Microsoft Access] Fonction 'nz' non définie dans l'expression, SQL state 37000 in SQL ExecDirect in C:\.... on line 9
 
Est la fonction NZ qui pose problème ? Est ce mon code ?
 
Voilà...
 
Merci d'avance de votre aide éventuelle.

Reply

Marsh Posté le 20-06-2007 à 10:41:43   

Reply

Marsh Posté le 20-06-2007 à 11:18:38    

Bien je vais m'auto répondre parce que j'ai trouvé la solution.
 
On peut remplacer par une fonction SQL reconnue par ODBC plutot que le NZ de VBA.
 
Plutot que Select NZ(Machin,0) from Truc on peut écrire select iif(isnull(machin),0, machin) from truc.
 
C'est certes un peu plus lourd, mais ça marche.
 
Voilà !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed