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 08/11/2011, 18h58   #1
Membre du Club
 
beauchat symba
Inscription : janvier 2010
Messages : 95
Détails du profil
Informations personnelles :
Nom : beauchat symba

Informations forums :
Inscription : janvier 2010
Messages : 95
Points : 50
Points : 50
Par défaut passer des paramètres à une requête en VBA

Bonjour à tous

Je me suis largement inspiré de la faq (merci Drosera)
Comment utiliser en VBA une requête existante ?

Je veux récupérer tous les Enregistrements qui sont <>"R"
Le champ [Regul] est Texte et fait 1 caractère
Valeurs acceptées: "" ou R

et je recontre certainement un problème de syntaxe:
Code :
1
2
3
4
5
6
7
8
9
10
11
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset 
Set qdf = CurrentDb.QueryDefs("R_SomAbsMoisCGParam2")
'Passage des Params à la Requête
            qdf.Parameters("CléKs_Resident") = frmF1![CléK_RESIDENT] 
            qdf.Parameters("AnneeDebutAbsence") = frmF1![zdtAnneeDeSaisie]  
            qdf.Parameters("MoisDebutAbsence") = frmF1![zdtMoisDeSaisie]  
'*********** c'est le = Not "'R'" qui semble poser un problème  
            qdf.Parameters("RRegul") = Not "'R'"
     Set rst = qdf.OpenRecordset 
             If rst.RecordCount = 0 Then
J'ai bien essayé avec
Code :
 qdf.Parameters("RRegul") <> "'R'"
mais ça passe pas à la compilation

avec double cote et simple cote
Code :
1
2
qdf.Parameters("RRegul") = "''"
qdf.Parameters("RRegul") = "'R'"
passe bien la compilation mais ne renvoie rien alors que j'attends un résultat

J'enlève les simples cotes
Code :
1
2
qdf.Parameters("RRegul") = "R" 
qdf.Parameters("RRegul") = ""
ça passe pas non plus à la compilation !

J'ai aussi (pour vérifier) lancer la Requête en clicquant dessus
et saisi en dur les Paramètres demandés soit:
[RRegul] --> "" (2 Double cote) j'obtiens la réponse attendue
[RRegul] --> "R" (R entouré de double cote) j'obtiens la réponse attendue

Ce qui me fait penser à une mauvaise syntaxe mais je vois pas

Merci pour l'aide
Bonne soirée
symbabeauchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 20h34   #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,

Dans .Parameters("Nom Paramètre") on ne peut passer que la valeur du paramètre.
On ne peut pas passer l'opérateur de comparaison.

Citation:
Le champ [Regul] est Texte et fait 1 caractère
Valeurs acceptées: "" ou R
Code :
1
2
3
qdf.Parameters("RRegul") = ""
' ou
qdf.Parameters("RRegul") = "R"
Si ça ne fonctionne pas avec qdf.Parameters("RRegul") = "" il faut vérifier le contenu du champ RRegul.
Lorsqu'il ne contient pas "R" il se peut qu'il contienne Null, ou qu'au lieu de contenir "" il contienne " ".

S'il contient Null, il faudrait remplacer dans la requête, le critère par
Code sql :
Nz([Nom du champ], "") = [RRegul]

Pour tester le contenu du champ tu créer une requête :
Code :
1
2
SELECT IIf([NomDuChamp] Is Null,"Null",Asc([NomDuChamp])) AS TestChamp
FROM NomDeLaTable;
Si le champ NomDuChamp est Null la requête affiche Null, sinon elle affiche le code ascii.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/11/2011, 22h38   #3
Membre du Club
 
beauchat symba
Inscription : janvier 2010
Messages : 95
Détails du profil
Informations personnelles :
Nom : beauchat symba

Informations forums :
Inscription : janvier 2010
Messages : 95
Points : 50
Points : 50
Bonsoir à tous

Merci LedZeppII tu as bien vu !

Citation:
S'il contient Null, il faudrait remplacer dans la requête, le critère par
Code :
Nz([Nom du champ], "") = [RRegul]
Ce que j'ai fait

Citation:
Lorsqu'il ne contient pas "R" il se peut qu'il contienne Null, ou qu'au lieu de contenir "" il contienne " ".
Ben oui mon champ contenait des " "

Donc j'ai passé le paramètre avec un espace entre les doubles cote
Code :
qdf.Parameters("RRegul") = " "
et ça marche TipTop

Encore merci et bonne soirée
symbabeauchat 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 10h20.


 
 
 
 
Partenaires

Hébergement Web