OVH Cloud OVH Cloud

Paramètre dans SELECT

7 réponses
Avatar
Kolonna
Bonjour à tous,

dans une simple requête de ce style

SELECT champs1, champs2,...

j'aimerai, en fonction d'un contrôle, pouvoir déterminer la sélection ou non
d'un champs (et donc son affichage colonne dans le résultat de la requête).

J'arrive à rendre la colonne vide, mais pas à la masquer complètement.
Quelqu'un a-t-il une solution ?

Merci d'avance.
Kolonna.

7 réponses

Avatar
Eric
Bonjour Kolonna,


Un formulaire avec une case à cocher nommée Cocher0. Sur mise à jour de
la case à cocher, la procédure suivante me montre ou non la colonne
Societe_Client.

Private Sub Cocher0_AfterUpdate()
Dim strSQL As String
Dim qry As DAO.QueryDef
strSQL = "select societe_client,contact_client,ville_client from
tclient"
If Cocher0.Value Then
strSQL = Replace(strSQL, "societe_client,", "")
End If
Set qry = CurrentDb.CreateQueryDef("tmp", strSQL)
DoCmd.OpenQuery ("tmp")
Set qry = Nothing
CurrentDb.QueryDefs.Delete "tmp"
End Sub

Attention s'il s'agit du dernier champ de la clause Select de la requête
car absence de la virgule.

Cela répond-il à ta demande ?

A+
Eric


"=?Utf-8?B?S29sb25uYQ==?=" écrivait
news::

Bonjour à tous,

dans une simple requête de ce style

SELECT champs1, champs2,...

j'aimerai, en fonction d'un contrôle, pouvoir déterminer la
sélection ou non d'un champs (et donc son affichage colonne dans le
résultat de la requête).

J'arrive à rendre la colonne vide, mais pas à la masquer
complètement. Quelqu'un a-t-il une solution ?

Merci d'avance.
Kolonna.




Avatar
Raymond [mvp]
Bonjour.

si tu ne veux pas faire apparaître la colonne dans la requête il faut
construire ta requête en vba et en fonction du contrôle tu ajoutes ou non la
colonne; il est possible également de conserver la colonne dans la requête
et de ne la traiter que selon la valeur du contrôle.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Kolonna" a écrit dans le message de
news:
Bonjour à tous,

dans une simple requête de ce style

SELECT champs1, champs2,...

j'aimerai, en fonction d'un contrôle, pouvoir déterminer la sélection ou
non
d'un champs (et donc son affichage colonne dans le résultat de la
requête).

J'arrive à rendre la colonne vide, mais pas à la masquer complètement.
Quelqu'un a-t-il une solution ?

Merci d'avance.
Kolonna.




Avatar
Kolonna
Merci !

P'tite question complémentaire, puisque je vois que je vais être obligé de
me mettre aux requêtes via vba...

Peux-tu m'indiquer comment construire cette requête selection en vba ?
J'ai essayé comme ceci, via un bouton:

Private Sub bouton_Click()

Dim StrSql As String
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
StrSql = "Select * from table1;"
Set Db = CurrentDb
Set Rs = Db.OpenRecordset(StrSql)

End Sub

mais rien ne s'ouvre !!
J'ai surement dû raté un truc...

Merci d'avance,
Kolonna.



Bonjour Kolonna,


Un formulaire avec une case à cocher nommée Cocher0. Sur mise à jour de
la case à cocher, la procédure suivante me montre ou non la colonne
Societe_Client.

Private Sub Cocher0_AfterUpdate()
Dim strSQL As String
Dim qry As DAO.QueryDef
strSQL = "select societe_client,contact_client,ville_client from
tclient"
If Cocher0.Value Then
strSQL = Replace(strSQL, "societe_client,", "")
End If
Set qry = CurrentDb.CreateQueryDef("tmp", strSQL)
DoCmd.OpenQuery ("tmp")
Set qry = Nothing
CurrentDb.QueryDefs.Delete "tmp"
End Sub

