Requete sql

elbrahimo Messages postés 25 Date d'inscription jeudi 25 décembre 2003 Statut Membre Dernière intervention 25 novembre 2004 - 20 oct. 2004 à 14:36
elbrahimo Messages postés 25 Date d'inscription jeudi 25 décembre 2003 Statut Membre Dernière intervention 25 novembre 2004 - 24 oct. 2004 à 11:37
salut à tous

je ne sais pas comment avec vb faire une requete qui met à jour des données d'une table1 à partir d'une sélection de table2, c'est à dire que j'aimerais récupérer des "lignes" par un select de la table2 et mettre ces données sur la table1 par des update pour la mettre à jour

merci d'avance pour votre aide

15 réponses

alexsimps2002 Messages postés 91 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 22 juillet 2006 4
20 oct. 2004 à 15:01
salut,
j'ai bien une idée, mais je ne sais pas sur quel critere tu veux mettre à jour les donnée de la table1 c'est les même enregistrements ?? si oui, je pense que ça pourrais donner ça (à peu prés):

set req=currentdb.createquerydef("","select * from table2 where ......")

while not res.eof
Set res=req.openrecordset

Set req2=currentdb.createquerydef("","select * frm table1 where CléPrimaireTable1=res.field(0)(CléPrimaire table2)
set res2=req2.openrecordset

res2.edit

res2.fields(1)=res.fields(1) '' Le champ de la table1 reçoit la valeur du champ de la table2

res2.update
res.movenext

wend

Si ça ne vas pas explique plus en détail .
@+
[i]Alexsimpsi]
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
20 oct. 2004 à 15:07
bonjour,

ou pe avec "select into" cad :

select nom_des champs_table1 into table2 from table1

ou encore insert into
ex : insert into Table2 select * from table1

j'espère t'avoir aider
gs
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 oct. 2004 à 15:07
SAlut,

Sais tu te servir D ADO,

Si oui

Avec un recordset et une requete SQL tu pourras faire la chose suivante:

rs.source = "UPDATE TABLE1 (les champs) VALUES (SELECT CEQUETUVEUX FROM TABLE2)"

OU un truc dans le style
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 oct. 2004 à 15:08
SAlut,

Sais tu te servir D ADO,

Si oui

Avec un recordset et une requete SQL tu pourras faire la chose suivante:

rs.source = "UPDATE TABLE1 (les champs) VALUES (SELECT CEQUETUVEUX FROM TABLE2)"

OU un truc dans le style
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 oct. 2004 à 15:11
oups desole pour les deux fois met vbfrance avait marque ERREUR SERVEUR et je croyait que le post n etait pas parti ;)
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
alexsimps2002 Messages postés 91 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 22 juillet 2006 4
20 oct. 2004 à 15:22
salut,
j'ai bien une idée, mais je ne sais pas sur quel critere tu veux mettre à jour les donnée de la table1 c'est les même enregistrements ?? si oui, je pense que ça pourrais donner ça (à peu prés):

set req=currentdb.createquerydef("","select * from table2 where ......")

while not res.eof
Set res=req.openrecordset

Set req2=currentdb.createquerydef("","select * frm table1 where CléPrimaireTable1=res.field(0)(CléPrimaire table2)
set res2=req2.openrecordset

res2.edit

res2.fields(1)=res.fields(1) '' Le champ de la table1 reçoit la valeur du champ de la table2

res2.update
res.movenext

wend

Si ça ne vas pas explique plus en détail .
@+
[i]Alexsimpsi]
0
alexsimps2002 Messages postés 91 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 22 juillet 2006 4
20 oct. 2004 à 15:22
salut,
j'ai bien une idée, mais je ne sais pas sur quel critere tu veux mettre à jour les donnée de la table1 c'est les même enregistrements ?? si oui, je pense que ça pourrais donner ça (à peu prés):

set req=currentdb.createquerydef("","select * from table2 where ......")

while not res.eof
Set res=req.openrecordset

Set req2=currentdb.createquerydef("","select * frm table1 where CléPrimaireTable1=res.field(0)(CléPrimaire table2)
set res2=req2.openrecordset

res2.edit

res2.fields(1)=res.fields(1) '' Le champ de la table1 reçoit la valeur du champ de la table2

res2.update
res.movenext

wend

Si ça ne vas pas explique plus en détail .
@+
[i]Alexsimpsi]
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
20 oct. 2004 à 15:32
oups j'avais pas vu que ct un maj que tu voulais

utilise le update :

update table1 set champs1=T2.champs1....
from table1 t1, table2 T2 where les jointures qui vont bien

j'espère t'avoir aider
gs
0
alexsimps2002 Messages postés 91 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 22 juillet 2006 4
20 oct. 2004 à 15:54
Désolé pour tout ces messages pb d'ordi. (J'étais parti et le touche entrée devait être bloquée je ne sais pas trop!!)

