[Access et PHP]NZ non reconnu?

Mythrandil Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
Mythrandil Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à Tous,

je suis face à un problème.

J'ai réalisé 4 requêtes sous Access, je vous les colle ici :
Prev1

TRANSFORM nz(Count(*),0) AS nbMES
SELECT projet.PROGRAMME_IDENTIFIANT
FROM jalons, projet
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())))
GROUP BY projet.PROGRAMME_IDENTIFIANT
PIVOT Month(jalons_miseenservice);

Prev2

TRANSFORM nz(Count(*),0) AS nbMES
SELECT projet.PROGRAMME_IDENTIFIANT
FROM jalons, projet
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())
GROUP BY projet.PROGRAMME_IDENTIFIANT
PIVOT Month(jalons_miseenservice);


Livrables (Union entre Prev1 et Prev2)
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
FROM  prev1 LEFT JOIN prev2 ON prev1.programme_identifiant=prev2.programme_identifiant
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
FROM prev2 LEFT JOIN prev1 ON prev1.programme_identifiant=prev2.programme_identifiant;


LivrablesFinal (Ajout de certains calculs et colonnes)
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]
FROM Livrables, Programme
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.
A voir également:

2 réponses

Jean-François Pillou Messages postés 19261 Date d'inscription   Statut Webmaster Dernière intervention   63 277
 
Le problème c'est que NZ est une fonction VBA et non une fonction SQL.

Il faut donc que tu crée ta requête en VBA et que tu l'envoie seulement ensuite au SGBD Access.
0
Mythrandil Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   1
 
Y'a-t-il sinon un équivalent au NZ en SQL-Access ? Si oui lequel ?

- Oui il y'en a un : 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.


(Pour aider les gens, penser à se répondre soi même)
0