Attention s'il s'agit du dernier champ de la clause Select de la requête
car absence de la virgule.

Cela répond-il à ta demande ?

A+
Eric


"=?Utf-8?B?S29sb25uYQ==?=" écrivait
news::

Bonjour à tous,

dans une simple requête de ce style

SELECT champs1, champs2,...

j'aimerai, en fonction d'un contrôle, pouvoir déterminer la
sélection ou non d'un champs (et donc son affichage colonne dans le
résultat de la requête).

J'arrive à rendre la colonne vide, mais pas à la masquer
complètement. Quelqu'un a-t-il une solution ?

Merci d'avance.
Kolonna.








Avatar
Gafish
Bonjour,

En fait ton code est bon, mais si rien ne s'ouvre c'est normal.
En fait tu viens de créer un recordset qui contient toutes les données
correspondant à ta requête.
Maintenant tout dépend ce que tu veux faire de tes données.
Si tu veux les mettres source d'un état ou d'un form, tu n'as pas besoin de
recordset.
Si tu veux parcourir tes données en vba pour faire des traitement tu peux,
par exemple comme suit :

Do While Not Rs.EOF
'ici tu mets ton traitement
Rs.Movenext
Loop

le code suivant permet de boucler ligne à ligne dans ton recordset jusqu'à
la fin de fichier.
Si tu veux afficher un champ, tu peux mettre à la place de 'ici tu mets ton
traitement :

Msgbox Rs.Fields("NomDeTonChamp")

ici le msgbox permet l'affichage, et fields permet de récupérer un champ
nommé entre les guillemets.

Bref, tout dépend de ce que tu veux faire au final

Arnaud

"Kolonna" a écrit dans le message news:

Merci !

P'tite question complémentaire, puisque je vois que je vais être obligé de
me mettre aux requêtes via vba...

Peux-tu m'indiquer comment construire cette requête selection en vba ?
J'ai essayé comme ceci, via un bouton:

Private Sub bouton_Click()

Dim StrSql As String
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
StrSql = "Select * from table1;"
Set Db = CurrentDb
Set Rs = Db.OpenRecordset(StrSql)

End Sub

mais rien ne s'ouvre !!
J'ai surement dû raté un truc...

Merci d'avance,
Kolonna.



Bonjour Kolonna,


Un formulaire avec une case à cocher nommée Cocher0. Sur mise à jour de
la case à cocher, la procédure suivante me montre ou non la colonne
Societe_Client.

Private Sub Cocher0_AfterUpdate()
Dim strSQL As String
Dim qry As DAO.QueryDef
strSQL = "select societe_client,contact_client,ville_client from
tclient"
If Cocher0.Value Then
strSQL = Replace(strSQL, "societe_client,", "")
End If
Set qry = CurrentDb.CreateQueryDef("tmp", strSQL)
DoCmd.OpenQuery ("tmp")
Set qry = Nothing
CurrentDb.QueryDefs.Delete "tmp"
End Sub

Attention s'il s'agit du dernier champ de la clause Select de la requête
car absence de la virgule.

Cela répond-il à ta demande ?

A+
Eric


"=?Utf-8?B?S29sb25uYQ==?=" écrivait
news::

Bonjour à tous,

dans une simple requête de ce style

SELECT champs1, champs2,...

j'aimerai, en fonction d'un contrôle, pouvoir déterminer la
sélection ou non d'un champs (et donc son affichage colonne dans le
résultat de la requête).

J'arrive à rendre la colonne vide, mais pas à la masquer
complètement. Quelqu'un a-t-il une solution ?

Merci d'avance.
Kolonna.










Avatar
Kolonna
Ok, grand merci.
J'ai enfin compris comment çà fonctionne...


Merci,
Kolonna.


Bonjour,

En fait ton code est bon, mais si rien ne s'ouvre c'est normal.
En fait tu viens de créer un recordset qui contient toutes les données
correspondant à ta requête.
Maintenant tout dépend ce que tu veux faire de tes données.
Si tu veux les mettres source d'un état ou d'un form, tu n'as pas besoin de
recordset.
Si tu veux parcourir tes données en vba pour faire des traitement tu peux,
par exemple comme suit :