Alexsimps
0
elbrahimo Messages postés 25 Date d'inscription jeudi 25 décembre 2003 Statut Membre Dernière intervention 25 novembre 2004
20 oct. 2004 à 22:11
merci à toi Alexsimps c'est sympa de vouloir m'aider, je t'avoue que je n'ai pas bien compris tes instructions, je vais essayer d'être plus claire afin que tu puisse mieux m'aider (ou d'autres personnes).

voilà j'ai 2 tables : table1 et table2 , la table2 contient le champ [nom], [date] et [quantité], et la table2 est celle qui reçoit les nouvelles données,

j'aimerais grâce à un "update" récupérer les informations de la table2 pour mettre à jour ma table1
par exemple j'ai

table 1
1/1/99 dupond 17
1/1/04 toto 15
1/1/04 tartenfio 2

table2
2/2/05 toto 1
3/3/05 tartenfio 1

et on obtiendra :

table 1
1/1/99 dupond 17
2/2/05 toto 16
3/3/05 tartenfio 3

j'utilise adodb et j'ai déjà fait une requete qui fonctionne du style :
MaConnection.Execute ("iNSERT INTO table3 ( [date],[nom],[nombre] ) select [currentdate] ,[entryname] ,[ pages] from table4 where entryname='toto'")

voilà j'esperes avoir était le plus claire possible merci d'avance pour l'aide

a+
0
alexsimps2002 Messages postés 91 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 22 juillet 2006 4
21 oct. 2004 à 08:31
Salut,
après reflexion, je rejoins l'idée de sgrant, utilise un update, ça doit marcher. Si ça ne marche pas, ma première solution peut marcher, mais je te l'expliquerais plus en détail si besoin est.

Esssaye ça:
MaConnection.Execute ("Update Table1 Set T1.Date=T2.Date,T1.Quantite=T1.Quantite+T2.Quantite from Table1 T1, Table2 T2 Where T1.Nom=T2.Nom")

G spr que ça va marcher, sinon on essayera autre chose.

@+
Alexsimps
0
elbrahimo Messages postés 25 Date d'inscription jeudi 25 décembre 2003 Statut Membre Dernière intervention 25 novembre 2004
21 oct. 2004 à 21:47
je viens d'essayer ce que tu m'as dis mais rien à faire, ça ne fonctionne pas , j'avais essayer ce type de requête sous toutes ses formes .... mais rien ...... sur internet non plus je n'ai pas trouvé de solution ... t'es mon seul espoir !!!!!!!

sais tu si tu ne trouves pas la bonne requête si on peut par exemple mettre sous un tableau les resultats de select de table1 et ensuite exporter sur la table 2 ??? non ? tu vois une autre solution ??????
encore merci et à plus
0
alexsimps2002 Messages postés 91 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 22 juillet 2006 4
22 oct. 2004 à 08:44
Salut,
Je ne savais pas trop si cette requete aller fonctionnée, maintenant j'ai la réponse !!!
Dans ce cas là, j'ai une autre solution, mais beaucoup plus lourde à faire. Avec la chance que j'ai, il y a beaucoup de chance pour qu'il y ait une solution beaucoup plus courte mais bon, je n'aime pas faire dans le simple !!!
(Par ex, g fait une fonction numéroSemaine pour récupérer le numéro de la semaine d'une date précise, alors qu'il existe la fonction datepart("ww,date), qui fait la même chose !!

Bref !

Alors je t'explique un peu:
Moi je suis sous access ou sous excel, et j'utilise un DAO.recordset et un querydef

Tout d'abord, tu fait un select de ta table2
Tant que non Fin enregistrement de table 2
Tu fait un select de table1 where t1.nom=t2.nom
Tu te mets en modifications
Tu ajoutes 1 à table1 et tu change la date
tu met A jour
tu ferme la requete n°2
tu passes à l'enregistrement suivant de table2

En code ça donne ça:

Dim Req as querydef
Dim Res as DAO.Recordset
Dim Req2 as querydef
Dim Res2 as DAO.Recordset

set req=currentdb.createquerydef("","select * from table2")

while not res.eof

Set res=req.openrecordset

Set req2=currentdb.createquerydef("","select * form table1 where Table1.Nom = res.field(0)(CléPrimaire table2)

set res2=req2.openrecordset

res2.edit

res2.fields(1)=Res2.Fields(1)+res.fields(1)

res2.update

res.movenext

wend

Pour que ça marche, il faut que tu rajoute la référence DAO3.6 ou+.

Essaye mais moi avec ça je n'ai pas de pb.

@+

Alexsimps 8-)
0
alexsimps2002 Messages postés 91 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 22 juillet 2006 4
22 oct. 2004 à 08:46
Je me suis trompé. Il faut mettre le set res avant le while !!!
Alexsimps 8-)
0
elbrahimo Messages postés 25 Date d'inscription jeudi 25 décembre 2003 Statut Membre Dernière intervention 25 novembre 2004
24 oct. 2004 à 11:37
salut et merci pour ton aide précieuse ... tes commandes doivent sûrement marcher, mais j'essaye de l'adapter avec adodb ... en vain

merci de m'aider encore a+
0
Rejoignez-nous