OVH Cloud OVH Cloud

Pour Michel Walsh

6 réponses
Avatar
Luis
Bonjour,
Il y a quelques temps tu m'avais dit comment faire une=20
s=E9lection multiple dans un =E9tat, depuis j'ai fait un=20
Etat pricipal avec des sous-=E9tats mais je n'arrive pas =E0=20
inclure les formules que tu m'avais donn=E9.
Pour m=E9moire voici ta solution:
Je commence par les faciles.

2).
SELECT * FROM tatable WHERE NomD=E9but=3DDate( )

(j'imagine que NomD=E9but est le champ "date pr=E9vue =E0=20
laquelle
l'employ=E9 commance sont travail " ).

On peut obtenir le compte des enregistrements avec

SELECT COUNT(*) FROM tatable WHERE NomD=E9but=3DDate( )


Mais on ne sait pas si une personne est assign=E9 =E0=20
deux travaux en m=EAme
temps (quelconque erreur de saisie, par exemple).

SELECT COUNT(*) FROM ( SELECT DISTINCT NomEmploy=E9=20
FROM tatable WHERE
NomD=E9but=3DDate() )

par contre founira le nombe distincts d'employ=E9s qui=20
commenceraient
demain.


4).

SELECT * FROM tatable WHERE Datepr=E9vueD=E9but=3DDate( ) +=20
1

Voir 2. pour autres commentaires.


6).

pas la moindre id=E9e de ce qui est demand=E9, l=E0,=20
d=E9sol=E9. J'esp=E8re ne
pas couler l'interro...


1).

SELECT * FROM tatable WHERE Date() BETWEEN NomD=E9but=20
AND Nz(DateFin,
NomDatepr=E9vuFin)


Je suppose que DateFin est NULL tant que le contrat=20
n'est pas
effectivement termn=E9. Si NomDatePr=E9vuFin n'est pas mise =E0=20
jour
quotidionnellement, essayer plut=F4t quelque chose comme


SELECT * FROM tatable WHERE Date() >=3D NomD=E9but AND=20
DateFin IS NULL

soit, que le contrat a commenc=E9, mais n'est pas encore=20
termin=E9 (DateFin IS
NULL impliquant la derni=E8re observation).



5).

SELECT * FROM tatable WHERE ((Date()+1) BETWEEN=20
NomD=E9but AND Nz(DateFin,
NomDatePr=E9vuFin))


3).

Celle-ci est un peu plus compliqu=E9e. Je vais=20
proc=E9der en plusieurs
petites =E9tapes. D'une part qui est =E0 consid=E9r=E9? question=20
b=EAte? pas
vraiment, par exemple, moi, je ne serai pas parmi ceux=20
qui travaillent, dans
TA liste, demain. Donc,

SELECT DISTINCT NomEmploy=E9 FROM tatable

est une premi=E8re requ=EAte fournissant "l'univers" sur=20
lequel on est
int=E9ress=E9. J'appelle cette requ=EAte (table, si elle existe=20
d=E9j=E0) Employ=E9s.


Ensuite, ce qui est facile, c'est de trouver ceux qui=20
travaillent
demain. C"est le cas 1). Appelons cette requ=EAtes =20
Actifs (comme dans
employ=E9s actifs).


La liste des employ=E9s innactifs demain est donc la=20
liste des employ=E9s
qui sont dans Employ=E9s, mais non dans Actifs. Bingo, il y=20
a un Wizard qui le
fait, le code qu'il g=E9n=E8re devrait ressembler =E0:


SELECT Employ=E9s.* FROM Employ=E9s LEFT JOIN Actifs ON=20
Employ=E9s.NomEmploy=E9
=3DActifs.NomEmploy=E9 WHERE Actifs.NomEmploy=E9 IS NULL


=C0 noter que cela ne signifie pas qu'un employ=E9 ne=20
sera pas actif DEMAIN,
seulement qu'il ne l'est pas, aujourd'hui.



=C0 noter qu'en d=E9pit des apparences, quand on regarde=20
les d=E9tails, il
demeure beaucoup d'impr=E9cisions qui sont reli=E9es aux=20
politiques et
proc=E9dures de la compagnie.



Esp=E9rant =EAtre utile,
Vanderghast, Access MVP

Merci de me d=E9panner.
Luis

6 réponses

Avatar
Michel Walsh
Salut,


Je ne sais pas "faire une sélection multiple dans un état", peut-être
un typo, je ne sais que faire une sélection multiple dans une zone de liste
d'un formulaire (un état, pour moi, c'est sur du papier).

