GNT sans publicité, site mobile, fonctionnalitées exclusives...

Requete simple de mise à jour

Le
Txl
Bonjour,

Je voudrais faire une requete de mise à jour qui me permette de
calculer un solde en fonction des enregistrements.

Donc j'ai ma table qui contient les champs

montant
solde

et je voudrais faire une requete qui me sorte le resultat suivant et
mette la table à jour

Montant Solde
3 3
2 5
-4 1
5 6

Etc

Si dans le form de la table je mets un champ =somme([montant]) il me
calcule le total FINAL et pas les "intermédiaires" (ce que je veux) et
donc j'ai crée un champ solde dans la table pour aller y stocker le
solde après chaque nouvel enregistrement, ma requete de base est super
simple

UPDATE tbloperations SET tbloperations.Solde = Sum([montant]);

Et il m'envoie péter sur le thème que l'exression solde n'est pas une
partie de la fonction d'agrégat

Merci de votre aide
Lire les 7 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
db
Le #23852461
Le 11/10/2011 10:41, Txl a écrit :
Bonjour,

Je voudrais faire une requete de mise à jour qui me permette de
calculer un solde en fonction des enregistrements.

Donc j'ai ma table qui contient les champs

montant
solde

et je voudrais faire une requete qui me sorte le resultat suivant et
mette la table à jour

Montant Solde
3 3
2 5
-4 1
5 6

Etc

Si dans le form de la table je mets un champ =somme([montant]) il me
calcule le total FINAL et pas les "intermédiaires" (ce que je veux) et
donc j'ai crée un champ solde dans la table pour aller y stocker le
solde après chaque nouvel enregistrement, ma requete de base est super
simple

UPDATE tbloperations SET tbloperations.Solde = Sum([montant]);

Et il m'envoie péter sur le thème que l'exression solde n'est pas une
partie de la fonction d'agrégat...





Bonsoir,

Pour faire ce genre de choses, il vaut mieux utiliser Excel qu'Access :
la notion de ligne précédente y a un sens, alors qu'avec Access, ça n'en
a que si on a une information précise (date, clé, ...). Et même dans ce
cas-là, le fait de stocker une information calculée va à l'encontre des
règles "normales" de bases de données.

Si vous avez une clé incrémentée dans votre table, on peut
éventuellement s'en sortir en faisant quelque chose du genre :

update tbloperations t1 set t1.solde=(select sum(t2.montant) from
tbloperations t2 where t2.cle
mais c'est bien lourdingue...

Franchement, Excel, ce serait mieux :-)

db
Txl
Le #23855701
On 11 oct, 19:13, db
Le 11/10/2011 10:41, Txl a crit :









> Bonjour,

> Je voudrais faire une requete de mise jour qui me permette de
> calculer un solde en fonction des enregistrements.

> Donc j'ai ma table qui contient les champs

> montant
> solde

> et je voudrais faire une requete qui me sorte le resultat suivant et
> mette la table jour

> Montant    Solde
> 3              3
> 2              5
> -4             1
> 5              6

> Etc

> Si dans le form de la table je mets un champ =somme([montant]) il me
> calcule le total FINAL et pas les "interm diaires" (ce que je veux) et
> donc j'ai cr e un champ solde dans la table pour aller y stocker le
> solde apr s chaque nouvel enregistrement, ma requete de base est super
> simple

> UPDATE tbloperations SET tbloperations.Solde = Sum([montant]);

> Et il m'envoie p ter sur le th me que l'exression solde n'est pas une
> partie de la fonction d'agr gat...

Bonsoir,

Pour faire ce genre de choses, il vaut mieux utiliser Excel qu'Access :
la notion de ligne pr c dente y a un sens, alors qu'avec Access, a n'en
a que si on a une information pr cise (date, cl , ...). Et m me dans ce
cas-l , le fait de stocker une information calcul e va l'encontre des
r gles "normales" de bases de donn es.

Si vous avez une cl incr ment e dans votre table, on peut
ventuellement s'en sortir en faisant quelque chose du genre :

