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 20/10/2011, 11h10   #1
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Par défaut requete de mise à jour à partir de controle de form

Bonjour à tous,

J'ai un sous-form [SF-composantcommandefournisseur] qui me donne les détails d'une commande et qui me calcule le total de la commande dans le controle [texte11]

La table [STV-composantcommandefournisseur] qui stocke les données du sousform à un champ [numerotablecommandefournisseur] qui me renvoie à la table principale des commandes [TV-commandefournisseur] dans le champ [numeroauto] qui est mon numéro de commande.

Donc comme cette table contient un champ [montanttotalcommande] je suis sur que vous me voyez arriver avec mes GROS sabots

Je cherche à faire une requete ou un bout de code qui me mettrait le total de la commande à jour dans la table tv-commandefournisseur à chaque fois qu'on consulte ou modifie la commande.

Peut etre un truc sur entrée du sous form mais je me perds dans les références car je ne veux modifier que les données de l'enregistrement de la table qui correspond a la commande ouverte dans le sous form.

Merci beaucoup de votre aide

Merci de votre aide
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 11h43   #2
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
J'ai réfléchi de mon mieux (donc pas terrible) et j'ai tenté ca

Code sql :
1
2
UPDATE [Tv-CommandeFournisseur] INNER JOIN [STv-ComposantCommandeFournisseur] ON [Tv-CommandeFournisseur].NumeroAuto = [STv-ComposantCommandeFournisseur].NumeroTableCommandeFournisseur SET [Tv-CommandeFournisseur].MontantTotalCommande = [forms]![sf-composantcommandefournisseur]![texte11]
WHERE ((([Tv-CommandeFournisseur].numeroauto)=[numerotablecommandefournisseur]));
J'ouvre le form, je vais sur un enregistrement ou le total existe et je lance la requete

1° il me demande [forms]![sf-composantcommandefournisseur]![texte11] donc il ne doit pas le trouver

2° quand je rentre une valeur ca me met a jour TOUS les enregistrements de la table tv-commandefournisseur donc la clause where est ignorée

Merci de votre aide
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 16h14   #3
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

Pas besoin de requête s'il s'agit de mettre à jour uniquement les enregistrements courants :

Code :
Forms![CommandeFournisseur]![MontantTotalCommande] = Forms![CommandeFournisseur]![SF-composantcommandefournisseur].Form.[Texte11]
avec CommandeFournisseur = nom de votre formulaire principal.

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 08h37   #4
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Bonjour,

J'ai modifié le code d'ouverture du form principal et ca me met un message d'erreur comme quoi il ne peut attribuer cette valeur a cet objet

Code :
1
2
3
4
5
6
7
8
Private Sub Form_Open(Cancel As Integer)
 
DoCmd.Maximize
Forms![F-CommandeFournisseur]![MontantTotalCommande] = Forms![F-CommandeFournisseur]![SF-composantcommandefournisseur].Form.[Texte11]
DoCmd.GoToRecord , , acLast
 
 
End Sub
J'ai bien corrigé le nom du form principal en F-commandefournisseur mais ca ne donne rien de mieux...

Je me suis trompé ou ?

Merci
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 08h50   #5
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

Il est probable que [texte11] qui est un champ calculé (si j'ai bien compris) dans le sous formulaire ai une valeur Null à l'ouverture de votre formulaire principal, ce qui génère l'erreur.

Il est donc préférable de mettre votre code dans le sous-formulaire, après celui calculant [texte11] ... avec l'avantage qu'à chaque fois que texte11 sera recalculé, le champ [MontantTotalCommande] sera mis à jour.

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 09h21   #6
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Ok, merci, ca marche bcp mieux comme ca

Par contre maintenant je voudrais mettre les 1000+ enregistrements à jour.

Pour le moment je peux faire avec le code dans la propriété click du bouton du montant total

Code :
1
2
3
Private Sub Texte11_Click()
Forms![F-CommandeFournisseur]![MontantTotalCommande] = Forms![F-CommandeFournisseur]![SF-composantcommandefournisseur].Form.[Texte11]
End Sub
Mais bon, s'il faut que je fasse ca sur 1000 enregistrements je suis pas rendu

Pour un nouvel enregistrement ca devrait se calculer tout seul mais sachant que les calculs sont déja fait pour les 1000 existants dans quelle propriété de quel controle je dois mettre le code magique ?

J'ai essayé dans form_open ou dans got_focus(du sous-form) mais ca donne rien...

Merci
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 11h10   #7
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Sur le principe c'est risqué de gérer les données de cette façon : elles sont en quelque sorte dupliquées donc vous aurez à faire le lien systématiquement dans votre bdd entre le détail commande (utilisé pour le calcul de texte11) et le "MontantTotalCommande".

Si vous ne pouvez faire autrement à ce stade, la mise à jour des 1000 enregistrements ne peut se faire rapidement qu'avec votre option initiale : une requête.

Si "texte11" actuel = somme du champ "champàcumuler", cela donnera :

Code :
UPDATE [Tv-CommandeFournisseur] SET [Tv-CommandeFournisseur].MontantTotalCommande = DSum("champàcumuler","STv-ComposantCommandeFournisseur ",[Numauto] & " =NumeroTableCommandeFournisseur ");

Bcdt
fbtsra 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 16h26.


 
 
 
 
Partenaires

Hébergement Web