Do While Not Rs.EOF
'ici tu mets ton traitement
Rs.Movenext
Loop

le code suivant permet de boucler ligne à ligne dans ton recordset jusqu'à
la fin de fichier.
Si tu veux afficher un champ, tu peux mettre à la place de 'ici tu mets ton
traitement :

Msgbox Rs.Fields("NomDeTonChamp")

ici le msgbox permet l'affichage, et fields permet de récupérer un champ
nommé entre les guillemets.

Bref, tout dépend de ce que tu veux faire au final

Arnaud

"Kolonna" a écrit dans le message news:

Merci !

P'tite question complémentaire, puisque je vois que je vais être obligé de
me mettre aux requêtes via vba...

Peux-tu m'indiquer comment construire cette requête selection en vba ?
J'ai essayé comme ceci, via un bouton:

Private Sub bouton_Click()

Dim StrSql As String
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
StrSql = "Select * from table1;"
Set Db = CurrentDb
Set Rs = Db.OpenRecordset(StrSql)

End Sub

mais rien ne s'ouvre !!
J'ai surement dû raté un truc...

Merci d'avance,
Kolonna.



Bonjour Kolonna,


Un formulaire avec une case à cocher nommée Cocher0. Sur mise à jour de
la case à cocher, la procédure suivante me montre ou non la colonne
Societe_Client.

Private Sub Cocher0_AfterUpdate()
Dim strSQL As String
Dim qry As DAO.QueryDef
strSQL = "select societe_client,contact_client,ville_client from
tclient"
If Cocher0.Value Then
strSQL = Replace(strSQL, "societe_client,", "")
End If
Set qry = CurrentDb.CreateQueryDef("tmp", strSQL)
DoCmd.OpenQuery ("tmp")
Set qry = Nothing
CurrentDb.QueryDefs.Delete "tmp"
End Sub

Attention s'il s'agit du dernier champ de la clause Select de la requête
car absence de la virgule.

Cela répond-il à ta demande ?

A+
Eric


"=?Utf-8?B?S29sb25uYQ==?=" écrivait
news::

Bonjour à tous,

dans une simple requête de ce style

SELECT champs1, champs2,...

j'aimerai, en fonction d'un contrôle, pouvoir déterminer la
sélection ou non d'un champs (et donc son affichage colonne dans le
résultat de la requête).

J'arrive à rendre la colonne vide, mais pas à la masquer
complètement. Quelqu'un a-t-il une solution ?

Merci d'avance.
Kolonna.















Avatar
Eric
Re,

En complément de la réponse de Gafish,

