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

Requete simple de mise à jour

7 réponses
Avatar
Txl
Bonjour,

Je voudrais faire une requete de mise =E0 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 =E0 jour

Montant Solde
3 3
2 5
-4 1
5 6

Etc

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

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

Et il m'envoie p=E9ter sur le th=E8me que l'exression solde n'est pas une
partie de la fonction d'agr=E9gat...

Merci de votre aide

7 réponses

Avatar
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<t1.cle)

mais c'est bien lourdingue...

Franchement, Excel, ce serait mieux :-)

db
Avatar
Txl
On 11 oct, 19:13, db wrote:
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<t1.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
Avatar
Txl
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<t1.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
Avatar
Gloops
Txl a écrit, le 12/10/2011 08:21 :
On 11 oct, 19:13, db wrote:
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<t1.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.
Avatar
db
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<=t1.id)


ça donne quoi ?

db
Avatar
Pogo
On 11 oct, 10:41, Txl wrote:
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


bonjour,

si le but de ta requete c'est d'afficher le solde, tu peux passer par
un etat : tu inseres l'id et 2 fois le montant. tu paramètres la
propriété cumul du 2ieme montant à "en continu".

Si cela peut t'aider

A+
Avatar
Txl
Salut à tous les 2:

3stone m'a fait un truc qui marche mais je me suis rendu compte après
qu'il y avait une faute dans ma demande...

Donc pour le bout qui marche c'est ca

Solde: DSum("Montant";"tblOperations";"[Ref] < " & [Ref] )

Mais par contre la il fait son calcul par ref et il faudrait qu'il
fasse son calcul sur "enregistrement précédent) parce que si je rentre
un enregistrement à une date antérieure (par exemple 10 jours AVANT le
dernier enregistrement le fait de faire le calcul sur la ref me fausse
le résultat.

Donc je cherche la formule pour remplacer [ref] par "enregistrement
précédent", ensuite je trie mes enregistrements par date et la je suis
bon.

Merci de votre aide


On Oct 13, 9:26 pm, Pogo wrote:
On 11 oct, 10:41, Txl wrote:







> 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) 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 u ne
> partie de la fonction d'agrégat...

> Merci de votre aide

bonjour,

si le but de ta requete c'est d'afficher le solde, tu peux passer par
un etat : tu inseres  l'id et 2 fois le montant. tu paramètres la
propriété cumul du 2ieme montant à "en continu".

Si cela peut t'aider

A+