OVH Cloud OVH Cloud

Problème champs vide dans une requête SQL

3 réponses
Avatar
defluc
Bonjour et meilleur voeux à tous.

J'ai plusieurs applications qui fonctionnent avec des requêtes qui
comportent des champs vides dans la clause Where du genre :
SELECT DISTINCTROW TableProprio.Article, TableProprio.Nom,
TableBien.Div, TableBien.Sect, TableBien.Radical, TableBien.ExposLet,
TableBien.ExposDigit, TableBien.[Adresse bien], TableBien.Contenance,
FROM TableProprio INNER JOIN TableBien ON TableProprio.Article =
TableBien.Article
WHERE TableBien.Div= 3 AND TableBien.Sect='F' AND (TableBien.Radical
BETWEEN 1 AND 1) AND (TableBien.ExposLet Between '' AND '') AND
(ExposDigit Between '' AND '');.

Je viens d'en écrire une nouvelle sur d'autres tables et aucun
enregistrement ne m'est renvoyé si je ne supprime pas les deux derniers
champs vides alors que les chaîne vides sont autorisées et que les
chaînes nulles ne sont pas interdites .

Qu'est-ce qui cloche ?

Merci d'avance

3 réponses

Avatar
Philippe T [MS]
Bonjour,

Une chaîne vide ne peut pas utiliser les fonctions standard pour les chaines
de caractères (du type Between par exemple).
Il faut utiliser une fonction NZ() dans Access ou un ISNULL() en SQL

Essaye :

SELECT DISTINCTROW TableProprio.Article, TableProprio.Nom,
TableBien.Div, TableBien.Sect, TableBien.Radical, TableBien.ExposLet,
TableBien.ExposDigit, TableBien.[Adresse bien], TableBien.Contenance,
FROM TableProprio
INNER JOIN TableBien ON TableProprio.Article = TableBien.Article
WHERE TableBien.Div = 3
AND TableBien.Sect='F'
AND (TableBien.Radical BETWEEN 1 AND 1)
AND (NZ(TableBien.ExposLet, '') Between '' AND '')
AND (NZ(ExposDigit, '') Between '' AND '');.

ou (pour les deux dernières lignes)

AND (ISNULL(TableBien.ExposLet, '') Between '' AND '')
AND (ISNULL(ExposDigit, '') Between '' AND '');.


Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"defluc" wrote in message
news:
Bonjour et meilleur voeux à tous.

J'ai plusieurs applications qui fonctionnent avec des requêtes qui
comportent des champs vides dans la clause Where du genre :
SELECT DISTINCTROW TableProprio.Article, TableProprio.Nom,
TableBien.Div, TableBien.Sect, TableBien.Radical, TableBien.ExposLet,
TableBien.ExposDigit, TableBien.[Adresse bien], TableBien.Contenance,
FROM TableProprio INNER JOIN TableBien ON TableProprio.Article > TableBien.Article
WHERE TableBien.Div= 3 AND TableBien.Sect='F' AND (TableBien.Radical
BETWEEN 1 AND 1) AND (TableBien.ExposLet Between '' AND '') AND
(ExposDigit Between '' AND '');.

Je viens d'en écrire une nouvelle sur d'autres tables et aucun
enregistrement ne m'est renvoyé si je ne supprime pas les deux derniers
champs vides alors que les chaîne vides sont autorisées et que les
chaînes nulles ne sont pas interdites .

Qu'est-ce qui cloche ?

Merci d'avance



Avatar
Archi
Un grand merci.
J'ai constaté que j'avais oublié de faire précéder le dernier champs du
nom de la table et cela a tout résolu, que les valeurs passées au
"between" soient vides ou non.

Philippe T [MS] a écrit:
Bonjour,

Une chaîne vide ne peut pas utiliser les fonctions standard pour les chaines
de caractères (du type Between par exemple).
Il faut utiliser une fonction NZ() dans Access ou un ISNULL() en SQL

Essaye :