Ce qui est présenté sont des énoncés SQL qui peuvent servir à faire
des requêtes (queries) et on peut les utiliser là où on peut utiliser une
table, ou une requête. Entre autres, comme RecordSource, et comme RowSource
(voir ces propriétés pour un formulaire, pour le premier, et pour une zone
de liste ou un combo box, pour la seconde) par exemple. On peut modifier le
RecordSource d'un état sur ouverture, dans les procédures onOpen et onLoad,
si ma mémoire m'est fidèle, mais pas ailleurs. On peut également utilser les
requêtes ou l'énoncé SQL pour ouvrir un recordset. Pour les fonctions de
domaine, genre DSum, DCount, ..., le second argument ne peut pas être un
énoncé SQL, mais doit être une requête sauvegargée (ou une table).


Si je n'ai pas répondu à la question, faire suivre dans ce filet de
conversation, svp.



Espérant être utile,
Vanderghast, Access MVP



"Luis" wrote in message
news:082b01c3d9c7$db915540$
Bonjour,
Il y a quelques temps tu m'avais dit comment faire une
sélection multiple dans un état, depuis j'ai fait un
Etat pricipal avec des sous-états mais je n'arrive pas à
inclure les formules que tu m'avais donné.
Pour mémoire voici ta solution:
Je commence par les faciles.

2).
SELECT * FROM tatable WHERE NomDébutÚte( )

(j'imagine que NomDébut est le champ "date prévue à
laquelle
l'employé commance sont travail " ).

On peut obtenir le compte des enregistrements avec

SELECT COUNT(*) FROM tatable WHERE NomDébutÚte( )


Mais on ne sait pas si une personne est assigné à
deux travaux en même
temps (quelconque erreur de saisie, par exemple).

SELECT COUNT(*) FROM ( SELECT DISTINCT NomEmployé
FROM tatable WHERE
NomDébutÚte() )

par contre founira le nombe distincts d'employés qui
commenceraient
demain.


4).

SELECT * FROM tatable WHERE DateprévueDébutÚte( ) +
1

Voir 2. pour autres commentaires.


6).

pas la moindre idée de ce qui est demandé, là,
désolé. J'espère ne
pas couler l'interro...


1).

SELECT * FROM tatable WHERE Date() BETWEEN NomDébut
AND Nz(DateFin,
NomDateprévuFin)


Je suppose que DateFin est NULL tant que le contrat
n'est pas
effectivement termné. Si NomDatePrévuFin n'est pas mise à
jour
quotidionnellement, essayer plutôt quelque chose comme


SELECT * FROM tatable WHERE Date() >= NomDébut AND
DateFin IS NULL

soit, que le contrat a commencé, mais n'est pas encore
terminé (DateFin IS
NULL impliquant la dernière observation).



5).

SELECT * FROM tatable WHERE ((Date()+1) BETWEEN
NomDébut AND Nz(DateFin,
NomDatePrévuFin))


3).

Celle-ci est un peu plus compliquée. Je vais
procéder en plusieurs
petites étapes. D'une part qui est à considéré? question
bête? pas
vraiment, par exemple, moi, je ne serai pas parmi ceux
qui travaillent, dans
TA liste, demain. Donc,

SELECT DISTINCT NomEmployé FROM tatable

est une première requête fournissant "l'univers" sur
lequel on est
intéressé. J'appelle cette requête (table, si elle existe
déjà) Employés.


Ensuite, ce qui est facile, c'est de trouver ceux qui
travaillent
demain. C"est le cas 1). Appelons cette requêtes
Actifs (comme dans
employés actifs).


La liste des employés innactifs demain est donc la
liste des employés
qui sont dans Employés, mais non dans Actifs. Bingo, il y
a un Wizard qui le
fait, le code qu'il génère devrait ressembler à:


SELECT Employés.* FROM Employés LEFT JOIN Actifs ON
Employés.NomEmployé
¬tifs.NomEmployé WHERE Actifs.NomEmployé IS NULL


À noter que cela ne signifie pas qu'un employé ne
sera pas actif DEMAIN,
seulement qu'il ne l'est pas, aujourd'hui.



À noter qu'en dépit des apparences, quand on regarde
les détails, il
demeure beaucoup d'imprécisions qui sont reliées aux
politiques et
procédures de la compagnie.



Espérant être utile,
Vanderghast, Access MVP

Merci de me dépanner.
Luis
Avatar
Luis
Bonjour,
Voilà ou est le problème:

Si j'introduis:
SELECT * FROM tatable WHERE NomDébutÚte( )

dans la source contrôle, j'ai ce premier message:
"Cette expression comporte une sous-requête erronée.
Placez la sous requête entre parenthèses."

(SELECT * FROM tatable WHERE NomDébutÚte( ))

La voilà entre parenthèses.
Mais lorsque j'ouvre le formulaire, j'ai un avis:
"Entrez la valeur du paramètre
(SELECT * FROM tatable WHERE NomDébutÚte( ))"

