Pb MAJ de table avec une requete

taguazou Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 26 juillet 2004 - 15 juil. 2004 à 14:33
taguazou Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 26 juillet 2004 - 26 juil. 2004 à 16:49
Bonjour,
je ne sais si je vais m'exprimer correctement, je vais essayer de me faire comprendre :

J'ai deux recordsets (dont le résultat est différent) et je cherche à mettre à jour une table en utilisant la différence des deux recordset en clair :
rs1 et rs2
rs1 est bon ( à jour)
je veux comparer avec rs2, et si des enregistrements sont différents alors updater rs2 avec rs1.

Comment faire ?

Quelqu'un a t-il la solution ? Il y a t-il une fonction dans VB permettant de comparer les deux recordsets ?

Merci à l'avance.

8 réponses

cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
15 juil. 2004 à 15:16
Ca marche pas comme ca ???

if rs2 <> rs1 then
' tu fais ton
.edit

.update

end if

It@li@
0
taguazou Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 26 juillet 2004
15 juil. 2004 à 16:22
Quand je fais une comparaison des deux recordsets, il me sort "incompatibilité de type" à la ligne du if rs <> rs2

En fait c'est plutôt un addnew qu'un update.

Si tu as une idée je suis preneur.

Merci de ton aide
0
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
17 juil. 2004 à 13:00
On peut faire ça avec une requete SQL du genre :

INSERT INTO TABLE2
SELECT DISTINCT T1.* FROM TABLE1 T1 LEFT OUTER JOIN TABLE2 T2 ON T2.ChampClé=T1.ChampClé WHERE T2.ChampClé IS NULL

qui signifie (partie SELECT) Cherche les enregistrements de T1 qui n'existent pas dans T2 et (partie INSERT) inère les dans TABLE2.

La jointure externe gauche (LEFT OUTER JOIN) permet de rammener tous les enregistrements de TABLE1 (T1) qu'il y ai ou non des enregistrements égaux dans TABLE2. Si le champ clé de la TABLE1 n'a pas d'équivalent dans la TABLE2, le champ clé de la TABLE2 a une valeur Null, c'est ceux que l'on recherche. La clause WHERE sélectionne les enregistrements dont le champ clé est à Null et donc qu'il faut créer ....

Je suis parti sur l'idée que tes 2 recordsets sont sur 2 tables différentes mais de même structure.

Si ce n'est pas le cas, Il faut préciser ce que l'on récupère de T1 et que l'on met dans TABLE2. Par exemple :

INSERT INTO TABLE2 (ChampCle,Champ2, Champ3) SELECT T1.ChampCle,"TOTO",T1.Champ2 FROM ...

J'espère avoir répondu en partie à ta question, mais surtout te "titiller" sur les possibilités de SQL.

Cordialement,
Alain 31
0
taguazou Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 26 juillet 2004
19 juil. 2004 à 12:17
Je veux bien essayer en SQL, seulement je connait peu de choses en sql voici la requete retranscrite, mais j'ai une erreur de syntaxe.
Voici la requete :

sql3 = "INSERT INTO Table_Postes_budgétaire (CTYPROD,LTYPPRO3) FROM Table_Postes_budgétaire SELECT DISTINCT rs.* FROM Entrée_fact_EI rs LEFT OUTER JOIN Table_Postes_budgétaire rs2 ON rs2.LTYPPRO3=rs.LTYPPRO3 WHERE rs2.LTYPPRO3 IS NULL"

Comme je ne connait pas trop les syntaxes, si tu pouvais me donner un coup de pouce, je serais l'homme le plus heureux.

Merci à l'avance.

Cordialement.
0

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

Posez votre question
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
19 juil. 2004 à 19:40
Essaye en précisant les champs rammenés :
sql3 = "INSERT INTO Table_Postes_budgétaire (CTYPROD,LTYPPRO3) FROM Table_Postes_budgétaire SELECT DISTINCT rs.CTYPROD, RS.LTYPPRO3 FROM Entrée_fact_EI rs LEFT OUTER JOIN Table_Postes_budgétaire rs2 ON rs2.LTYPPRO3=rs.LTYPPRO3 WHERE rs2.LTYPPRO3 IS NULL"

A+

Alain 31
0
taguazou Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 26 juillet 2004
21 juil. 2004 à 10:04
J'ai toujours le même problème : erreur de syntaxe dans l'instruction INSERT INTO.

J'ai controlé les noms de champs et de table sans y trouver d'erreurs.

Est ce que les recorsets peuvent lui poser un problème ? Si oui de quel nature. Dans les deux recordset il y a uniquement les deux champs qui m'interesse.

Merci de ton aide.
0
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
22 juil. 2004 à 10:36
Quel est ton environnement ?

Si c'est VB et que tu passe via une connexion genre :
DIM Xconnexion AS NEW ADODB.Connexion
....
Ouverte avec :
Xconnexion. Open "Provider=xxx;....

On lance la requete avec :
Xconnexion.Execute sql3

Alain 31
0
taguazou Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 26 juillet 2004
26 juil. 2004 à 16:49
Merci pour ses précisions, mais ma connection est bonne (elle fonctionne avec les requetes de selection). L'erreur est toujours au niveau du insert into. Il y a t-il possibilité de ne pas utiliser mes rst pour mettre à jour la table de cette façon :

sql3 = "INSERT INTO Table_Postes_budgétaire (CTYPROD,LTYPPRO3) FROM Table_Postes_budgétaire SELECT DISTINCT Entrée_fact_EI.CTYPROD, Entrée_fact_EI.LTYPPRO3 FROM Entrée_fact_EI LEFT OUTER JOIN Table_Postes_budgétaire ON Table_Postes_budgétaire.LTYPPRO3=Entrée_fact_EI.LTYPPRO3 WHERE Table_Postes_budgétaire.LTYPPRO3 IS NULL"

Cependant j'ai toujours un problème de syntaxe dans INSERT INTO.

Merci de tes réponses.
0
Rejoignez-nous