SELECT DISTINCTROW TableProprio.Article, TableProprio.Nom,
TableBien.Div, TableBien.Sect, TableBien.Radical, TableBien.ExposLet,
TableBien.ExposDigit, TableBien.[Adresse bien], TableBien.Contenance,
FROM TableProprio
INNER JOIN TableBien ON TableProprio.Article = TableBien.Article
WHERE TableBien.Div = 3
AND TableBien.Sect='F'
AND (TableBien.Radical BETWEEN 1 AND 1)
AND (NZ(TableBien.ExposLet, '') Between '' AND '')
AND (NZ(ExposDigit, '') Between '' AND '');.

ou (pour les deux dernières lignes)

AND (ISNULL(TableBien.ExposLet, '') Between '' AND '')
AND (ISNULL(ExposDigit, '') Between '' AND '');.


Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"defluc" wrote in message
news:

Bonjour et meilleur voeux à tous.

J'ai plusieurs applications qui fonctionnent avec des requêtes qui
comportent des champs vides dans la clause Where du genre :
SELECT DISTINCTROW TableProprio.Article, TableProprio.Nom,
TableBien.Div, TableBien.Sect, TableBien.Radical, TableBien.ExposLet,
TableBien.ExposDigit, TableBien.[Adresse bien], TableBien.Contenance,
FROM TableProprio INNER JOIN TableBien ON TableProprio.Article >>TableBien.Article
WHERE TableBien.Div= 3 AND TableBien.Sect='F' AND (TableBien.Radical
BETWEEN 1 AND 1) AND (TableBien.ExposLet Between '' AND '') AND
(ExposDigit Between '' AND '');.

Je viens d'en écrire une nouvelle sur d'autres tables et aucun
enregistrement ne m'est renvoyé si je ne supprime pas les deux derniers
champs vides alors que les chaîne vides sont autorisées et que les
chaînes nulles ne sont pas interdites .

Qu'est-ce qui cloche ?

Merci d'avance








Avatar
Philippe T [MS]
Bonjour,

Pas de problème.

Merci du retour et bonne année 2005.

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Archi" wrote in message
news:
Un grand merci.
J'ai constaté que j'avais oublié de faire précéder le dernier champs du
nom de la table et cela a tout résolu, que les valeurs passées au
"between" soient vides ou non.

Philippe T [MS] a écrit:
Bonjour,

Une chaîne vide ne peut pas utiliser les fonctions standard pour les
chaines


de caractères (du type Between par exemple).
Il faut utiliser une fonction NZ() dans Access ou un ISNULL() en SQL

Essaye :

SELECT DISTINCTROW TableProprio.Article, TableProprio.Nom,
TableBien.Div, TableBien.Sect, TableBien.Radical, TableBien.ExposLet,
TableBien.ExposDigit, TableBien.[Adresse bien], TableBien.Contenance,
FROM TableProprio
INNER JOIN TableBien ON TableProprio.Article = TableBien.Article
WHERE TableBien.Div = 3
AND TableBien.Sect='F'
AND (TableBien.Radical BETWEEN 1 AND 1)
AND (NZ(TableBien.ExposLet, '') Between '' AND '')
AND (NZ(ExposDigit, '') Between '' AND '');.

ou (pour les deux dernières lignes)

AND (ISNULL(TableBien.ExposLet, '') Between '' AND '')
AND (ISNULL(ExposDigit, '') Between '' AND '');.


Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"defluc" wrote in message
news:

Bonjour et meilleur voeux à tous.

J'ai plusieurs applications qui fonctionnent avec des requêtes qui
comportent des champs vides dans la clause Where du genre :
SELECT DISTINCTROW TableProprio.Article, TableProprio.Nom,
TableBien.Div, TableBien.Sect, TableBien.Radical, TableBien.ExposLet,
TableBien.ExposDigit, TableBien.[Adresse bien], TableBien.Contenance,
FROM TableProprio INNER JOIN TableBien ON TableProprio.Article > >>TableBien.Article
WHERE TableBien.Div= 3 AND TableBien.Sect='F' AND (TableBien.Radical
BETWEEN 1 AND 1) AND (TableBien.ExposLet Between '' AND '') AND
(ExposDigit Between '' AND '');.

Je viens d'en écrire une nouvelle sur d'autres tables et aucun
enregistrement ne m'est renvoyé si je ne supprime pas les deux derniers
champs vides alors que les chaîne vides sont autorisées et que les
chaînes nulles ne sont pas interdites .

Qu'est-ce qui cloche ?

Merci d'avance