OVH Cloud OVH Cloud

requête ajout et incrément

6 réponses
Avatar
ran[débutante vba]
Bonjour =E0 tous,

D'habitude j'utilise dans mon formulaire la formule
qui incr=E9mente de 1 la valeur du champ concern=E9

l=E0 je souhaite cr=E9er une requ=EAte ajout qui prends tous=20
les enregistrements d'une table pour les ajouter =E0 une=20
autre et ....=20
il a pas l'air d'=EAtre d'accord parceque il propose la=20
m=EAme valeur pour tous les enregistrements =E0 ajouter alors=20
qu'il s'agit de la clef ds la table de destination

comment faire ? il faut cr=E9er une routine qui ajoute les=20
enregistrements 1 =E0 la fois ?

parceque =E7a
----------------------------------------------------------
INSERT INTO PI=E8CE ( IDMODELE, IDMATIERE, LIB_PIECE,=20
IDPIECE, IDPIECE_BRUTE, IDTYPE_PIECE, N_PIECE )
SELECT Pc_brutes_acreer.IDMODELE,=20
Pc_brutes_acreer.IDMATIERE, Pc_brutes_acreer.LIBELLE, DMax
("IDPIECE","PI=E8CE")+1 AS Expr4, 0 AS Expr1, 43 AS Expr2,=20
DMax("N_PIECE","PI=E8CE")+1 AS Expr3
FROM Pc_brutes_acreer INNER JOIN PI=E8CE ON=20
(Pc_brutes_acreer.IDMATIERE =3D PI=E8CE.IDMATIERE) AND=20
(Pc_brutes_acreer.IDMODELE =3D PI=E8CE.IDMODELE)
GROUP BY Pc_brutes_acreer.IDMODELE,=20
Pc_brutes_acreer.IDMATIERE, Pc_brutes_acreer.LIBELLE, DMax
("IDPIECE","PI=E8CE")+1, 0, 43, DMax("N_PIECE","PI=E8CE")+1;
-----------------------------------------------------
ne marche pas

merci

6 réponses

Avatar
mouly
ran[débutante vba] wrote in
news:031001c51591$bb63faa0$:

DMax ("IDPIECE","PIèCE")+1



pour des raisons d'optimisation, le DMax dans ton select n'est calculé
qu'une seule fois.

pour forcer le recalcul, créé une fonction que tu appeleras avec un
paramètre qui change (la clef primaire de ta table par exemple). cette
fonction devra calculer le DMAX qu'il te faut.


--
mouly
mouly2 at yahoo dot com

Avatar
Je comprends vaguement le concept mais pas assez de
connaissances pour l'appliquer.

Où, quoi, comment faire ?

merci

-----Message d'origine-----
ran[débutante vba]
wrote in

news:031001c51591$bb63faa0$:

DMax ("IDPIECE","PIèCE")+1



pour des raisons d'optimisation, le DMax dans ton select
n'est calculé

qu'une seule fois.

pour forcer le recalcul, créé une fonction que tu
appeleras avec un

paramètre qui change (la clef primaire de ta table par
exemple). cette

fonction devra calculer le DMAX qu'il te faut.


--
mouly
mouly2 at yahoo dot com
.




Avatar
mouly
wrote in
news:033001c51597$48b5b4c0$:

Je comprends vaguement le concept mais pas assez de
connaissances pour l'appliquer.

Où, quoi, comment faire ?


ok inspire toi de ce lien :

http://www.self-access.com/access/grenier/acRedir.php?id=3

on y parle de la fonction Rnd() mais c'est un problème similaire au tiens


--
mouly
mouly2 at yahoo dot com

Avatar
ran[nulle en vba ]
Je crains de faire tache.
J'y arrive pas.
J'essaie un truc du genre ...
' --------------------------------------------------
' FONCTION INCREMENT POUR REQUETE
' --------------------------------------------------
' Entrée : champ pour DMax
' table pour DMax
' idvar <- Une valeur quelconque, ou un
'champ de requête qui varie à chaque enregistrement
' Sortie : Increment -> Nombre entier incrémenté
'
Public Function Test(champ As String, table As String, v
As Variant)
Randomize
temp = Int(Rnd * v)
Test = (DMax(champ, table) + 1) + temp
Test = Test - temp
'Response = MsgBox(temp)
End Function

mais ça reforce pas mon calcul
je ne comprends pas ce qui le fait "recalculer" dans la
gfonction exemple
Avatar
mouly
"ran[nulle en vba ]" wrote in
news:094901c51803$bb662810$:


mais ça reforce pas mon calcul
je ne comprends pas ce qui le fait "recalculer" dans la
fonction exemple


en fait la fonction est appelée avec des paramètres différent à chaque fois

dans la requête on utilise maFonction(champ1) par exemple
si champ1 est une clé de ta table, il sera différent pour chaque ligne de
ta requête et Access devra recalculer la fonction à chaque fois
même si chanp1 n'est pas utile à ta fonction, si il apparait dans les
paramètres, il force un recalcul de ta fonction



--
mouly
mouly2 at yahoo dot com

Avatar
ran[débutante vba]
ok

alors si c'est juste appeler un paramètre variable qu'il
faut, je l'ai fait

j'avais même fait tourner un random au cas où ça aurait
aidé ... niet

mais il recalcule quand même pas mon Dmax
le résultat reste identique