C'est pourquoi je tourne en rond.
Qu'est-ce qui est faux?
Merci pour ton aide.
Luis
-----Message d'origine-----
Salut,


Je ne sais pas "faire une sélection multiple dans
un état", peut-être

un typo, je ne sais que faire une sélection multiple
dans une zone de liste

d'un formulaire (un état, pour moi, c'est sur du papier).

Ce qui est présenté sont des énoncés SQL qui
peuvent servir à faire

des requêtes (queries) et on peut les utiliser là où on
peut utiliser une

table, ou une requête. Entre autres, comme RecordSource,
et comme RowSource

(voir ces propriétés pour un formulaire, pour le
premier, et pour une zone

de liste ou un combo box, pour la seconde) par exemple.
On peut modifier le

RecordSource d'un état sur ouverture, dans les
procédures onOpen et onLoad,

si ma mémoire m'est fidèle, mais pas ailleurs. On peut
également utilser les

requêtes ou l'énoncé SQL pour ouvrir un recordset. Pour
les fonctions de

domaine, genre DSum, DCount, ..., le second argument ne
peut pas être un

énoncé SQL, mais doit être une requête sauvegargée (ou
une table).



Si je n'ai pas répondu à la question, faire suivre
dans ce filet de

conversation, svp.



Espérant être utile,
Vanderghast, Access MVP



"Luis" wrote in
message

news:082b01c3d9c7$db915540$
Bonjour,
Il y a quelques temps tu m'avais dit comment faire une
sélection multiple dans un état, depuis j'ai fait un
Etat pricipal avec des sous-états mais je n'arrive pas à
inclure les formules que tu m'avais donné.
Pour mémoire voici ta solution:
Je commence par les faciles.

2).
SELECT * FROM tatable WHERE NomDébutÚte( )

(j'imagine que NomDébut est le champ "date prévue à
laquelle
l'employé commance sont travail " ).

On peut obtenir le compte des enregistrements avec

SELECT COUNT(*) FROM tatable WHERE NomDébutÚte( )


Mais on ne sait pas si une personne est assigné à
deux travaux en même
temps (quelconque erreur de saisie, par exemple).

SELECT COUNT(*) FROM ( SELECT DISTINCT NomEmployé
FROM tatable WHERE
NomDébutÚte() )

par contre founira le nombe distincts d'employés qui
commenceraient
demain.


4).

SELECT * FROM tatable WHERE DateprévueDébutÚte( ) +
1

Voir 2. pour autres commentaires.


6).

pas la moindre idée de ce qui est demandé, là,
désolé. J'espère ne
pas couler l'interro...


1).

SELECT * FROM tatable WHERE Date() BETWEEN NomDébut
AND Nz(DateFin,
NomDateprévuFin)


Je suppose que DateFin est NULL tant que le contrat
n'est pas
effectivement termné. Si NomDatePrévuFin n'est pas mise à
jour
quotidionnellement, essayer plutôt quelque chose comme


SELECT * FROM tatable WHERE Date() >= NomDébut AND
DateFin IS NULL

soit, que le contrat a commencé, mais n'est pas encore
terminé (DateFin IS
NULL impliquant la dernière observation).



5).

SELECT * FROM tatable WHERE ((Date()+1) BETWEEN
NomDébut AND Nz(DateFin,
NomDatePrévuFin))


3).

Celle-ci est un peu plus compliquée. Je vais
procéder en plusieurs
petites étapes. D'une part qui est à considéré? question
bête? pas
vraiment, par exemple, moi, je ne serai pas parmi ceux
qui travaillent, dans
TA liste, demain. Donc,

SELECT DISTINCT NomEmployé FROM tatable

est une première requête fournissant "l'univers" sur
lequel on est
intéressé. J'appelle cette requête (table, si elle existe
déjà) Employés.


Ensuite, ce qui est facile, c'est de trouver ceux qui
travaillent
demain. C"est le cas 1). Appelons cette requêtes
Actifs (comme dans
employés actifs).


La liste des employés innactifs demain est donc la
liste des employés
qui sont dans Employés, mais non dans Actifs. Bingo, il y
a un Wizard qui le
fait, le code qu'il génère devrait ressembler à:


SELECT Employés.* FROM Employés LEFT JOIN Actifs ON
Employés.NomEmployé
¬tifs.NomEmployé WHERE Actifs.NomEmployé IS NULL


À noter que cela ne signifie pas qu'un employé ne
sera pas actif DEMAIN,
seulement qu'il ne l'est pas, aujourd'hui.



À noter qu'en dépit des apparences, quand on regarde
les détails, il
demeure beaucoup d'imprécisions qui sont reliées aux
politiques et
procédures de la compagnie.



Espérant être utile,
Vanderghast, Access MVP

Merci de me dépanner.
Luis


.



Avatar
Michel Walsh
Salut,