update tbloperations t1  set t1.solde=(select sum(t2.montant) from
tbloperations t2 where t2.cle
mais c'est bien lourdingue...

Franchement, Excel, ce serait mieux :-)

db



Bonjour,

Merci du tuyau mlais je ne veux pas utiliser excel pour ca, j'ai une
autre base qui fonctionne et me donne les infos de facturation et
d'achat qu'il ne faut pour remplir celle la qui va me servir à faire
un prévisionnel de trésorerie et j'ai vraiment pas envie de me
palucher excel pour devoir rerentrer les données...

J'ai un champ "ref" avec incrémentation auto et je peux envisager de
strocker les valeurs dans une table tampon meme si au fur et à mesure
de la croissance de la table ca va ralentir le traitement.

Ca parait incroyable qu'on puisse pas lui dire en gros

"stocke dans le champ solde la valeur du champ solde de
l'enregistrement n-1 additionné à la valeur du champ montant de
l'enregistrement n"....peut etre en vba ?

Merci d'avance
Txl
Le #23856421
J'ai avancé sur le sujet, j'ai un bout de sql mais qui ne marche pas
bien sur :)

UPDATE tbloperations SET tbloperations.Solde =
DLookUp("[solde]","tbloperations","[id]=[id]-1")+[montant];

J'ai pas d'erreurs mais ca ne met rien dans le champ solde alors que
les valeurs dans montant sont bien rentrées dans la table operations

J'ai même tenté avec un &nz pour éviter le problème de
l'enregistrement 1 ou il à des problèmes à aller a l'enregistrement
précédent mais ca marche pas mieux

UPDATE tbloperations SET tbloperations.Solde =
DLookUp("[solde]","tbloperations","[id]=" & nz([id]-1))+[montant];

Pareil, pas d'erreur mais pas de résultat

Merci de votre aide










> Le 11/10/2011 10:41, Txl a crit :

> > Bonjour,

> > Je voudrais faire une requete de mise jour qui me permette de
> > calculer un solde en fonction des enregistrements.

> > Donc j'ai ma table qui contient les champs

> > montant
> > solde

> > et je voudrais faire une requete qui me sorte le resultat suivant et
> > mette la table jour

> > Montant    Solde
> > 3              3
> > 2              5
> > -4             1
> > 5              6

> > Etc

> > Si dans le form de la table je mets un champ =somme([montant]) il m e
> > calcule le total FINAL et pas les "interm diaires" (ce que je veux) e t
> > donc j'ai cr e un champ solde dans la table pour aller y stocker le
> > solde apr s chaque nouvel enregistrement, ma requete de base est supe r
> > simple

> > UPDATE tbloperations SET tbloperations.Solde = Sum([montant]);

> > Et il m'envoie p ter sur le th me que l'exression solde n'est pas une
> > partie de la fonction d'agr gat...

> Bonsoir,

> Pour faire ce genre de choses, il vaut mieux utiliser Excel qu'Access :
> la notion de ligne pr c dente y a un sens, alors qu'avec Access, a n'en
> a que si on a une information pr cise (date, cl , ...). Et m me dans ce
> cas-l , le fait de stocker une information calcul e va l'encontre des
> r gles "normales" de bases de donn es.

> Si vous avez une cl incr ment e dans votre table, on peut
> ventuellement s'en sortir en faisant quelque chose du genre :

> update tbloperations t1  set t1.solde=(select sum(t2.montant) from
> tbloperations t2 where t2.cle
> mais c'est bien lourdingue...

> Franchement, Excel, ce serait mieux :-)

> db

Bonjour,

Merci du tuyau mlais je ne veux pas utiliser excel pour ca, j'ai une
autre base qui fonctionne et me donne les infos de facturation et
d'achat qu'il ne faut pour remplir celle la qui va me servir à faire
un prévisionnel de trésorerie et j'ai vraiment pas envie de me
palucher excel pour devoir rerentrer les données...

J'ai un champ "ref" avec incrémentation auto et je peux envisager de
strocker les valeurs dans une table tampon meme si au fur et à mesure
de la croissance de la table ca va ralentir le traitement.

