Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Test auto de champs sur une table à l'ouverture d'un formulaire non fondé sur la table

7 réponses
Avatar
gaston
bonjour

sous Access 2002 XP_PRO
ma base comporte entre autres, une table d'inventaire à 10 champs.

un formulaire d'acceuil permet le controle de la base par l'ouverture d'X
formulaires fonctionnels.

je souhaite à chaque ouverture du formulaire d'acceuil, tester dynamiquement
toute la table sur deux champs et en modifier un troisième qui est le
résultat du test(oui/non).

je galère un peu avec SQL, VBA et les requêtes pour tester cycliquement les
enregistrements d'une table.
merci de votre aide

7 réponses

Avatar
Jessy Sempere [MVP]
Bonjour

Il va nous falloir un peu plus de précision...
Quel type de test souhaite tu faire ? Histoire de savoir si une simple
requête de mise à jour avec critère peut suffir ou s'il faut faire une
condition en passant par VBA.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------

"gaston" a écrit dans le message de news:

bonjour

sous Access 2002 XP_PRO
ma base comporte entre autres, une table d'inventaire à 10 champs.

un formulaire d'acceuil permet le controle de la base par l'ouverture d'X
formulaires fonctionnels.

je souhaite à chaque ouverture du formulaire d'acceuil, tester
dynamiquement
toute la table sur deux champs et en modifier un troisième qui est le
résultat du test(oui/non).

je galère un peu avec SQL, VBA et les requêtes pour tester cycliquement
les
enregistrements d'une table.
merci de votre aide




Avatar
gaston
re bonjour
explications
le premier champ est un nombre représentant l'année d'achat d'un matos
le deuxième est un nombre qui représente une durée de vie du matos
le troisième champ vrai/faux est le résultat d'un calcul:

il faut comparer pour chaque enregistrement de la table qui a une donnée
durée de vie du matos actuellement cochée vrai, comparer l'annéee courante
avec (l'année d'achat+durée de vie) et modifier en conséquence
l'enregistrement de la table(vrai/faux)
- si plus petit matos périmé = faux
- si plus grand matos ops = vrai

Plus généralement pour info: comment se balader dans une table depuis un
formulaire sans se placer depuis le formulaire sur cet enregistrement,
passer d'un champ à un autre et chercher une valeur, la modifier, la
supprimer.

merci d'avance.
Avatar
ze Titi
Bonjour gaston

Je ne sais pas si ça pourrait répondre à ta demande mais d'après ce que
j'ai compris, le lancement d'une requête Mise à jour pourrait faire le
travail... Le code SQL de cette requête devrait ressembler à ça:

UPDATE taTable SET le3emeChampúlse WHERE
Year(DateAdd("yyyy",ton2emeChamp,ton1erChamp))<Year(Date())


re bonjour
explications
le premier champ est un nombre représentant l'année d'achat d'un matos
le deuxième est un nombre qui représente une durée de vie du matos
le troisième champ vrai/faux est le résultat d'un calcul:

il faut comparer pour chaque enregistrement de la table qui a une donnée
durée de vie du matos actuellement cochée vrai, comparer l'annéee courante
avec (l'année d'achat+durée de vie) et modifier en conséquence
l'enregistrement de la table(vrai/faux)
- si plus petit matos périmé = faux
- si plus grand matos ops = vrai

Plus généralement pour info: comment se balader dans une table depuis un
formulaire sans se placer depuis le formulaire sur cet enregistrement,
passer d'un champ à un autre et chercher une valeur, la modifier, la
supprimer.

merci d'avance.


--
Voilou !
Bon code
Cordialement,

Ze Titi

Avatar
Jessy Sempere [MVP]
Bonjour

En supposant que la durée de vie soit exprimée en Année, il te suffit de
lancer une requête de mise à jour sur ouverture du formulaire du genre :

UPDATE taTable
SET ChampPerime = IIf(Year(Date())<([AnneeAchat]+[DureeVie],False,True);


@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------

"gaston" a écrit dans le message de news:

re bonjour
explications
le premier champ est un nombre représentant l'année d'achat d'un matos
le deuxième est un nombre qui représente une durée de vie du matos
le troisième champ vrai/faux est le résultat d'un calcul:

il faut comparer pour chaque enregistrement de la table qui a une donnée
durée de vie du matos actuellement cochée vrai, comparer l'annéee
courante
avec (l'année d'achat+durée de vie) et modifier en conséquence
l'enregistrement de la table(vrai/faux)
- si plus petit matos périmé = faux
- si plus grand matos ops = vrai

Plus généralement pour info: comment se balader dans une table depuis un
formulaire sans se placer depuis le formulaire sur cet enregistrement,
passer d'un champ à un autre et chercher une valeur, la modifier, la
supprimer.

merci d'avance.




Avatar
gaston
re re bonjour

merci de vos réponses:

j'ai écris vos codes------>mais rien n'est mis à jour.

j'ai fais une déclaration rsSQL="UPDATE NomTable SET ChampNaze=........"
docmd.runSQL rsSQL
le system semble comprendre le code mais aucun résultat.
Faut-il faire une boucle DO WHILE sur tout les enregistrements de la table
jusqu'à EOF?
Comment se positionner sur le premier enregistrement et lancer la boucle
contenant le test SQL?
Faut-il faire une déclaration Dim rs as RecordSet???

Merci, je nage en fait car je n'ai pas travaillé avec Access depuis
longtemps au profit d'Excel
gaston
Avatar
ze Titi
Bonjour gaston

Une requête parcourt tous les enregistrements d'une table, pas besoin
d'un recordset.
Tu devrais nous donner les types des champs de ta table, ça nous
aiderait sûrement.

Par ailleurs, tu n'avais pas besoin de passer par du VBA pour tester
cette requête. En créant une requête et en sélectionnant le mode SQL,
tu peux écrire du SQL directement. En plus, ça te permet de savoir si
la requête que tu as écrite effectue des opérations (boîte
d'avertissement lors de l'exécution).


re re bonjour

merci de vos réponses:

j'ai écris vos codes------>mais rien n'est mis à jour.

j'ai fais une déclaration rsSQL="UPDATE NomTable SET ChampNaze=........"
docmd.runSQL rsSQL
le system semble comprendre le code mais aucun résultat.
Faut-il faire une boucle DO WHILE sur tout les enregistrements de la table
jusqu'à EOF?
Comment se positionner sur le premier enregistrement et lancer la boucle
contenant le test SQL?
Faut-il faire une déclaration Dim rs as RecordSet???

Merci, je nage en fait car je n'ai pas travaillé avec Access depuis
longtemps au profit d'Excel
gaston


--
Voilou !
Bon code
Cordialement,

Ze Titi

Avatar
gaston
re re re

merci à jessy et titi

en fait vous avez raison!!!

le code de jessy fonctionne tel que décrit sans pb!

il faut que je me recycle ou vole des neurones (car personne ne sait s'il
lui en reste assez pour s'en séparer de qq uns).
a plus
gaston