La source du CONTROLE est une expression ou un champ, provenant de la
source du FORMULAIRE. J'ignore la traduction exacte, c'est pourquoi
j'utilise les expressions anglaises: Le RecordSource, du formulaire, doit
recevoir l'énoncé SQL; le ControlSource d'un contrôle reçoit le nom d'un
des champs de la requête. Il semble qu'on essaierait de spécifier un énoncé
SQL dans un ControlSource, il ne faut pas, c'est dans le RecordSource qu'on
peut placer un énoncé SQL (ou dans un RowSource).


Vanderghast, Access MVP
Avatar
Luis
Bonjour,
Excuse mon ignorance.
C'est exactement ce que j'ai fais j'ai spécifié l'énoncé
SQL dans un controlSource.
Ou se trouve le RecordSource dans un état?
Merci.
Luis
-----Message d'origine-----
Salut,


La source du CONTROLE est une expression ou un
champ, provenant de la

source du FORMULAIRE. J'ignore la traduction exacte,
c'est pourquoi

j'utilise les expressions anglaises: Le RecordSource,
du formulaire, doit

recevoir l'énoncé SQL; le ControlSource d'un contrôle
reçoit le nom d'un

des champs de la requête. Il semble qu'on essaierait de
spécifier un énoncé

SQL dans un ControlSource, il ne faut pas, c'est dans le
RecordSource qu'on

peut placer un énoncé SQL (ou dans un RowSource).


Vanderghast, Access MVP


.



Avatar
Michel Walsh
Salut,


Lorsque l'état a le focus, en mode design, la toute première
propriété est RecordSource (en anglais), sous l'onglet ALL et est suivi de
Filter, FilterOn, OrderBy, OrderByOn, ...

Le ControlSource, quant à lui, n'est disponible que si c'est un
contrôle qui a le focus.

Pour mettre l'état en focus, en mode design, il faut cliquer sur le
tout petit carré à la toute gauche de l'échelle millimétrique (en fait,
centimétrique), immédiatement dessous la barre de la fenêtre.



Espérant être utile,
Vanderghast, Access MVP

"Luis" wrote in message
news:083501c3da76$a0296790$
Bonjour,
Excuse mon ignorance.
C'est exactement ce que j'ai fais j'ai spécifié l'énoncé
SQL dans un controlSource.
Ou se trouve le RecordSource dans un état?
Merci.
Luis
-----Message d'origine-----
Salut,


La source du CONTROLE est une expression ou un
champ, provenant de la

source du FORMULAIRE. J'ignore la traduction exacte,
c'est pourquoi

j'utilise les expressions anglaises: Le RecordSource,
du formulaire, doit

recevoir l'énoncé SQL; le ControlSource d'un contrôle
reçoit le nom d'un

des champs de la requête. Il semble qu'on essaierait de
spécifier un énoncé

SQL dans un ControlSource, il ne faut pas, c'est dans le
RecordSource qu'on

peut placer un énoncé SQL (ou dans un RowSource).


Vanderghast, Access MVP


.



Avatar
Luis
Bonjour,
Merci pour les infos, j'ai placé les requêtes comme tu me
le dis et j'ai un message d'erreur.
MoteurJet ne trouve pas la table.
Je ne comprend pas pourquoi?
Luis
-----Message d'origine-----
Salut,


Lorsque l'état a le focus, en mode design, la
toute première

propriété est RecordSource (en anglais), sous l'onglet
ALL et est suivi de

Filter, FilterOn, OrderBy, OrderByOn, ...

Le ControlSource, quant à lui, n'est disponible
que si c'est un

contrôle qui a le focus.

Pour mettre l'état en focus, en mode design, il
faut cliquer sur le

tout petit carré à la toute gauche de l'échelle
millimétrique (en fait,

centimétrique), immédiatement dessous la barre de la
fenêtre.




Espérant être utile,
Vanderghast, Access MVP

"Luis" wrote in
message

news:083501c3da76$a0296790$
Bonjour,
Excuse mon ignorance.
C'est exactement ce que j'ai fais j'ai spécifié l'énoncé
SQL dans un controlSource.
Ou se trouve le RecordSource dans un état?
Merci.
Luis
-----Message d'origine-----
Salut,


La source du CONTROLE est une expression ou un
champ, provenant de la

source du FORMULAIRE. J'ignore la traduction exacte,
c'est pourquoi

j'utilise les expressions anglaises: Le RecordSource,
du formulaire, doit

recevoir l'énoncé SQL; le ControlSource d'un contrôle
reçoit le nom d'un

des champs de la requête. Il semble qu'on essaierait de
spécifier un énoncé

SQL dans un ControlSource, il ne faut pas, c'est dans le
RecordSource qu'on

peut placer un énoncé SQL (ou dans un RowSource).


Vanderghast, Access MVP


.




.