[Access et PHP]NZ non reconnu?

Fermé
Mythrandil Messages postés 6 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 juillet 2007 - 20 juin 2007 à 10:37
Mythrandil Messages postés 6 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 juillet 2007 - 20 juin 2007 à 10:44
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 18301 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 63 274
20 juin 2007 à 10:41
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 jeudi 24 mai 2007 Statut Membre Dernière intervention 11 juillet 2007 1
20 juin 2007 à 10:44
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