Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/05/2011, 18h36   #1
Nouveau Membre du Club
 
Inscription : septembre 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 181
Points : 37
Points : 37
Par défaut Clause Where 2=1

Est-ce que quelqu'un connait la signification de la clause where ou 2=1? Je n'ai rien trouvé dans la doc.

Code :
.CommandText = "SELECT ATE.*, ATEPartNumber.strPartNumber" & ",ATEPartNumber.strDescription FROM ATE,ATEPartNumber where 2=1"
merci
acheo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 20h54   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Pour moi, WHERE 2=1 c'est équivalent à WHERE False .

Ou c'est une erreur ou ça sert à retourner un jeu d'enregistrement vide

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 23h37   #3
Nouveau Membre du Club
 
Inscription : septembre 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 181
Points : 37
Points : 37
Le code que je suis en train de vérifier en contient beaucoup et j'essaie de comprendre qu'elle en était la raison. Voici un autre exemple:

Code :
1
2
3
4
5
6
Set rstAnalysePass = New Recordset
                'SELECT NOTHING
                rstAnalysePass.Open "select ate.strProject as Pass from ate where 1=2", mDBResult, adOpenKeyset, adLockOptimistic, adCmdText
                rstAnalysePass.AddNew
                rstAnalysePass!Pass = "N/A"
                blnFirstPass = False
acheo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 11h51   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

C'est peut-être pour optimiser les performances du code.
L'extrait de code réalise un ajout de données par l'intermédiaire d'un recordset.
Avec une clause WHERE toujours fausse, on ouvre un recordset vide.
Cela évite de charger le recordset avec tout le jeu de données, dont on n'a pas besoin si on ne veut faire que de l'ajout.
On économise sur le temps de transfert du jeu de données dans le recordset.

On peut faire une analogie avec un formulaire en mode entrée de données.
A l'ouverture on a aucun enregistrement. On peut en ajouter et naviguer parmi les enregistrements que l'on vient d'ajouter.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 14h43   #5
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
salut acheo et LedZeppII

Citation:
Envoyé par LedZeppII
On économise sur le temps de transfert du jeu de données dans le recordset.
je suis pas vraiment convaincu de l'optimisation.
si je ne me trompe le recordset se construit chez le client après transfert des données. et mettre un where oblige un traitement de comparaison sur l'ensemble des enregistrements (à moins qu'il y ai une optimisation en cas de false ce qui conduit à une évaluation systématique de la clause where qui ne parait pas évident) alors qu'une ouverture d'un recordset sans clause ouvre que partiellement le contenu de celui-ci.
avec adOpenKeyset le contenu est déjà minimalisé...
de plus une requete "insert into" serait sans doute plus optimal.

donc, je suis pas convaincu qu'un where false soit plus rapide que sans clause.
mais c'est sur, le recordset finale est vide donc consomme peu de ressource et si le maintient d'ouverture du recordset est justifié ca reste, si ce n'est une une réelle optimisation, du moins une tentative.
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 18h50   #6
Nouveau Membre du Club
 
Inscription : septembre 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 181
Points : 37
Points : 37
D'accord. A la lumière de vos explications, je pense que je vais laisser le code tel quel en attendant d'avoir d'autre information.

Un gros merci à vous tous....très apprécié.

Acheo
acheo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h05.


 
 
 
 
Partenaires

Hébergement Web