Ca parait incroyable qu'on puisse pas lui dire en gros

"stocke dans le champ solde la valeur du champ solde de
l'enregistrement n-1 additionné à la valeur du champ montant de
l'enregistrement n"....peut etre en vba ?

Merci d'avance
Gloops
Le #23857301
Txl a écrit, le 12/10/2011 08:21 :
On 11 oct, 19:13, db
Le 11/10/2011 10:41, Txl a crit :









Bonjour,



Je voudrais faire une requete de mise jour qui me permette de
calculer un solde en fonction des enregistrements.



Donc j'ai ma table qui contient les champs



montant
solde



et je voudrais faire une requete qui me sorte le resultat suivant et
mette la table jour



Montant Solde
3 3
2 5
-4 1
5 6



Etc



Si dans le form de la table je mets un champ =somme([montant]) il m e
calcule le total FINAL et pas les "interm diaires" (ce que je veux) e t
donc j'ai cr e un champ solde dans la table pour aller y stocker le
solde apr s chaque nouvel enregistrement, ma requete de base est supe r
simple



UPDATE tbloperations SET tbloperations.Solde = Sum([montant]);



Et il m'envoie p ter sur le th me que l'exression solde n'est pas une
partie de la fonction d'agr gat...



Bonsoir,

Pour faire ce genre de choses, il vaut mieux utiliser Excel qu'Access :
la notion de ligne pr c dente y a un sens, alors qu'avec Access, a n'e n
a que si on a une information pr cise (date, cl , ...). Et m me dans c e
cas-l , le fait de stocker une information calcul e va l'encontre des
r gles "normales" de bases de donn es.

Si vous avez une cl incr ment e dans votre table, on peut
ventuellement s'en sortir en faisant quelque chose du genre :

update tbloperations t1 set t1.solde=(select sum(t2.montant) from
tbloperations t2 where t2.cle
mais c'est bien lourdingue...

Franchement, Excel, ce serait mieux :-)

db



Bonjour,

Merci du tuyau mlais je ne veux pas utiliser excel pour ca, j'ai une
autre base qui fonctionne et me donne les infos de facturation et
d'achat qu'il ne faut pour remplir celle la qui va me servir à faire
un prévisionnel de trésorerie et j'ai vraiment pas envie de me
palucher excel pour devoir rerentrer les données...

J'ai un champ "ref" avec incrémentation auto et je peux envisager de
strocker les valeurs dans une table tampon meme si au fur et à mesure
de la croissance de la table ca va ralentir le traitement.

Ca parait incroyable qu'on puisse pas lui dire en gros

"stocke dans le champ solde la valeur du champ solde de
l'enregistrement n-1 additionné à la valeur du champ montant de
l'enregistrement n"....peut etre en vba ?

Merci d'avance



J'ai vu une requête basée sur ce principe il y a quelques mois. J'ai un
peu oublié.
Il me semble que l'idée de l'index est à creuser.
En mettant un "WHERE INDEX<" & INDEX
ou quelque chose du genre, ça peut donner des idées.
db
Le #23863841
Le 12/10/2011 11:28, Txl a écrit :
J'ai avancé sur le sujet, j'ai un bout de sql mais qui ne marche pas
bien sur :)

UPDATE tbloperations SET tbloperations.Solde > DLookUp("[solde]","tbloperations","[id]=[id]-1")+[montant];

J'ai pas d'erreurs mais ca ne met rien dans le champ solde alors que
les valeurs dans montant sont bien rentrées dans la table operations

J'ai même tenté avec un&nz pour éviter le problème de
l'enregistrement 1 ou il à des problèmes à aller a l'enregistrement
précédent mais ca marche pas mieux

UPDATE tbloperations SET tbloperations.Solde > DLookUp("[solde]","tbloperations","[id]="& nz([id]-1))+[montant];



Ah oui, c'est normal que ça ne fasse rien...





Et ça :

update tbloperations t1 set t1.solde=(select sum(t2.montant) from
tbloperations t2 where t2.id

ça donne quoi ?

db
Publicité
Suivre les réponses
Poster une réponse
Anonyme