Bonsoir py86acces,
Dans la requête REQmat, voyons la ligne :
UNION ALL SELECT idmat,TABstat.CODstat & ' - ' & ref,TABmat.des, '/', 0
La constante « '/' » y remplace Null, mais elle censée être du type Date dès lors que la colonne DateMAJ trempe dans des opérations de calcul.
Par exemple, le calcul DateDiff("d", DateMAJ, Date()) >= 60 plante parce que « '/' » n’est pas du type Date.
Pour éviter le plantage, plusieurs possibilités :
— Dans la requête, REQmat, remplacer la constante « '/' » par Null :
UNION ALL SELECT idmat,TABstat.CODstat & ' - ' & ref,TABmat.des, Null, 0
— Ou bien remplacer la constante « '/' » par l’« infini » :
UNION ALL SELECT idmat,TABstat.CODstat & ' - ' & ref,TABmat.des, '31/12/9999', 0
— Ou bien opérer sur une requête REQmat2 ne comportant que le 1er SELECT de REQmat ;
— Ou bien définir les requêtes suivantes :
(1) R1, qui permet de ne conserver que les lignes où la colonne DateMAJ ne contient que des dates (la constante 'pipo' a pour rôle de faire en sorte que l’optimiseur trop zélé n’aille pas encore récupérer le 2e SELECT) :
SELECT idmat, Code, DESIGNATION, DateMAJ, prix, 'pipo'
FROM REQmat
WHERE IsDate(DateMAJ);
(2) R2 qui permet de produire le résultat final à partir de R1 :
SELECT idmat, Code, DESIGNATION, DateMAJ, prix
FROM R1
WHERE DateDiff("d", DateMAJ, Date()) >= 60 ;
— Ou encore n'utiliser qu'une requête (regroupant R1 et R2) :
SELECT idmat, Code, DESIGNATION, DateMAJ, prix
FROM (SELECT idmat, Code, DESIGNATION, DateMAJ, prix, 'pipo'
FROM REQmat
WHERE IsDate(DateMAJ)) AS D
WHERE DateDiff("d", DateMAJ, Date()) >= 60 ;
Il y a certainement d’autres solutions. En tout cas, voyez si quelque chose ci-dessus vous convient...
Partager