Dans le code que tu donnes(il est bon), tu déclares un Recordset et puis
tu l'ouvres par la méthode OpenRecordset mais tu ne mets pas de
traitement derrière, donc il est normal que rien ne s'affiche.
(A retenir : OpenRecordset n'affiche rien mais permet d'avoir accès aux
champs du jeu d'enregistrements)

Si tu veux créer ta requête en VBA, tu dois déclarer un Objet Querydef
puis définir ton SQL, créer la requête et enfin l'ouvrir.
Pour reprendre ton exemple :
Private Sub bouton_Click()
Dim StrSql As String
Dim Db As DAO.Database
Dim qry as DAO.QueryDef <------ Ici
StrSql = "Select * from table1;"
Set Db = CurrentDb
Set qry = Db.CreateQueryDef("NomRequête", StrSQL) <-- et là
DoCmd.OpenQuery "NomRequête" <--- là aussi
Set qry = Nothing
End Sub

Il te faut savoir que cette requête va être enregistrée dans la
collection des requêtes. Elle figurera dans l'Onglet Requêtes de la
fenêtre de la base de données. Donc si tu relances la procédure en
recliquant sur le bouton tu auras une erreur car tu essaies de créer une
requête portant un nom déjà affecté.
Pour l'éviter, avant le End Sub tu mets :

Db.QueryDefs.Delete "NomRequête"

Dans la base courante, dans la collection des Requêtes, tu demandes à
supprimer la requête dont le nom est NomRequête.

La requête est alors supprimée et sera reconstruite lors du clic sur le
bouton. La fenetre retournant le jeu d'enregistrements n'en est pas
affectée tant que tu ne la fermes pas.

C'est plus clair ?


A+
Eric


"=?Utf-8?B?S29sb25uYQ==?=" écrivait
news::

Merci !

P'tite question complémentaire, puisque je vois que je vais être
obligé de me mettre aux requêtes via vba...

Peux-tu m'indiquer comment construire cette requête selection en vba
? J'ai essayé comme ceci, via un bouton:

Private Sub bouton_Click()

Dim StrSql As String
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
StrSql = "Select * from table1;"
Set Db = CurrentDb
Set Rs = Db.OpenRecordset(StrSql)

End Sub

mais rien ne s'ouvre !!
J'ai surement dû raté un truc...

Merci d'avance,
Kolonna.




Avatar
Kolonna
Merci Eric pour ces précisions!!
J'ai tenté un mix, qui semble marcher...

Dim StrSql As String
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs!Requete
qdf.SQL = "SELECT..."
DoCmd.OpenQuery "Requete"
Set qdf = Nothing

et qui, d'après ce que j'ai compris dans vos différentes explications, doit
modifier une requête existante.
Tu me conseilles de modifier une requête existante ou plutôt de créer et
supprimer une requête temporaire ?
Est ce que l'utilisation de la base par plusieurs users peut alors poser
problème ?

De nouveau merci !!
;-)

Kolonna.



Re,

En complément de la réponse de Gafish,

Dans le code que tu donnes(il est bon), tu déclares un Recordset et puis
tu l'ouvres par la méthode OpenRecordset mais tu ne mets pas de
traitement derrière, donc il est normal que rien ne s'affiche.
(A retenir : OpenRecordset n'affiche rien mais permet d'avoir accès aux
champs du jeu d'enregistrements)

Si tu veux créer ta requête en VBA, tu dois déclarer un Objet Querydef
puis définir ton SQL, créer la requête et enfin l'ouvrir.
Pour reprendre ton exemple :
Private Sub bouton_Click()
Dim StrSql As String
Dim Db As DAO.Database
Dim qry as DAO.QueryDef <------ Ici
StrSql = "Select * from table1;"
Set Db = CurrentDb
Set qry = Db.CreateQueryDef("NomRequête", StrSQL) <-- et là
DoCmd.OpenQuery "NomRequête" <--- là aussi
Set qry = Nothing
End Sub

Il te faut savoir que cette requête va être enregistrée dans la
collection des requêtes. Elle figurera dans l'Onglet Requêtes de la
fenêtre de la base de données. Donc si tu relances la procédure en
recliquant sur le bouton tu auras une erreur car tu essaies de créer une
requête portant un nom déjà affecté.
Pour l'éviter, avant le End Sub tu mets :

Db.QueryDefs.Delete "NomRequête"

Dans la base courante, dans la collection des Requêtes, tu demandes à
supprimer la requête dont le nom est NomRequête.

La requête est alors supprimée et sera reconstruite lors du clic sur le
bouton. La fenetre retournant le jeu d'enregistrements n'en est pas
affectée tant que tu ne la fermes pas.

C'est plus clair ?


A+
Eric


"=?Utf-8?B?S29sb25uYQ==?=" écrivait
news::

Merci !

P'tite question complémentaire, puisque je vois que je vais être
obligé de me mettre aux requêtes via vba...

Peux-tu m'indiquer comment construire cette requête selection en vba
? J'ai essayé comme ceci, via un bouton:

Private Sub bouton_Click()

Dim StrSql As String
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
StrSql = "Select * from table1;"
Set Db = CurrentDb
Set Rs = Db.OpenRecordset(StrSql)

End Sub

mais rien ne s'ouvre !!
J'ai surement dû raté un truc...

Merci d'avance,
Kolonna.