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 16/12/2011, 17h40   #1
Futur Membre du Club
 
Inscription : novembre 2010
Messages : 101
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 101
Points : 16
Points : 16
Par défaut Mise à jour après choix d'un Maximum

Bien le bonjour à tous !


=> mots-clefs : UPDATE, SELECT MAX


Informations :
Une table source TS avec les champs CPo (= clef primaire)/Objet/Type/Inventaire


Ma contrainte A : le champ Inventaire contient deux ensembles de données => de 000001 à 000100 et de 015000 à 020000
Ma contrainte B : sans utiliser le mode "sous-formulaire" (par souci esthétique)

Mon souhait A : faire apparaître dans un formulaire F, la valeur calculée 000101 si l'on n'a que 000100 en TS ; puis 000102 dès que 000101 en TS ; etc...
Mon souhait B : incrémenter à volonté le premier ensemble pour obtenir 000101, 000102, etc...


=> Ma tentative :
* création d'une requête Rm (résultat : ok)
Code :
1
2
SELECT Max(TS.Inventaire)+1 AS NvInv
FROM TS;
* création d'une table TI avec champs CPn (= clef primaire)/Inventaire (résultat : ok)
* création d'une requête de mise-à-jour Ru du champ TI.Inventaire à partir du champ Rm.NvInv (résultat : échec)
Code :
1
2
UPDATE Rm, TI
SET Rm.Inventaire = TI.Inventaire;
-> échec parce que Rm peut être mise à jour (dixit la box d'erreur)...


Où est le problème ? Dans la méthode ? Dans la Ru ? s'il vous plaît

Débutement,
Bk
brankorri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2011, 07h59   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
Bonjour,
la requête Rm doit stocké le résultat dans une table par création (il faudra géré la suppression) , ajout (il faudra géré le vidage) ou modification de cette table que j'ai nommé ici Rm2
puis mettre à jour le numéro Inventaire
Code :
1
2
 
UPDATE TI, Rm2 SET TI.Inventaire = [Rm2]![NvInv] WHERE (((TI.Inventaire) Is Null));
Il faut une condition (WHERE) pour éviter d'écraser tous les numéros Inventaire
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2011, 17h54   #3
Futur Membre du Club
 
Inscription : novembre 2010
Messages : 101
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 101
Points : 16
Points : 16
Par défaut réponse

Bonjour Hélas,

Merci pour ta proposition. Venant d'essayer, je vois que cela ne fonctionne pas.
Pour détail : j'avais créé la table TI afin de faire apparaître esthétiquement la valeur (exp: 000101 si 000100 acquis) dans mon formulaire F. Mon idée consistait en ce que cette table TI soit réceptrice de la Requête du compte.

Or avec ta proposition, le compte développé en Requête n'apparaît pas.
As-tu une idée-solution, s'il te plaît ?

Bk
brankorri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 08h59   #4
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
Bonjour,
si j'ai bien compris
Code :
1
2
3
4
5
6
7
 
 'vide la table tbRm
 DoCmd.RunSQL "DELETE tbRm.* FROM tbRM;"
 'stocke dans tbRM la valeur MAX(Inventaire)+1
 DoCmd.OpenQuery "RM"
 'met à jour la table TI
 DoCmd.OpenQuery "RM2"
avec RM
Code :
1
2
 
INSERT INTO tbRm ( NvInv ) SELECT Max(TS.Inventaire)+1 AS NvInv FROM TS;
et RM2
Code :
1
2
 
UPDATE TI, tbRm SET TI.Inventaire = [tbrm]![NvInv];
ce code fonctionne
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 11h29   #5
Futur Membre du Club
 
Inscription : novembre 2010
Messages : 101
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 101
Points : 16
Points : 16
Par défaut réponse

Bonjour Helas,

A la lecture de ton code, j'essaie de comprendre : faut-il que je crée une table Rm ? Chez moi, Rm désigne seulement une requête que je développe à partir de la table Ts : Rm me servait déterminer le maximum.
Qu'en est-il s'il te plaît ? Dès que su, j'applique et je te dis

Merci,
Bk
brankorri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 22h02   #6
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour brankorri,

Ill vaut que tu crée une table tbRm avec le champ NvInv, dont tu précisera le type de donnée.
Ensuite tu créera les 2 requêtes RM et RM2 en recopiant le code SQL que t'a communiqué hélas

A bientôt
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h54.


 
 
 
 
Partenaires

Hébergement Web